- •2.3. Арифметичні операції в різних системах числення.
- •3.8. Розв'язати системи рівнянь з регулярними коефіцієнтами.
- •Має два виводи
- •1.4. Скінченний автомат а заданий графом:
- •4.2. Приклад. Побудувати дса, еквівалентний до нса
- •Лекція 5. Скінченні автомати і регулярні мови. Лема про роздування.
- •6.3. Приклад. Побудувати мп-автомат, який розпізнає мову
- •(Д, аЬЬа, е) ь (д, ьЬа, а) ь (д, Ьа, Ьа) ь (р, Ьа, Ьа) ь (р, а, а) ь (р, е, е); (д, аЬЬа, е) ь (д, ьЬа, а) ь (д, Ьа, Ьа) ь (д, а, ьЬа) ь (р, а, ьЬа);
- •Зліва записуються всі стани, крім кінцевого ду, з множини станів
- •Проаналізуйте роботу мт на наступних вхідних словах:
- •3.7. Приклад. Побудуємо машину Тюрінґа, яка переводить натуральні числа з унарної системи числення в десяткову.
- •Лекція 4. Частково рекурсивні та примітивно рекурсивні функції
- •Приклад. Застосувати кожну з підстановок з попереднього прикладу до слова аЬЬасЬа максимальну можливу кількісить разів.
- •5.3. Приклад. Застосувати кожен з нам
- •8.7. Оцінити часову та ємнісну складність мт, заданої графом:
Лекція 4. Частково рекурсивні та примітивно рекурсивні функції
В цьому парагрфі ми розглядатимемо функції / : N9 — N0, де N0 = N ЦІ {0}. Ми побудуємо клас всіх функцій такого виду з допомогою тільки трьох найпростіших функцій і двох операцій над такими функціями. Даний підхід до формалізації поняття алгоритму належить Геделю. Основна ідея Геделя полягала в тому, щоб одержати всі обчислювальні функції із невеликої кількості базових функцій з допомогою найпростіших алгоритмічних засобів. Назвемо найпростішими такі функції:
нуль-функцію: О(х) = 0, х Є N0;
функцію наступності: 8(х) = х +1, х Є N0;
функції проектування: РП (х1 , , ... , і , . . . п ) — і , і ^Е N0.
До даних функцій будемо застосовувати такі операції.
Композиція. Нехай т,к Є N і нехай задано числові функції д : N9^ — N0 і Ні : N9 — N0, де і = 1,2,...,т. Визначимо функцію / : N — N0 за правилом
/ (т, ...,пк) = д(Н1 (п1,.. .,пк),..., Нт (п1,.. .,пк)).
Кажемо, що функція / одержана з допомогою операції композиції з функцій д і Н1,..., Нт. Функцію / позначимо через д о (Н1,..., Нт).
Примітивна рекурсія. Нехай к Є N0 і нехай задано числові функції д : N9 — N0 і Н : — N0 (в випадку, коли к = 0, функція
Приклад. Довести, що сталі функції С%(п1 ,п2,... ,пк) = а, де к, а Є М0, є примітивно рекурсивними.
Дані функції можна зобразити у вигляді скінченної кількості композицій примітивно рекурсивних функцій
Ска (п1 ,П2, ...,пк) = 5 (5... (8(Ок (п1 ,П2,.. .,пк)))...).
а
Приклад. Довести, що функція 5ита : М2 ^ М0, 8пта(и,т) = п + т є примітивно рекурсивною.
Функцію 5ита можна визначити наступним чином.
5ита(п, 0) = п = РІ (п),
8ита(и, т + 1) = п +(т + 1) = (п+т) + 1 = 5(Р33(п, т, 8ита(и, т))). Отже, 5ита є примітивно рекурсивною функцією, оскільки її одержано з примітивно рекурсивних функцій Р1 : М0 ^ М0 і 5 о Р33 : М3 ^ М0 з допомогою операції примітивної рекурсії.
Приклад. Довести, що функція Ргой : М2 ^ М0, Ртоії(и,т) = пт є примітивно рекурсивною.
Функцію Ргод, можна одержати з примітивно рекурсивних функцій О і Бита о (Р| ,Р.3) з допомогою операції примітивної рекурсії наступним чином.
Ргоії(и, 0) = 0 = О(п), Ртой(и, т + 1) = п(т + 1) = пт + п = = 8ита(Р-33(п, т, Рго<і(п, т)), Р3(п, т, Рго<і(п, т))).
Приклад. Довести, що функція Ехр(п,т) = пт є примітивно рекурсивною.
Функцію Ехр можна визначити як
Ехр(п, 0) = 1 = 5(О(п)), Ехр(п, т + 1) = пт+1 = птп = = Ргод^Рз3(п, т, Ехр(п, т)),Р3(п, т, Ехр(п, т))).
Приклад. Довести, що функції
Г0 п = 0
а) Ргес : М0 ^ М0, Ргес(п) = п + 1 = < '
І п — 1,п > 0
І 0 п ^ ті
б) Міпиз : М2 ^ М0, Міпиз(п, т)= п + т = < ' _
п — т,п > т
в) А6й(п, т) = |п — т| є примітивно рекурсивними.
а) Функцію Ргес можна одержати з константи і проектування Р2 : М2 ^ М0 з допомогою операції примітивної рекурсії.
Ргес(0) = 0, Ргес(т + 1) = т = Рх2 (т,Ргес(т)).
б) Функцію Міппй можна одержати з допомогою функції Ргес наступним чином.
МІППЙ(П, 0) = п = Р^ (П), Міппй(п, т + 1) = п + (т + 1) = (п + т) + 1 =
= Ргес(Р33(п, т, Міппй(п, т))).
в) А6й(п, т) = |п — т| = (п + т) + (т + п) =
= 5ита(Міпи5(п, т), Міпи«(т, п)).
Оскільки метою цього розділу є з допомогою вправ показати, що клас примітивно рекурсивних функцій є досить великим, то потібно довести, що булеві функції, які використовуються в мовах програмування високого рівня є примітивно рекурсивними. В наступних вправах розглядатимемо деякі булеві операції і відошення. Через 1 позначаємо значення "істина", через 0 - хибність.
4.8. Приклад. Показати, що наступні функції є примітивно рекурсивними.
Ч лг / Ч (О, П > 1
а) Жед(п) = і
І 1, п = 0
б) Ап^(п,т) = < ,П > ' т >
10, в протилежному випадку
І 1, п > 1 або т > 1
в) Ог(п, т) = <
0, в протилежному випадку
, _ „ . 7 , , ч |т,п > 1
г) I/-теп-еІ5е(п, т, к) = <
к, в протилежному випадку.
Дійсно, дані функції утворюються з примітивно рекурсивних функцій наступним чином:
а) Жед(п) = Міпи«(1,п);
б) Ап^(п, т) = Жед(Жед(Рго^(п, т)));
в) Ог(п, т) = Жед(Ап^(Жед(п), Жед(т)));
г) I/-£^,еп-е/5е(п, т, к) =
= 5ита(Рго^(Жед(Жед(п)), т), Рго^(Жед(п), к))).
Надалі часто будемо писати "х ап^ у" замість Ап^(х, у), "х ог у" замість Ог(х,у), і "і£ х іЬеп у еІ8в £" замість //-£^,еп-е/5е(х, у, £).
Приклад. Довести, що наступні функції є примітивно рекурсивними.
\ т-і / ч І 1,п = т
а) Р^п т) = < п .
0, п = т
^ ^ ( \ /1,п > т
б) Сг(п т) = <
І 0, п < т
ч^ , ч /1,п > т
в) Сед(п,т) =
І 0, п < т /1,п < т
г) Ь5(п, т) = <
0, п > т
1, п < т
д) Ред(п,т) = <
0, п > т
Дійсно, дані функції утворюються з примітивно рекурсивних функцій наступним чином:
а) Рд(п, т) = Жед(А^(Міпп5(п, т), Міпи5(т, п)));
б) Сг(п, т) = Жед(Жед(Міпи5(п, т)));
в) Сед(п, т) = Сг(п, т) ог Рд(п, т);
г) Р5(п, т) = Жед(Сед(п, т));
д) Ред(п, т) = Жед(Сг(п, т)).
Приклад. Довести, що для кожного к Є N функція
Махк (п1, п2,...,пк) = тах{п1, п2,..., пк }
є примітивно рекурсивною.
Доведемо дане твердження індукцією по к. Для к = 1 твердження вірне, бо Мах1 (п1) = Р^ (п1). Припустимо, що твердження виконується для к - 1 і доведемо для к: Махк (п1,..., пк) =
= і£ пк > Махк-1 (п1 ,...,пк-1) іЬеп пк еІ8е Махк-1 (п1 ,...,пк-1).
4.11. Приклад. Застосувати операцію примітивної рекурсії до функцій д : N0 ^ N0 і Н : N3 ^ N0.
а) д(п) = 3п, Н(пі,П2,пз) = 4п2 + П3;
б) д(п) = 2п, Н(п1 ,п2,п3) = 3П1 пП1 (вважаємо, що 00 = 1).
а) /(п, 0) = д(п) = 3п
/(п, т + 1) = Н(п, т, /(п, т)) = 4т + /(п, т) /(п, 1) = 4 • 0 + /(п, 0) = 3п /(п, 2) = 4 • 1 + /(п, 1) = 4 + 3п /(п, 3) = 4 • 2 + /(п, 2) = 4 • 2 + 4 • 1 + 3п Доведемо індукцією по т, що
/
(п,т) = 4((т
- 1) +
... + 2 + 1) + 3п = 4
(т-21)+1
(т
- 1) + 3п = =
2т(т
-
1) +3п.
Припустимо, що твердження виконується для т = к, тобто /(п, к) 2к(к - 1) +3п.
Для т = к+1 маємо /(п, к+1) = 4к+/(п, к) = 4к+2к(к-1)+3п = 2к(2 + к - 1) + 3п = 2(к + 1)к + 3п.
Таким чином, для будь-яких п,т Є N0
/(п,т) = 2т(т - 1) + 3п
Функція / отримана з примітивно рекурсивних функцій д і Н з допомогою операції примітивної рекурсії і, отже, є примітивно рекурсивною.
б) /(п, 0)= д(п) = 2п
/(п, т + 1) = Н(п, т, /(п, т)) = 3п(/(п, т))п
2
/(п, 1) = 3п(/(п, 0))п = 3п2п
2 2 3 2 3
/(п, 2) = 3п(3п2п )п = 3п3п 2п = 3п+п 2п
23 2 3 4
/(п 3) 3п(3П+П 2П )п 3П+П +п 2П
Доведемо індукцією по т, що / (п,т) = 3п+п2+...пт 2пт+1 =3 ^^ 2пт+1.
Припустимо, що твердження виконується для т = к, тобто /(п, к)
3 2пк+1,
Для т = к + 1 маємо
п(пк-1) к+1ч п2(пк-1) к + 2 —^ї оп ^ \п — 9П9 ^Тї оп ^
/(п, к+1) = 3п(/(п,к))п = 3п(3 п-1 2п )п = 3п3 п-1 2
, п2(пк-1) к + 2 п2-п + пк + 2-п2 к + 2 п(пк + 1 -1) к + 2
3п+
п-1
)
2п = 3 2пк+2
= = 3
(
п-1
)
2пк+2.
Таким чином, для будь-яких п,т Є М0
п(пт-1) т+1
/(п, т) = 3 п-і 2П .
Функція / отримана з примітивно рекурсивних функцій д і Н з допомогою операції примітивної рекурсії і, отже, є примітивно рекурсивною.
Мінімізація. Розглянемо частково визначену функцію п-змінних / (х1 ,х2,..., хп). Визначимо функцію д (х1 ,...,хп) так. Зафіксуємо певні значення х1 ,...,хі_1 ,хі +1 ,...хп п — 1 аргументів функції / та розглянемо рівняння /(х1 ,...,хі_1 ,у,хі +1 ,...,хп) = хі. Обчислюватимемо послідовно значення / (х1,..., хі_1, у, хі+1,..., хп) для у = 0,1, 2,.... Позначимо через
а = тіп{у | / (х1,.. .,х-_1 ,у,х-+1, ...,хп) = хі }.
Зазначений процес є нескінченним у таких випадках:
значення /(х1,... ,хі_1, 0, хі +1,... ,хп) не визначено;
значення / (х1,..., х і _1 ,у, х і+1 ,..., хп) для у = 0,1,... ,а — 1 визначено, але вони відмінні від х а значення /(х1,..., х,і_1, а, х,і +1,..., хп) не визначено;
значення / (х1,..., х і _1, у, х і +1,... ,хп) визначено для всіх у = 0, 1 , . . . , причому вони відмінні від х .
В усіх цих випадках значення функції д(х1 ,...,хп) вважають невизначеним. У решті випадків зазначений процес зупиняється і дає найменший розв'язок у = а рівняння /(х1,..., хі_1, у, хі+1,..., хп) = хі, який є значенням функції д(х1,... ,хп) = о,. Значення функції д для заданої функції / залежить від значень параметрів х1,... ,хп, тому функція д є частково визначеною функцією змінних х1,... ,хп. Кажуть, що функція д отримана з функції / з допомогою операції мінімізації за змінною хі .
Функцію / називають частково рекрсивною, якщо вона може бути утворена з найпростіших функцій за допомогою скінченної кількості застосувань операцій композиції, примітивної рекурсії та мінімізації. Всюди визначені частково рекурсивні функції називаються загальнорекурсивними.
4.12. Приклад. Розглянемо функцію / : М0 ^ М0, /(х) = х + 2. За допомогою операції мінімізації визначимо функцію д : М0 ^ М0. Для цього розглянемо рівняння у + 2 = х. Отже, функцію д не визначено, якщо х = 0 або х = 1, і д(х) = х — 2, якщо х > 2.
Приклад. Доведемо, що функція д : N0 х N0 — N0,
д(х1,
х2)
= 1
—
^012
є частково рекурсивною. Застосуємо операцію мінімізації за змінною х2 до примітивно рекурсивної функції /(х1 ,х2) = (1 + х1 )х2. В результаті отримаємо рівняння (1 + х1 )у = х2. Отже,
х2, х1 = 0,
д(х1 ,х2 )={0,х2 =0, = - .
1 — х1 х2012
Т, х1 = 0 і х2 = 0,
В даному параграфі ми показали, що клас частково рекурсивних функцій є досить широкий. Поняття частково рекурсивної функції - одне з основних понять теорії алгоритмів. Його значення є таким. З одного боку, кожна стандартно задана частково рекурсивна функція є обчислювана за певною процедурою, яка відповідає інтуїтивному уявленню алгоритму, а з іншого - які б досі не будувалися класи точно визначених алгоритмів, завжди з'ясовувалося, що числові функції, які обчислювалися за алгоритмами цих класів, були частково рекурсивними. Тому загальноприйнятою є така наукова гіпотеза:
Теза Черча. Клас алгоритмічно обчислюваних частково визначених числових функцій збігається з класом усіх частково рекурсивних функцій.
У формулювання цієї тези входить інтуїтивне поняття обчислю- ваності, тому його не можна ні довести, ні спростувати в загаль- номатематичному значенні. Це факт, на користь якого свідчить багаторічна математична практика. Проте, справедливою є наступна теорема, доведення якої читач може знайти в [?]:
теорема. Функція є обчислюваною за Тюрінґом тоді і тільки тоді, коли вона є частково рекурсивною.
Вправи до лекції 4.
4.1. Довести, що наступні функції однієї змінної є примітивно рекурсивними:
а) /(п) = п;
б) д(п) = 3п + 4;
в) д(п)
= 2П +
п2;
г) д(п)
=
п!;
Довести, що наступні функції / : N0 — М0 є примітивно рекурсивними:
а) /(п, т) = тіп{п, т};
б) /(п, т) = тах{п, т}.
Застосувати операцію примітивної рекурсії до функцій д : М0 — М0 і к : М3 — М0. Записати результуючу функцію / : М2 — М0 аналітично.
а) д(п) = 2П, к(пі,П2,пз) = 3п2 + Пз;
б) д(п) = 2012п2012, к(п1 ,п2,п3) = 5п2 + п3;
в) д(п) = 3П, к(п1 ,п2,п3) = 2п1 + 5п3;
г) д(п) = 2012п, к(п1 ,п2,п3) = 5П1 п^1 (вважаємо, що 00 = 1);
д) д(п) = 2П + п2, к(п1 ,П2,П3) = щ + ЗП3;
е) д(п) = 1, к(п1 ,П2,П3) = П3($д|п1 + 2 — 2п31).
Застосувати операцію мінімізації до функції / за всіма її змінними. Подати вихідні функції д аналітично.
а) /(п) = 2;
г) д(п)
= ;
д) д(п,т)
= т+2.
в) /(п, т) = п + т;
г) /(п, т) = 2 — п — т;
д) /(п, т) = Р12(п, т);
е) /(п, т) = тах{п, т}; є) /(п, т) = тіп{п, т};
ж) /(п, т) = п + т.
4.5. Застосувавши операцію мінімізації до відповідної примітивно рекурсивної функції /, довести, що функція д частково рекурсивна:
а) д(п) =3 — п;
Довести, що застосувавши один раз операцію мінімізації до всюди визначеної числової функції, отримаємо функцію, яка визначена принаймі в одній точці.
Навести приклад функції / : N0 ^ N0, застосувавши до якої операцію мінімізації двічі, отримаємо ніде не визначену функцію.
Сформулювати необхідну і достатню умову того, що функція д, отримана з функції / з допомогою операції мінімізації є
а) всюдивизначеною;
б) ніде не визначеною.
Лекція 5. Нормальні алгоритми Маркова. Аналіз НАМ.
В даному параграфі розглядається ще один важливий підхід до уточнення поняття алгоритму, розроблений А.А. Марковим. Нормальні алгоритми Маркова (НАМ) базуються на перетворенні слів в деякому скінченному алфавіті в відповідності з певним чином визначеними правилами. В НАМ використовується тільки одна елементарна дія - підстановка, яка визначається наступними чином. Нехай А = {а1, а2,..., ап} - алфавіт. Якщо а і в - слова в алфавіті А, то вирази а ^ в і а ^ в називаються формулами підстановки в алфавіті А (вважаємо, що символи ^ та ^ не належать алфавіту А). При цьому формула а ^ в називається звичайною формулою підстановки, а формула а ^ в заключною формулою підстановки. Сама підстановка (як дія) задається формулою підстановки і застосовується до слів ш в алфавіті А. Суть операції а ^ в (а ^ в) полягає в відшуканні в слові ш найлівішого входження підслова а і заміні цього підслова на слово в. При цьому інші частини слова ш залишаються незмінними. Якщо ліва частина формули підстановки входить в слово ш, то кажуть, що дана формула застосовна до слова ш. В іншому випадку кажемо, що формула підстановки незастосовна до слова ш і в цьому випадку підстановка не виконується. Якщо права частина формули підстановки - порожнє слово (яке в НАМ не познається ніяким символом), то підстановка а ^ зводиться до закреслення підслова а в слові ш. Домовимося, що якщо в лівій частині формули підстановки є порожнє слово, то підстановка ^ в полягає в
дописуванні зліва до слова ш слова в. Зауважимо, що згідно означення, формула з порожньою лівою частиною застосовна до будь якого слова.
Приклад. Нехай для слів в алфавіті А = {а, Ь, с} задані наступні підстановки:
а) аЬ ^ ас;
б) аЬс ^ Ьа;
в) Ьа
г) Ь ^ с.
Застосуємо кожну з них до слова аЬЬасЬа.
Для застосування марківської підстановки до слова ш необхідно знайти найлівіше входження в ш лівої частини підстановки. У випадку а) слово аЬ тільки раз входить в слово аЬЬасЬа, тому в результаті підстановки одержуємо слово асЬасЬа. Оскільки слово аЬс не є підсло- вом слова аЬЬасЬа, то підстановка з пункту б) не застосовна до даного слова. У пунктах в) та г) ліві частини підстановок входять декілька раз у слово аЬЬасЬа, а тому застосовуємо підстановки до першого входження їх у вхідне слово. Отримаємо слова аЬсЬа і аЬасЬа відповідно.