Au collège, nous avons appris la théorie du calcul en général et les machines de Turing plus spécifiquement. L'un des grands résultats théoriques est qu'au prix d'un alphabet potentiellement grand (symboles), vous pouvez réduire le nombre d'états à seulement 2.
Je cherchais des exemples de différentes machines de Turing et un exemple courant présenté est le matcher / vérificateur de parenthèses. Essentiellement, il vérifie si une chaîne de parenthèses, par exemple, (()()()))()()()
est équilibrée (l'exemple précédent retournerait 0 pour asymétrique).
Essayez comme je peux, je ne peux obtenir que ceci soit une machine à trois états. J'aimerais savoir si quelqu'un peut réduire cela au minimum théorique de 2 et quelle était son approche / ses états / symboles!
Juste pour clarifier, les parenthèses sont "prises en sandwich" entre la bande vierge, donc dans l'exemple ci-dessus
- - - - - - - (()()()))()()() - - - - - - -
serait l'entrée sur la bande. L'alphabet comprendrait (
, )
, 1
, 0
, -
et l' *halt*
Etat ne compte pas comme un état.
Pour référence, l'approche à trois états que j'ai est la suivante: Description des états:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Transitions répertoriées comme:
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 -
Pardonnez la manière informelle d'écrire tout cela. J'apprends toujours les constructions théoriques derrière cela.