Дводержавна машина Тьюрінга для відповідності парентезу


9

У коледжі ми вивчали теорію обчислення взагалі та машини Тьюрінга. Один з чудових теоретичних результатів полягає в тому, що ціною потенційно великого алфавіту (символів) можна зменшити кількість станів до лише 2.

Я шукав приклади різних машин Тюрінга, і загальним прикладом є матч / шашка "Парентез". По суті, він перевіряє, чи рядок дужок, наприклад (()()()))()()(), врівноважений (попередній приклад повертав би 0 для незбалансованого).

Спробуйте, як я можу, я можу зробити так, щоб це було три державні машини. Я хотів би знати, чи хтось може звести це до теоретичного мінімуму 2 та яким був їхній підхід / стан / символи!

Просто для уточнення, дужки "просочені" між порожньою стрічкою, тому в наведеному вище прикладі - - - - - - - (()()()))()()() - - - - - - -буде введенням на стрічку. Алфавіт включатиме в себе (, ), 1, 0, -, і *halt*держава не вважається , як стан.

Для довідки, у мене є такий підхід трьох держав: Опис станів:

 State s1: Looks for Closing parenthesis

 State s2: Looks for Open parenthesis

 State s3: Checks the tape to ensure everything is matched

 Symbols: ),(,X

Переходи перераховані як:

Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0  -
Action: s1 -  s3    -  r

//Transitions of TM
Action: s1 (  s1  (   l
Action: s1 )  s2  X  r
Action: s1 X  s1  X  l
Action: s2 ( s1 X  l
Action: s2 X  s2 X r
Action: s3 (  *halt* 0 -
Action: s3 X  s3     X r
Action: s3 -  *halt* 1 -

Пробачте неформальний спосіб записати все це. Я все ще вивчаю теоретичні конструкції, що стоять за цим.


Чи дозволяється нам використовувати великий алфавіт?
Рафаель

@ Рафаель Відповідно до теоретичного результату, можна обмінюватися станами на алфавіт і навпаки. Таким чином, скорочення штатів до двох означає, що вам, швидше за все, доведеться використовувати алфавіт з більшим розміром. Так, так, коротка відповідь: Алфавіт може бути настільки великим, як бажано
Four_FUN

Я думаю, що в двох стрічках ТМ це можна зробити без зайвих символів і.
Karolis Juodelė

@Four_FUN Ви з MIT?

Відповіді:


8

Просто збірник "вихідного коду" відповіді Рафаеля: це робоча версія, яка використовує той самий трюк (у стані q1) і має алфавіт стрічки:
_ ( ) [ { / \ (де_ початковий порожній символ)

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

Ви можете побачити це на роботі, використовуючи онлайн-симулятор машини Тьюрінга ; вихідний код:

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

Остаточне зауваження: якщо ви хочете побачити, як цю техніку можна підштовхнути до меж, прочитайте (і спробуйте зрозуміти :-) побудова універсальної машини Тьюрінга з двома станами та 18 символами Ю. Рогожина у "Малому універсальному Тьюрінгу машини "


Хіба ми не вирішили, що відповіді, що представляють лише вихідний код, не корисні для інформатики ? ;)
Рафаель

1
@Raphael: Я згоден з вами, але моє може розглядатися як додаток до вашого (це здається нормальним, навіть якщо я не перевіряв деталі). Додам до цього записку.
Vor

1
@Raphael: Я зашифрував це просто заради задоволення, намагаючись мінімізувати символи стрічки, і це "здається" :-) працювати, тому я вирішив опублікувати.
Vor

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

1
@Four_FUN: Універсальний ТМ Рогожина (2,18) - це стандартна машина Тьюрінга (тобто, крім входу, його початкова стрічка містить лише порожні символи), що імітує довільну 2-тегову систему (яка є універсальною моделлю). 2 стан 3 один символ є слабо Тьюринга машина (початкові потреби стрічки повинні бути заповнені з нескінченної послідовності шаблону), а універсальність «досягається» імітації стільникового Правило автоматів 110 (який , як було доведено бути Тьюринга ). Існує (заявлений?) Доказ того, що стандарт ТМ (2,3) не може бути завершеним Тьюрінгом.
Vor

7

Тупа відповідь: ваш результат обіцяє наявність універсальної машини Тьюрінга з двома станами. Побудуйте будь-яку ТМ для мови Dyck, обчисліть її індекс і жорсткий код у універсальній машині.

Але це, звичайно, не дуже задовольняє. Ваш підхід насправді працює, якщо ви "обмацуєте" різницю між рухом ліворуч і рухом праворуч, при одночасному поєднанні пар дужок у розширення алфавіту. Нам потрібно{#,(,),х} і позначені версії а^ всіх символів а.

  • Початковий стан q0 працює так.

    Знайшовши немарковані символи, рухайтеся праворуч до першого )знаходиться. При цьому перезаписуйте всі символиа з а^. Перепишіть знайдене) з х^.
    Якщо немає), тобто ми потрапляємо на символ розриву #, перезапишіть його х^ і перейти на q1.

    Знайшовши позначені символи, рухайтеся ліворуч до першого (^знайдено, перезаписуючи всі передані (позначені) символи з їх немаркованими варіантами. Перепишіть знайдене(^ з х.
    Якщо ми знайдемо a)^ або # по-перше, цикл / відхилення¹.

  • В q1, ми перевіряємо, чи все було узгоджено; ще можуть бути префікси форми(^+на стрічку. Тобто рухайтеся ліворуч до тих пір, поки ми будемо вживатисях^. Якщо ми таким чином знайдемо#, приймати; якщо ми знайдемо будь-який інший символ, але х^ по-перше, петлю / відхилити.


  1. Це правильно, оскільки машина збігається зсередини; з юридичного вкладу є лишех між парою круглих дужок, які зараз збігаються.

Якщо ви не проти мені запитати, як саме моє рішення обіцяє універсальну ТМ з двома станами? (дуже розумне рішення btw. thnak вас за ваш внесок)
Four_FUN

1
@Four_FUN: тому що у своєму запитанні ви говорите: "... Одним із великих теоретичних результатів є те, що ціною потенційно великого алфавіту (символів) ви можете зменшити кількість станів аж до 2 ..." . .. тож ви також можете вибрати довільну універсальну машину Тьюрінга і зменшити кількість станів до лише 2. І якщо ви зробите кілька експериментів, ви також зрозумієте, що не важко зробити автоматичну процедуру, яка перетворює довільну ТМ в еквівалентну 2 стану TM (якщо вам не байдуже мінімізація кількості символів алфавіту).
Vor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.