Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
main_ta.doc
Скачиваний:
19
Добавлен:
16.09.2019
Размер:
2.29 Mб
Скачать

8.7. Оцінити часову та ємнісну складність мт, заданої графом:

Оцінити його часову та ємнісну складність.

називають граматикою типу 1, або контекстно залежною, оскільки

і можна замінити на V лише в оточенні слів 7... 5, тобто у відповід­

ному контексті. Мову, яку породжує граматика типу 1, називають контекстно залежною. Граматику типу 3 називають праволінійною. Двоїсто визначають ліволінійну граматику - вона може мати такі продукції: А ^ шВ, А ^ ш і А ^ е, де А, В - нетермінали, ш - слово

з терміналів. Ліволінійні і праволінійні граматики називаються регу­лярними. Регулярні граматики породжують регулярні мови і тільки їх.

  1. Приклад. Побудуємо контекстно вільну граматику, яка поро­джує мову Ь = {0П 12п | п > 0}.

Ця мова нагадує мову, породжену граматикою з прикладу 4.2 в тому сенсі, що якщо ми замінимо кожну 1 на 11, то одержимо граматику для Отже, шукана граматика має вигляд

С = ({^}, {0,1}, 5, {5 ^ е | 05 11}).

Починаючи з стартової позиції, ми можемо побудувати цю гра­матику двома способами. Спершу відмітимо, що продукція 5 ^ 0511 завжди породжує узгоджену пару 0 та 11. Застосувавши це правило п раз, ми одержуємо слово 0П5(11)п. Ці прості типи правил часто вживаються при побудові контекстно вільних граматик.

Іншим методом побудови граматики є відшукання рекурсивної функції, яка пов'язує довші слова мови Ь з коротшими словами. На­приклад, слово 0п+і 12(п+і) можна записати як 0(0П 12п)11. Таким чи­ном, якщо існує виведення 5 0П 12п, то нам потрібна продукція

5 ^ 0511, щоб одержати виведення 5 0п+і 12(п+і). Ми продемон­струємо цю ідею в наступному прикладі.

  1. Приклад. Побудуємо контекстно вільну граматику, що поро­джує мову Ь = {х Є {0,1}* | х = хп}.

Оскільки к-та зліва буква кожного слова має дорівнювати к-тій справа букві, то слово х Є Ь довжини 2п + 2 може бути записане або як 0у0 або 1у 1 для деякого слова у Є Ь довжини 2п. Отже, нам потрібні правила 5 ^ 050 і 5 ^ 151, щоб породити слово х рекурсивно. З сказаного вище випливає, що мова Ь породжується граматикою С = ({5}, {0,1},5, Р), де множина Р містить наступні продукції:

5 ^ е | 0 | 1 | 050 | 151.

З чотирьох класів граматик ієрархії Хомські клас контекстно вільних граматик є найбільш важливим з точки зору застосувань до мов програмування і компіляції. З допомогою контекстно вільної граматики можна визначити більшу частину синтаксичної структури мов програмування. Крім того, вона є основою різних схем задання перекладів на машинну мову комп'ютера.

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

Однак це нетривіальна задача - по даній контекстно вільній грама­тиці О і вхідному слові ш вияснити, чи належить ш формальній мові Ь(О), і якщо так, то знайти виведення слова ш в граматиці О.

Слово ш належить мові Ь(О) контекстно вільної граматики О тоді і лише тоді, коли існує виведення 8 ш в О. Таке виведення показує як крок за крококом застосовуються продукції граматики, щоб одержати слово ш з початкового нетермінального символу 8. Це виведення можна також продемонструвати наочно з допомогою дерева, яке називатемемо деревом виведення. Наприклад, розглянемо контекстно вільну граматику О = ({8}, {а, Ь, с}, 8, Р), де Р = {8 ^

8Ь8 | 8с8 | а} і слово аЬаса Є Ь(О). Виведення

8 8Ь8 =>• 8Ь8с8 =ґ- аЬ8с8 =>• аЬ8са =>• аЬаса

показано на рисунку (а), а виведення

8 ^ 8с8 ^ 8Ь8с8 ^ аЬ8с8 ^ аЬ8са ^ аЬаса

