Soit une chaîne d'entrée donnée comme . Ensuite, si un NFA est actuellement dans l'état (et a lu l'entrée jusqu'à l'alphabet ), puis avant de lire le symbole d'entrée suivant, le NFA se divise en deux NFA, l'un étant dans l'état r et l'autre dans s , s'il y a une transition de le type r \ xrightarrow {\ epsilon} s . S'il existe un cycle de type r \ xrightarrow {\ epsilon} s \ xrightarrow {\ epsilon} q_1 .... \ xrightarrow {\ epsilon} q_k \ xrightarrow {\ epsilon} r , où q_i sont des états de NFA, alors il est inutile de se souvenir d'un autre NFA dans l'état r jusqu'au point où l'entrée a été lue jusqu'à l'alphabet w_i.
Si un PDA (non déterministe) est dans l'état (et l'entrée est lue jusqu'à ) et qu'il existe un cycle (où transition moyen qui ne signifie rien après est lu depuis l'entrée, rien n'est sauté ou lu depuis la pile et l'alphabet est poussé sur la pile) puis avant de lire l'alphabet d'entrée suivant il y aura un PDA infini dans les états car contrairement au NFA bien que les états soient finis, le contenu de la pile peut être différent (possibilités infinies), si je ne me trompe pas.
Comme avec NFA et PDA, la puissance du non-déterminisme provient des transitions . Je suppose donc que la machine de Turing non déterministe obtient également son non-déterminisme à partir de transitions comme NFA et PDA (plus comme PDA). Je sais qu'une machine de Turing déterministe peut simuler une machine non déterministe (je connais la preuve qui utilise la recherche en premier). Mais maintenant, je doute que cela soit possible. Parce que si un cycle du type dans PDA ci-dessus, existe dans le diagramme d'état de la machine de Turing non déterministe alors avant de lire le symbole suivant la machine de Turing déterministe même lors de la simulation d'une configuration dans une branche de la machine de Turing non déterministe (alors que bfs) devrait garder une trace de la machine de Turing infinie (encore une fois les états sont finis mais les symboles sur la bande ont des possibilités infinies).
Alors, comment exactement le non-déterminisme est-il défini dans le cas des machines de Turing? Suis-je en train de mal comprendre quelque chose de trivial? Les machines de Turing non déterministes utilisent-elles des transitions ?
Je suis désolé pour mes doutes insignifiants. Si quelque chose ne va pas, je peux mettre à jour ma question.
la source
Réponses:
Le non-déterminisme est le même concept dans tous les contextes - la machine dispose de plusieurs options pour procéder à un moment donné. Cependant, la sémantique est un peu différente car les DFA / NFA et les PDA définissent toujours les fonctions totales , tandis que les machines de Turing (déterministes ou non déterministes) définissent en général les fonctions partielles .
Une fonction partielle est une fonction définie uniquement sur une partie du domaine. Si n'est pas défini sur x alors on écrit f ( x ) = ⊥ . (Donc, f est vraiment une fonction totale, mais il y a un élément spécial dans la plage signifiant que la sortie n'est pas définie.) Une machine de Turing déterministe M définit une fonction partielle comme suit: si M s'arrête sur x alors M ( x ) est le contenu de la bande lorsque M s'arrête sur x ; et sinon, M ( x ) = ⊥f x f(x)=⊥ f M M x M(x) M x M(x)=⊥ .
Un décideur de machine de Turing déterministe a deux types d'états d'arrêt, acceptant et rejetant, et définit une fonction partielle comme suit: si s'arrête sur x à un état acceptant, alors M ( x ) = 1 ; s'il s'arrête à un état de rejet, alors M ( x ) = 0 ; s'il ne s'arrête pas, alors M ( x ) = ⊥ . Si M s'arrête toujours alors on dit qu'il accepte le langage L = { x : M ( xM x M(x)=1 M(x)=0 M(x)=⊥ M .L={x:M(x)=1}
Une machine de Turing non déterministe (qui est toujours un décideur) est autorisée à "se ramifier" (avoir plusieurs options possibles à un moment donné) et a la sémantique suivante:
Compte tenu de cette définition, il est à espérer clairement comment simuler une machine de Turing non déterministe à l'aide d'un décideur de machine de Turing déterministe: vous essayez toutes les branches, en vérifiant si l'une d'elles conduit à un état d'arrêt d'acceptation. Une fois que toutes les succursales se sont arrêtées, vous pouvez décider de passer à un état acceptant ou à un état rejetant. Si la machine de Turing non déterministe ne s'arrête pas sur une branche, il en sera de même pour la déterministe.
Qu'en est-il des mouvements ? Ils causent des problèmes dans la mesure où l'automate correspondant peut ne jamais s'arrêter. Pour les automates finis (NFA et PDA), nous ignorons silencieusement les calculs sans interruption. Notre raison pour cela est que les langues résultantes sont toujours calculables, même si l'algorithme naïf pour les simuler de manière déterministe (simulant tous les chemins de calcul) ne fonctionne pas tout à fait. Ce n'est pas si difficile pour les NFA, qui peuvent être convertis en DFA. Cependant, les PDA déterministes sont strictement plus faibles que les PDA non déterministes. Néanmoins, vous pouvez montrer que chaque PDA est équivalent à un sans transitions ϵ (bien que la preuve puisse passer par des grammaires sans contexte).ϵ ϵ
Vous pouvez simuler les mouvements dans les machines Turing, mais vous devez faire attention à ce qu'il n'y ait pas de boucles qui provoquent des calculs sans interruption. Dans certains cas, cependant, nous pouvons utiliser la même astuce que ci-dessus. Par exemple, supposons que votre machine Turing soit contrainte par l'espace: nous connaissons une limite supérieure sur l'espace qu'elle utilise (en fonction de la longueur d'entrée). Dans ce cas, chaque calcul sans interruption s'arrête nécessairement (puisque la machine de Turing a un nombre fini d'états, y compris le contenu de la bande), et donc si nous "ignorons" les calculs sans interruption comme ci-dessus, le modèle de calcul résultant est toujours calculable. Plus généralement, cela fonctionne tant que nous sommes garantis que chaque cycle de calcul sans interruption. (C'est le cas pour les NFA mais pas pour les PDA.)ϵ
la source