Машина Тьюринга с двумя состояниями для сопоставления скобок


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 -

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


Разрешено ли использовать алфавит большего размера?
Рафаэль

@Raphael Согласно теоретическому результату, можно поменять состояния на алфавит и наоборот. Таким образом, сокращение состояний до двух означает, что вам, скорее всего, придется использовать больший алфавит. Так что да, краткий ответ: алфавит может быть настолько большим, насколько это необходимо
Four_FUN

Думаю, в двухмоточной ТМ это можно сделать без лишних символов и.
Каролис Юоделе

@Four_FUN ты из MIT?

Ответы:


8


_ ( ) [ { / \ _

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

Последнее замечание: если вы хотите увидеть, как эта техника может быть доведена до предела, прочитайте (и попытайтесь понять :-) конструкцию универсальной машины Тьюринга с 2 состояниями и 18 символами Ю. Рогожина в «Малой универсальной Тьюринге». машины»


Разве мы не решили, что ответы, содержащие только исходный код, не годятся для информатики ? ;)
Рафаэль

1
@ Рафаэль: Я согласен с тобой, но мое можно рассматривать как дополнение к твоему (это выглядит хорошо, даже если я не проверял детали). Я добавлю заметку об этом.
Вор

1
@Raphael: Я написал это просто ради забавы, пытаясь свести к минимуму символы ленты, и это «кажется» работает :-), поэтому я решил опубликовать его.
Вор

@Vor. Большое спасибо за ваш дополнительный вклад в эту проблему. Все это говорит мне о том, что мне нужно больше практики в этом деле. Спасибо, что опубликовали свой исходный код, несмотря на то, что я придерживался теории.
Four_FUN

1
@Four_FUN: универсальная ТМ Рогожина (2,18) - это стандартная машина Тьюринга (т. Е. Помимо входных данных ее исходная лента содержит только пустые символы), которая имитирует произвольную систему с 2 тегами (которая является универсальной моделью). Символ 2 состояния 3 - это слабая машина Тьюринга (исходная лента должна быть заполнена бесконечной последовательностью шаблона), и универсальность «достигнута», моделируя клеточные автоматы Правило 110 (доказавшее, что оно является полным по Тьюрингу). ). Существует (утверждается?) Доказательство того, что стандарт TM (2,3) не может быть завершен по Тьюрингу.
Вор

7

Тупой ответ: ваш результат обещает, что существует универсальная машина Тьюринга с двумя состояниями. Создайте любую TM для языка Dyck, вычислите его индекс и жестко закодируйте его в универсальный компьютер.

{#,(,),x}a^a

  • q0

    )aa^)x^
    )#x^q1

    (^(^x
    )^#

  • q1(^+x^#x^


  1. x

Если вы не возражаете, я спрашиваю, как именно мое решение обещает универсальную TM с двумя состояниями? (кстати, очень умное решение. Спасибо за ваш вклад)
Four_FUN

1
@Four_FUN: потому что вы говорите в своем вопросе: «... Одним из замечательных теоретических результатов является то, что за счет потенциально большого алфавита (символов) вы можете уменьшить количество состояний до 2…» . .. так что вы также можете выбрать произвольную машину Универсального Тьюринга и уменьшить количество состояний до 2. И если вы проведете несколько экспериментов, вы также поймете, что нетрудно создать автоматическую процедуру, которая преобразует произвольную ТМ в эквивалентную. 2 состояния ТМ (если вас не волнует минимизация количества букв алфавита).
Вор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.