зображено деревом на рисунку (б).

до для аналізу підслова хзх4. Таким чином, покладаємо 5(#і, 1) = до. Граф шуканого ДСА має вигляд:

і

  • якщо 5(#, Хк) = (р, а,£), то після одного такту конфігура­ція (д, Хіх2 ... Хк-іХк ... хт) МТ змінюється на конфігурацію (р,хіХ2 .. .Хк-1 а.. .Хт);

  • якщо 5(д,Х1) = (р,а,£), то після одного такту конфігурація (д, х1 х2 ... хт) МТ змінюється на (р, #ах2 ... хт);

д отожнюється з числом з множини М0). Визначимо функцію / : М+1 ^ М0 за правилом

/ (п1, ...,пк, 0) = д(п1,.. .,пк), /(п1,... ,пк,т + 1) = Н(п1,... ,пк,т, /(п1,... ,пк,т)),т > 0. В цьому випадку, кажемо, що функція / отримана з функцій д

і Н з допомогою операції примітивної рекурсії.

Клас примітивно рекурсивних функцій визначається наступним чином:

  • найпростіші функції О, З і РіЩ є примітивно рекурсивними функціями;

  • якщо д : ^ N0 і Н : М ^ М0, де і = 1, 2,... ,т є примі­тивно рекурсивними функціями, то д о (Н1,..., Нт) також є примітивно рекурсивною функцією;

  • якщо д : М ^ N0 і Н : М+2 ^ N0 є примітивно рекурсивни­ми функціями, то функція /, одержана з д і Н за допомогою операції примітивної рукурсії є також примітивно рекурсив­ною;

  • інших примітивно рекурсивних функцій не існує.

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

  1. Приклад. Довести, що функція Ок(п1 ,п2,... ,пк) = 0 є примі­тивно рекурсивною.

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

Ок (п1 ,п2, ...,пк) = О(Рк (щ ,п2,.. .,пк)).

Таким чином, функція Ок = О о Рк є примітивно рекурсивною.

  1. Приклад. Довести, що функції Зк(п1,... ,пі,... ,пк) = пі + 1, де і = 1,..., к, є примітивно рекурсивними.

Функції Зк можна визначити як

ЗІ (п1 ,п2,.. .,пк) = З (Рк (п1, ...,пі ,.. .,пк)).

Отже, функція Зк = З о Рк є примітивно рекурсивною, оскільки вона одержана з примітивно рекурсивних функцій з допомогою операції композиції.

лівій частині яких вказуються потрібні слова і ці мітки. Для зупинки алгоритму на інших словах можна використати, наприклад, формулу

** Ьп * Ьп-1 .. . * Ь2 * Ьі — #Ьп * Ьп-1 . .. * Ь2 * Ьі — Ьп # * Ьп-1 .. . * Ь2 * Ьі —

Ьп#Ьп-1 ... * Ь2 * Ь1 * . . . * ЬпЬп- і... Ьі# — ЬпЬп-і.. .Ьі

Оцінимо часову та ємнісну складність цього алгоритму. Оскіль­ки кількість підстановок, які виконуються при обчисленні вихідного слова Р' з вхідного слова Р, залежить тільки від довжини слова, то функція часової складності ім (п) = ім (х) для будь-якого сло­ва х довжини п. Знайдемо кількість підстановок при аналізі слова Р = ЬіЬ2 .. .Ьп довжини п. На першому етапі алгоритм дописує зліва до слова * і переносить її разом з першою буквою в кінець слова, використовуючи при цьому п підстановок. Потім, аналогічно, алго­ритм дописує зліва до одержаного слова * і переносить її з другою буквою до попередньої *, використовуючи при цьому п - 1 підстано­вок і т.д., поки не отримаємо слово виглядуп * Ьп-1... * Ь2 * Ьі. При

цьому кількість підстановок дорівнює п + (п — 1) + ... + 1 = п(п2+і). Далі, зліва до слова дописується ще одна * і ** міняється на пі­сля чого решітка пересувається в кінець слова, знищуючи при цьому всі зірочки. Насамкінець, виконується підстановка # — і алгоритм Маркова зупиняє свою роботу. Таким чином, на другому етапі вико­нується 2 + 2п підстановок. Отже,

, ч п(п +1) л п2 + 5п + 4 2,

ім(п) = У 2 ; + 2 + 2п = 2 = °(п2).

З виведення видно, що * * Ьп * Ьп-і... * Ь2 * Ьі - слово максимальної довжини, тому 8М (п) = 2п + 1 = О(п).

Таким чином, задача розв'язується за поліноміальний час і на­лежить класу Р.

8.3. Приклад. Знайти довжину (кількість цифр) натурального чи­сла, записаного в т-ковій системі числення, тобто знайти функцію, яка кожному числу п = актк + ак-ітк-і + ... аіт + а0, де ак = 0 і

  1. < аі < т, ставить у відповідність числокак—і777~ао| = к + 1.

Оскільки, маємо, що тк < актк + ак-ітк-і + ... + аіт + а0 < (т — 1)тк + (т — 1)тк-і +... + (т — 1)т + (т — 1) = тк+і — 1 < тк+і, то к < 1одт п < к + 1. Таким чином, к = [1одт п] і довжина нату­рального числа п, записаного в т-ковій системі числення, дорівнює

  1. + [1одт п] = 1 + [іПт] = О(1п п). З останньої рівності видно, що асим­птотична оцінка довжини числа не залежить від того, в якій системі числення воно записане.

8.4. Приклад. Побудувати машину Тюрінга для визначення суми чисел, заданих у сімковій та трійковій системах числення (результат отримати в сімковій системі числення) і оцінити її складність.

1

1в конфігурації (у ,х1 х2 ... Хкх^+1... хт) МТ зупиняє свою роботу і на виході дає слово Х1Х2 ... Хт.

Якщо конфігурація а1 = (д, ш1 аш2) змінюється на конфігура­цію а2 = (д, Ьц>2), то ми писатимемо а1 ^ а2. Якщо ми матиме­мо послідовність конфігурацій а1, а2,... ап, таких, що а ^ аі+1, і = 1,... п — 1, то писатимемо а1 ^ ап.

На початку роботи машина Тюрінґа перебуває в початковому стані 5 і головка аналізує першу зліва непорожню клітинку. Далі, по­чинається виконання програми роботи МТ. В таблиці обирається клі­тинка на перетині першого рядка (бо керуючий пристрій знаходиться в початковому стані 5) та того стовпчика, який відповідає першій бу­кві вхідного слова, і виконується такт, вказаний в цій клітинці. Таким чином, МТ перейде до нової конфігурації. Потім виконуються такі ж дії, але вже в новій конфігурації: в таблиці знаходимо клітинку, що відповідає стану керуючого пристрою і букві цієї конфігурації, і вико­нується такт з цієї клітинки і т.д і т.п. Потрапивши в кінцевий стан у МТ зупиняє свою роботу і на виході одержуємо нове слово, яке запи­сане в комірках стрічки МТ після завершення її роботи. Дане слово називатимемо вихідним словом. Кажемо, що слово ш = Х1Х2 ... Хт розпізнається машиною Тюрінґа, якщо МТ, аналізуючи ш, зупиняє свою роботу в стані у, тобто ($,Х1Х2 .. .Хт) ^ (у,У1 У2 . .к ...Уп). В протилежному випадку слово ш не розпізнається МТ.

В момент зупинки всередині вихідного слова не може міститися порожніх клітинок, хоча в процесі виконання програми такі клітин­ки всередині проміжного слова можуть появлятися. Крім того, до­мовимося, що після завершення роботи МТ повинна знаходитися під однією з букв вихідного слова, якщо це слово не порожнє.

Може статися так, що в процесі обробки вхідного слова ш, МТ ніколи не перейде в кінцевий стан у .В цьому випадку кажемо, що МТ зациклюється на вхідному слові ш і слово не розпізнається МТ.

1.1. Приклад. Нехай машина Тюрінґа задана як п'ятірка МТ = (ф,А,£,$,д/), де Я = {$,Я1 ,д2,Я/}, А = {а, Ь, 0,1, #}, X = {а, Ь}, У = {0,1}, Б = {#}, і програма роботи 5 задана у вигляді таблиці:

1 — . Таким чином, шуканий НАМ має вигляд:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]