Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование Методичка.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
5 Мб
Скачать
☆

«Наука вся - лишь море заблуждений, где нету дна, а правды нет и тени»

«Складні проблеми завжди мають прості, легкі для розуміння невірні розв'язання» (закон Гросмана) Формалізація алгоритму

А лгоритм - послідовність формальних дій по перетворенню інформації,

виконання яких приз­во­дить до розв'язання поставленої задачі.

З математичної точки зору алгоритмом називається відповідність між словами в абстрактному алфавіті.

Абстрактним алфавітом1 називається скінчена множина символів (це можуть бути літери якоїсь природної мови, цифри, спеціальні символи і т.і.), на­приклад: A = {α , φ , γ , δ} або В = {β , λ , π , τ}.

Словом алфавіту називається скінчена упорядкована послідовність сим­во­лів, наприклад: ai = αγφ або bj = πλβ. Порожнє слово не містить символів ал­фавіту. Кількість символів у слові називається довжиною слова. Слово bi нази­вається підсловом слова ai, якщо ai = bic, де c - будь-яке слово (у тому числі і по­рожнє).

Оператором (відображенням) алфавіту називається функція, що задає відповідність між одними словами алфавіту («вхідного») і іншими словами цьо­го ж або іншого алфавіту («вихідного»). Кажуть, що оператор Гai=bj пере­роб­­ляє слово ai вхідного алфавіту A у слово bj вихідного алфавіту В. Однозначним опе­­ратором алфавіту називається оператор, який кожне слово вхідного алфаві­ту ві­дображає в єдине слово вихідного алфавіту. Якщо не існує відображення де­я­кого слова ai вхідного алфавіту в слово bj вихідного алфавіту, то кажуть, що опе­­ратор на слові ai не визначено. Сукупність слів, на яких опе­ратор визначено, називають його областю визначення.

Кодуючим оператором Гai=bj називають відображення кожного сим­во­­лу вхідного алфавіту у слово («код») вихідного алфавіту. Нехай, наприклад, для алфавітів А і В визначено кодуючі оператори: Гα=βλτ, Гφ=λπ, Гγ=τλ, Гδ=βτ. То­­ді слово «αφγ» алфавіту А відображається у код «βλτλπτλ» алфавіту В. Про­цес, зворотний кодуванню, називається декодуванням і позначається Г-1 bj=ai. Наприклад, для слова «βττλβτλ» алфавіту В декодування дає слово «δγα» алфа­віту А.

Якщо оператор Гai=bj дає слово bj, а сполучений оператор Г-1 bj=ai дає слово ai, то кажуть, що кодуючі оператори взаємно однозначні і має місце зво­ротність кодування. Проте не всі операції кодування зворотні. Нехай, на­прик­лад, для алфавітів А и В визначено кодуючі оператори: Гα=β, Гφ=λ, Гγ=βλ, Гδ=βτ. Тоді кодування слова «αφγ» алфавіту А дасть код «βλβλ» алфаві­ту В, але декодування дає неоднозначні варіанти слів: «γγ», «αφγ», «γαφ» алфавіту А.

Таким чином, для зворотності кодування повинні виконуватися умо­ви:

 коди різних символів вхідного алфавіту повинні бути різними;

 код будь-якого символу вхідного алфавіту не може збігатися з жодним із підслів кодів інших символів цього ж алфавіту.

Кодування, при якому всі коди мають однакову довжину, називається нор­мальним кодуванням.

Фактично, абиякий процес перетворення інформації може бути формалі­зо­вано за допомогою операторів алфавіту: як вхідну, так і вихідну інформацію мо­же бути представлено як слова, а перетворення інформації - як встановлення де­якої відповідності між словами. Однією з характерних задач перетворення лек­­сичної інформації є переклад текстів з однієї мови на іншу за допомогою ба­­гатозначних операторів алфавіту.

Важливим теоретичним аспектом формалізації операторів алфавіту є за­соби іх задання. У тому випадку, коли область визначення оператора алфавіту є скінченою, то оператор може бути задано таблицею відповідності з колон­ками «вхідне слово» і «вихідне слово». Якщо ж область визначення оператора ал­фаві­ту є нескінченою, то оператор задається системою правил, яка дозволяє за скінчену кількість кроків знайти в області визначення оператора вихідне слово, від­повідне заданому вхідному слову.

Проте, між операторами алфавіту і алгоритмами існує суттєва різниця, яка полягає у тому, що:

- в операторі алфавіту суттєвою є лише відповідність між словами вхід­но­­го і вихідного алфавітів, а не засіб встановлення цієї відповідності;

- в алгоритмі ж, навпаки, суттєвим є засіб задання відповідності між сло­вами вхід­но­го і вихідного алфавітів.

Алгоритм - оператор алфавіту, який задано за допомогою скінченої системи правил, разом із правилами, що визначають його дію.

Оператори алфавіту називають рівними, якщо вони мають однакові об­ласті визначення і зіставляють абиякому слову вхідного алфавіту однакові слова вихідного алфавіту.

Алгоритми називають рівними, якщо оператори алфавітів є рів­ними і має місце співпадання систем правил, що задають дії алгоритмів для цих слів. Алго­ритми називають еквівалентними, якщо оператори алфавітів є рів­ними, але їх­ні системи правил не співпадають.

Алгоритм, відповідно до якого розв'язання поставленої задачі зводиться до арифметичних дій, називається чисельним алгоритмом. Прикладом ариф­ме­тичного алгоритму є алгоритм обліку суми ряду.

Алгоритм, відповідно до якого розв'язання поставленої задачі зводиться до логічних дій, називається логічним алгоритмом. Прикладом логічного алго­рит­му є алгоритм пошуку мінімального елемента множини.

Будь-який алгоритм повинен мати властивість дискретності у часі пере­творення даних, тобто він повинен являти собою послідовність «кроків», кож­ний із який в окремі моменти часу виконує дії, спрямовані на досягнення поста­вленої мети.

Алгоритм може мати такі властивості:

детермінованість, тобто повторна відтворюваність результатів для од­накових вхідних даних (за звичай у теорії алгоритмів розглядаються лише алго­ритми з однозначними операторами алфавіту; такі алгоритми називають детер­мінованими);

масовість, тобто можливість застосування алгоритму для однотипних вхідних даних; алгоритм повинен перетворювати абстрактні дані, а не константи (мало коштує алгоритм, що тільки і «вміє», що підраховувати суму «2+2»; він повинен «уміти» підраховувати суму у загальному вигляді, тобто «a+b»);

результативність, тобто одержання результатів за скінчену кількість «кроків». Для складання «кубика Рубіка», наприклад, методом простого пере­бо­ру варіантів навіть на швидкодіючому комп'ютері потрібно декілька тисяч років (!), проте відомі алгоритми досягнення того ж результату за лічені се­кунди. Із властивості результативності випливає поняття області придатності алгорит­му, тобто множини вхідних даних, для яких алгоритм є результативним;

збіжність, тобто можливість досягнення наперед заданої точності роз­рахунку.

У загальному випадку ще розрізняють випадкові й адаптивні алгоритми.

Алгоритм називається випадковим, якщо які-небудь його «кроки» перед­ба­чають можливість випадкового вибору можливих дій. Прикладами випадкових алгори­тмів можуть служити алгоритми деяких ігор - «гадалок». Алгоритм називається адаптивним, якщо він змінює склад «кроків» та (або) методи переробки інфор­мації. Результат роботи адаптивного алгоритму залежить не тільки від вхідних даних, але і від передісторії роботи алгоритму.