
- •Кафедра Iнформатики
- •«Наука вся - лишь море заблуждений, где нету дна, а правды нет и тени»
- •«Складні проблеми завжди мають прості, легкі для розуміння невірні розв'язання» (закон Гросмана) Формалізація алгоритму
- •«Ускладнювати просто. Спрощувати складно» (закон Мейера) Алгоритмічні системи
- •... Sk0 skj1 skj2 ... Qi sjk ... Skjr-1 skjr sk0 ..., k[1;n]
- •Відлагодження алгоритму
- •«Якщо факти не підтверджують теорію, то їх треба позбутися» (Закон Майєрса) Етапи розв’язання задач на комп’ютері
- •Математична модель
- •Інформаційна модель
- •«Перед тим, як увійти, подумай, як вийти» (Китайське прислів'я) Техноогії проектування алгоритмів
- •«Створіть систему, якою зможе скористатися навіть дурень, і тільки дурень захоче нею користуватися»
- •(Принцип Шоу)
- •Блок-схема алгоритму лінійної структури
- •Алгоритм розгалуженої структури
- •Блок-схема алгоритму розгалуженої структури
- •Алгоритми циклічної структури
- •Алгоритм циклічної структури (параметр циклу змінюється з кроком у заданому сегменті)
- •Блок-схема алгоритму циклічної структури (параметр циклу змінюється з кроком у заданому сегменті)
- •Алгоритм циклічної структури (параметр циклу є елементом масиву)
- •Блок-схема алгоритму циклічної структури (параметр циклу є елементом масиву)
- •Алгоритм складної циклічної структури
- •Блок-схема алгоритму складної циклічної структури
- •Алгоритм обліку суми і добутку
- •Блок-схема алгоритму обліку суми і добутку
- •Алгоритм пошуку мінімуму і максимуму
- •Блок-схема алгоритму пошуку мінімуму і максимуму
- •Алгоритми сортування наданих
- •«Маленька практика краща за велику теорію» (закон Букера)
- •Алгоритми розв’язання інженерних задач
- •Ізоляція кореня
- •Уточнення значення кореня
- •Блок-схема алгоритму методу хорд
- •Початок циклу
- •Кінець циклу
- •Алгоритм розв’язання системи лінійних рівнянь
- •1. Прямий хiд
- •2. Зворотній хiд
- •Блок-схема алгоритму методу Гауса
- •Алгоритми розв’язання диференціального рівняння
- •Алгоритми до методу Эйлера
- •Алгоритми до методу Рунге - Кутта
- •Блок-схеми алгоритмів розв’язання диференціальних рівнянь першого порядку
- •Блок-схеми алгоритмів розв’язання диференціальних рівнянь другого порядку
- •Алгоритм обліку визначеного інтегралу
- •Алгоритм до методу Ньютона - Котеса
- •Блок-схема алгоритму обліку визначеного інтегралу методом Ньютона - Котеса Функція «Інтеграл»
- •Алгоритми апроксимації і інтерполяції функції
- •Алгоритм до методу інтерполяції поліномами Лагранжа
- •Алгоритм до методу апроксимації та інтерполяції в-сплайнами
- •Блок-схеми алгоритмів інтерполяції і апроксимації функції
- •Алгоритм статистичної обробки результатів експерименту
- •Перспективи розвитку теорії алгоритмів «Як тільки теорія стає зрозумілою всім, її пора змінювати» (закон Джексо на)
«Ускладнювати просто. Спрощувати складно» (закон Мейера) Алгоритмічні системи
У теорії алгоритмів значна увага приділяється засобам задання алгоритмів, що називаються алгоритмічними системами. Алгоритмічна система характеризується універсальністю, тобто дозволяє задати алгоритм, еквівалентний будь-якому наперед заданому алгоритму. При описуванні алгоритмічних систем використовуються спеціальні формалізовані засоби прикладної теорії алгоритмів, що можна розділити на два напрямки: «алгебраїчна теорія алгоритмів» і «геометрична теорія алгоритмів».
«Алгебраїчна теорія алгоритмів» розглядає алгоритми як лінійні тексти. До цього напрямку відносять теорії рекурсивних функцій, машини Тюрінга, операторні системи Ван-Хао і Ляпунова, логічні схеми алгоритмів Янова та ін.
«Геометрична теорія алгоритмів» розглядає алгоритми як множини, між якими вводяться зв'язки, що носять характер відображень або бінарних відношень. При цьому значне місце займає геометрична інтепретація об'єктів у вигляді графів, вершини яких задають елементи множини, а ребра - відношення між ними. При цієї інтепретації відображення задаються у вигляді розмітки вершин або ребер графа. До цього напрямку відносяться: представлення нормальних алгоритмів Маркова у вигляді граф-схем, запропонованих Калужиним, блок-схемний метод алгоритмізації та ін.
Р екурсією називають засіб задання функції, при якому значення визначуваної функції для довільних значень аргументів виражається через значення цієї ж визначуваної функції для менших значень аргументів.
Поняття рекурсивних функцій тісно пов’язане із поняттям обчислюємих функцій. Чисельні функції, значення яких можна розрахувати за допомогою алгоритму, називають обчислюємими функціями.
Якщо деяким елементам множини Х поставлені в однозначну відповідність елементи множини Y, то кажуть, що задано частково визначену функцію Y(Х); при цьому сукупність елементів X називають областю визначення функції Y, а сукупність елементів Y - областю значень функції Y. Якщо область визначення функції Y(Х) збігається із множиною X, то функцію називають усюди визначеною.
Гьодель вперше описав клас рекурсивних функцій як клас усіх числових функцій деякої формальної системи. Виходячи з інших передумов, Чорч у 1936 році вивів той же клас числових функцій і сформулював гіпотезу про те, що «клас рекурсивних функцій тотожний класу усюди визначених обчислюємих функцій». Оскільки поняття обчислюємої функції точно не визначається, то і гіпотезу Чорча довести не можна.
Кліні ввів поняття частково рекурсивної функції і висловив гіпотезу про те, що «усі частково визначені функції, які можна обчислити за допомогою алгоритмів, є в той же час і частково рекурсивними». Ця гіпотеза також відома, як і гіпотеза Чорча. Проте математичні дослідження останніх 30 років виявили повну доцільність вважати поняття частково рекурсивної функції науковим еквівалентом поняття обчислюємої частково визначеної функції.
Надалі під тезою Чорча будемо розуміти гіпотезу Чорча у тому розширеному вигляді, що був доданий до неї Кліні: «Функція є рекурсивною, якщо вона є обчислюємою». У силу тези Чорча питання про обчислюваність функції різвнозначне питанню про її рекурсивність; при цьому математичними методами можна довести алгоритмічну нерозв'язність деякої задачі, якщо функція, що розв’язує задачу, не рекурсивна.
Застосування рекурсивних функцій у теорії алгоритмів базується на ідеї Канторової нумерації слів у довільному алфавіті послідовними натуральними числами. Найпростіше таку нумерацію можна здійснити розташуванням слів у порядку зростання їхніх довжин, а слів, що мають однакову довжину, - у лексикографічному порядку. Після нумерації вхідних і вихідних слів у довільному операторі алфавіту цей оператор перетворюється у функцію Y = f (X), де і аргумент, і функція приймають ненегативні цілочисельні значення (функція f (X) може бути частково визначеною). Такі функції називаються арифметичними.
Елементарними арифметичними функціями виявляються:
функції, тотожно рівні нулю:
On (x1, x2, ... , xn) = 0 ( xi 0)
тотожні функції, що повторюють значення своїх аргументів:
Iin (x1, x2, ... , xn) =xi (i [1;n]; n=1, 2, ...)
функції безпосереднього слідування:
S1(x) = x + 1
Використовуючи ці функції в якості вхідних, можна побудувати більш складні арифметичні функції за допомогою програмних алгебр (загальних конструктивних прийомів): суперпозиції, примітивної рекурсії і найменшого кореня.
Прийом суперпозиції полягає у підстановці одних арифметичних функцій замість аргументів інших арифметичних функцій.
Нехай, наприклад, задано {fi (x1, x2, ... , xm)}n (i[1;n]) і f (x1, x2, ... , xn). Тоді суперпозиція дасть нову функцію g (x1, x2, ... , xm) = f (f1 (x1, x2, ... , xm), ... , fn(x1, x2, ... , xm)).
Для конкретного прикладу: якщо задані функції f(x) = 0 і g(x) = x + 1, то: h(x) = g(f(x)) = 0 + 1 = 1.
Суперпозиція позначається як Sn+1, де n+1 - кількість функцій.
Прийом примітивної рекурсії дозволяє будувати функцію f від n+1 аргументу по двох вхідних функціях: функції g від n аргументів і функції h від n+2 аргументів, якщо:
f (x1, x2, ... , xn, 0) = g (x1, x2, ... , xn);
f (x1, x2, ... , xn, y + 1) = h (x1, x2, ... , xn, y, f (x1, x2, ... , xn, y)).
Це означає, що значення f (x1, x2, ... , xn, m+1) можна розрахувати за допомогою ітераційної рекурсивної процедури:
b0 = g (x1, x2, ... , xn)
b1 = h (x1, x2, ... , xn, 0, b0 )
b2 = h (x1, x2, ... , xn, 1, b1 )
...... ...... ...... ...... ...... ...... ...... ...... ....
bm+1= h (x1, x2, ... , xn, m, bm)
===========================
f (x1, x2, ... , xn, m+1) = bm+1
Прийом найменшого кореня дозволяє визначити нову арифметичну функцію f (x1, x2, ... , xn) від n аргументів за допомогою раніше побудованої арифметичної функції g (x1, x2, ... , xn, y) від n+1 аргументів.
Для будь-якого заданого набору значень змінних x1 = a1, ... , xn= an у якості значення f (a1, a2, ... , an) обумовленої функції приймається найменший цілий ненегативний корінь у = а рівняння g (x1, x2, ... , xn, y) = 0. У випадку неіснування цілих ненегативних коренів цього рівняння функція f(x1, x2, ... , xn) вважається невизначеною на відповіднім наборі значень змінних.
Арифметичні функції, що можуть бути побудовані з елементарних арифметичних функцій за допомогою конструктивних прийомів суперпозиції, примітивної рекурсії і найменшого кореня, називають частково рекурсивними функціями. Якщо такі функції до того ж усюди визначено, то вони називаються загальнорекурсивними функціями.
Практично поняття частково рекурсивних функцій використовується для доказу алгоритмічної можливості (або неможливості) розв'язання задач. Використання ж таких функцій для утворення конкретного алгоритму є практично недоцільним через складність процесу алгоритмізації.
У 1936 - 1937 роках Постом і Тюрінгом було запропоновано новий механізм формалізації алгоритмічних процесів. Основна ідея полягала у тому, що алгоритмічний процес - це процес, який може виконувати придатна для цього гіпотетична (умовна) «машина», за допомогою якої можна здійснити чи імітувати усі алгоритмічні процеси.
Машина Поста
Машина Поста складається із декількох частин (мал. 1):
-
S0
Sj
Sj
Sj
...
Sj
...
...
...
Sj
Sj
S0
1
2
3
...
k
...
...
...
r-1
r
Мал. 1
інформаційна стрічка, яка уявляє собою нескінчену (необмежену) пам’ять машини; стрічка містить множину чарунок2, кожна з яких може містити лише один символ;
голівка, яка уявляє собою дошкульний3 елемент, здатний зчитувати і записувати інформацію у поточну чарунку; інформаційна стрічка може зрушуватися відносно голівки уліво (цей напрямок позначається Л), управо (цей напрямок позначається П) і може залишатися нерухомою (позначається С);
пристрій керування, який у кожний момент часу знаходиться у деякому «стані» зі скінченої множини станів; один із станів називається «заключним» і позначає стан після завершення роботи машини.
В алгоритмічній системі Поста інформація подається у двійковому алфавіті A = {0, 1} (таким чином, чарунка інформаційної стрічки може містити 0 чи 1). Алгоритм подається скінченою упорядкованою множиною правил, які називають «наказами».
Робота алгоритму починається з деякої початкової чарунки, яка відповідає першому наказові алгоритму. Накази обираються із наступної скінченої множини наказів Поста:
записати у чарунку значення 1 і перейти до виконання i-го наказу;
записати у чарунку значення 0 і перейти до виконання i-го наказу;
зрушити інформаційну стрічку управо на одну чарунку і перейти до виконання i-го наказу;
зрушити інформаційну стрічку уліво на одну чарунку і перейти до виконання i-го наказу;
якщо поточна чарунка містить 1, то перейти до виконання j-го наказу, інакше (якщо поточна чарунка містить 0) перейти до виконання i-го наказу;
завершити роботу алгоритму і зупинитися.
Таким чином, машина Поста може, виконуючи накази, либонь зрушувати інформаційну стрічку на одну чарунку, залишаючи вміст чарунки незмінним, либонь змінювати вміст чарунки, залишаючи інформаційну стрічку нерухомою.
Алгоритми, які складено із таких наказів, називають алгоритмами Поста. Доведено, що алгоритми Поста зводяться до алгоритмів, що реалізуються за допомогою частково рекурсивних функцій; і, навпаки, абияку рекурсивну функцію можна представити алгоритмом Поста.
Стандартна машина Тюрінга
Машина Тюрінга, на відміну від машини Поста, у кожній чарунці інформаційної стрічки може містити один із символів деякого скінченого алфавіту, а пристрій керування нею може знаходитися в одному із станів скінченої множини станів.
Скінчена сукупність символів алфавіту, із яким працює машина, називається зовнішнім алфавітом. Скінчена сукупність станів пристою керування називається внутрішнім алфавітом. Сукупність, утворена послідовністю станів усіх чарунок інформаційної стрічки і станом пристрою керування, називається конфігурацією машини. Якщо алфавіт машини Тюрінга задано множиною A = {s0, s1, ..., sn}, а кількість станів пристрою керування - множиною Q = {q0, q1, ..., qn}, то конкретну конфігурацію машини Тюрінга можна задати у вигляді слова, яке подає стан машини. Кожна конфігурація містить лише одне входження символу qi внутрішнього алфавіту. Цей символ може бути у слові найлівішим, але не може бути найправішим, оскільки справа від нього повинен розташовуватися символ стану поточної чарунки.
Нехай, наприклад, у деякий момент часу машина Тюрінга знаходиться у стані, який подано мал. 1, тоді конфігурація машини визначається словом:
... s0 sj1 sj2 ... qi sjk ... sjr-1 sjr s0 ...,
, де: s0 - символ, що позначає порожню чарунку, r - кількість непорожніх чарунок інформаційної стрічки, sj1 - стан першої зліва непорожньої чарунки, sjk - стан поточної чарунки, qi - стан пристрою керування (q0 відповідає заключному станові).
Якщо машина Тюрінга, знаходячись у стані qi і зчитуючи записаний на стрічці символ sk, переходить до нового стану qj, заміщує символ поточної чарунки на символ sm і зрушує при цьому інформаційну стрічку уліво на одну чарунку, то кажуть, що машина виконує команду qjskqjsmЛ4 (якщо заміщення символу не відбувається, то стан sm у команді може бути відсунім).
Розгляньмо, наприклад, роботу машини Тюрінга з алфавітами А={0, 1} і Q = {q0, q1} та командами «q11q11Л» і «q10q11C». Нехай чарунки інформаційної стрічки містять слово 11100 і голівку розташовано над найправішою одиницею (мал 2, а):
-
(а)
(б)
S01
1
1
1
0
0
S0
1
2
3
...
r-1
r
-
S0
1
1
1
1
1
0
S0
1
2
3
...
r-1
r
Мал. 2
Тоді в результаті виконання команд це слово буде перетворено машиною Тюрінга на слово 11110 (мал. 2, б).
Машину Тюрінга із зовнішнім алфавітом А = {0, 1} називають нестираючою, якщо вона спроможна виконати лише команди: qα0qβаT і qα1qβ1T, де а = {0, 1}, Т = {С, Л, П}, тобто якщо вона може вписати 1 у порожню чарунку, але не може знищити вміст чарунки, якщо вона містить 1.
Будемо вважати машину Тюрінга заданою, якщо задано її зовнішній і внутрішній алфавіти, програмою, початковий стан (конфігурацію), зазначено символ, що позначає порожню чарунку і визначено її заключний стан (конфігурацію).
Нехай, наприклад, машину Тюрінга задано:
зовнішнім алфавітом A = {s0, a, b, c, d};
внутрішнім алфавітом Q = {q0, q1, q2, q3, q4, q5};
сукупністю команд: q0aq1aЛ, q0bq0bЛ, q2aq5dП, q0сq0сЛ, q1dq2cП, q3aq4dП, q4bq2cП;
початковим станом q0 із конфігурацією bcadc;
символом S0, що позначає порожню чарунку;
заключним станом q5 із конфігурацією bcdcc.
Розгляньмо алгоритм роботи машини Тюрінга, що перетворює її початковий стан в заключний. Алгоритм за звичай записують у вигляді таблиці:
Крок |
Команда |
Конфігурація |
Початковий стан |
q0bcadc |
|
1 |
q0b q0bЛ |
bq0cadc |
2 |
q0c q0cЛ |
bcq0adc |
3 |
q0a q1aЛ |
bcaq1dc |
4 |
q1d q2cП |
bcq2acc |
5 |
q2a q5dП |
bq5cdcc |
Заключний стан |
bq5cdcc |
Таким чином, питання про існування або неіснування алгоритму розв’язання абиякої задачі треба розуміти як питання про існування чи неіснування машини Тюрінга, яка володіє необхідними властивостями. Це питання є важливим, оскільки побудовою машини Тюрінга можна теоретично довести, що деякі еврістичні проблеми при моделюванні штучного інтелекту не мають алгоритмічного розв’язання.
В залежності від кількості використовуваних інформаційних стрічок, їхнього призначення і кількості станів пристрою керування визначаються різні модифікації машин Тюрінга. Розгляньмо основні з них.
Машина Тюрінга з двома виходами
Розширимо визначення машини Тюрінга, додавши в пристрій керування визначений стан q*. Якщо для заданого вхідного слова Х пристрій керування переходить у стан q0, то будемо казати, що машина припускає Х, а якщо пристрій керування переходить у стан q*, то будемо казати, що машина забороняє Х. Такий пристрій будемо називати машиною Тюрінга з двома виходами.
Виявляється: якщо задано дві машини Тюрінга Т1 і Т2, які припускають множини слів Х1 і Х2, що не перетинаються, то завжди можна побудувати машину Тюрінга Т3 з двома виходами, яка буде припускати Х1 і забороняти X2.
Кажуть також, що множину дозволено, якщо існує машина Тюрінга з двома виходами, що припускає всі елементи цієї множини і забороняє елементи, що ій не належать.
Багатострічкова машина Тюрінга
Схема багатострічкової машини Тюрінга містить скінчену кількість інформаційних стрічок, кожна чарунка яких може містити один із символів зовнішнього алфавіту A = {s0, s1, ..., sn}. Чарунки із символом S0 враховуються порожніми. Пристрій керування у кожний момент часу знаходиться в однім із станів скінченої множини станів Q = { q0, q1, ..., qm }. Нарешті, припустимо, що у кожний момент часу машина працює тільки з однією чарункою кожної стрічки. шину Тюрінга Т3 з двома виходами, яка буде припускати Х1 і забороняти X2. Конфігурація машини враховується заданою, якщо відомі: стан q пристрою керування, стан чарунок усіх стрічок, вказані чарунки, які сприймаються машиною. Таким чином, конфігурація n-стрічкової машини в i-ий момент часу визначається системою n слів: