Na faculdade, aprendemos mais sobre a teoria da computação em geral e sobre as máquinas de Turing. Um dos grandes resultados teóricos é que, ao custo de um alfabeto potencialmente grande (símbolos), você pode reduzir o número de estados para apenas 2.
Eu estava procurando exemplos de diferentes máquinas de Turing e um exemplo comum apresentado é o parênteses / verificador. Essencialmente, ele verifica se uma série de parênteses, por exemplo, (()()()))()()()
está equilibrada (o exemplo anterior retornaria 0 para desequilibrado).
Por mais que eu tente, só consigo que isso seja uma máquina de três estados. Gostaria muito de saber se alguém pode reduzir isso para o mínimo teórico de 2 e qual foi a sua abordagem / estados / símbolos!
Apenas para esclarecer, os parênteses são "imprensados" entre a fita em branco; portanto, no exemplo acima,
- - - - - - - (()()()))()()() - - - - - - -
seria a entrada na fita. O alfabeto incluiria (
, )
, 1
, 0
, -
, eo *halt*
estado não conta como um estado.
Para referência, a abordagem de três estados que possuo é a seguinte: Descrição dos estados:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Transições Listadas como:
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 -
Perdoe a maneira informal de escrever tudo isso. Ainda estou aprendendo as construções teóricas por trás disso.
fonte
Respostas:
Apenas um compêndio de "código-fonte" da resposta de Raphael: esta é uma versão funcional que usa o mesmo truque (no estado q1) e tem um alfabeto de fita:
_
_ ( ) [ { / \
(onde é o símbolo em branco inicial)Você pode vê-lo trabalhando usando um simulador on-line da máquina de Turing ; o código fonte é:
Uma observação final: se você quiser ver como essa técnica pode ser levada ao limite, leia (e tente entender :-) a construção da máquina Universal Turing com 2 estados e 18 símbolos de Y. Rogozhin em "Small Universal Turing máquinas "
fonte
Resposta idiota: seu resultado promete que existe uma máquina de Turing universal com dois estados. Construa qualquer TM para a linguagem Dyck, calcule seu índice e codifique-o na máquina universal.
fonte