En la universidad hemos estado aprendiendo sobre la teoría de la computación en general y las máquinas de Turing más específicamente. Uno de los grandes resultados teóricos es que, a costa de un alfabeto (símbolos) potencialmente grande, puede reducir el número de estados a solo 2.
Estaba buscando ejemplos de diferentes máquinas de Turing y un ejemplo común presentado es el comparador / corrector de paréntesis. Básicamente, comprueba si una cadena de paréntesis, por ejemplo, (()()()))()()()
está equilibrada (el ejemplo anterior devolvería 0 para desequilibrado).
Por más que lo intente, solo puedo lograr que sea una máquina de tres estados. ¡Me encantaría saber si alguien puede reducir esto al mínimo teórico de 2 y cuál fue su enfoque / estados / símbolos!
Solo para aclarar, los paréntesis están "intercalados" entre la cinta en blanco, por lo que en el ejemplo anterior
- - - - - - - (()()()))()()() - - - - - - -
sería la entrada en la cinta. El alfabeto incluiría (
, )
, 1
, 0
, -
, y el *halt*
estado no cuenta como un estado.
Como referencia, el enfoque de tres estados que tengo es el siguiente: Descripción de los 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
Transiciones enumeradas 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 -
Perdona la forma informal de escribir todo esto. Todavía estoy aprendiendo las construcciones teóricas detrás de esto.