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.
la source
Réponses:
Juste un recueil de "code source" de la réponse de Raphaël: c'est une version de travail qui utilise la même astuce (sur l'état q1) et a l'alphabet de la bande:
_
_ ( ) [ { / \
(où est le symbole vierge initial)Vous pouvez le voir au travail en utilisant un simulateur en ligne de machine Turing ; le code source est:
Une dernière note: si vous voulez voir comment cette technique peut être poussée à la limite, lisez (et essayez de comprendre :-) la construction de la machine Universal Turing avec 2 états et 18 symboles par Y. Rogozhin dans "Small universal Turing" Machines"
la source
Réponse stupide: votre résultat promet qu'il y a un machine de Turing universelle à deux états. Construisez n'importe quelle MT pour le langage Dyck, calculez son index et codez-le en dur dans la machine universelle.
la source