Comment fonctionne une machine de Turing non déterministe?

12

Quelles sont les différences entre les machines de Turing déterministes et non déterministes? Modèles différents mais équivalents de NDTM. En particulier, quelle est cette expression fréquemment utilisée "devinez de façon non déterministe"? Comment l'utiliser correctement et exemples d'utilisation incorrecte. Mon objectif est de créer une question de référence.

fade2black
la source
1
Que recherchez-vous au-delà de ce que Wikipedia a à dire sur le sujet?
David Richerby
1
Mes contributions à ce sujet: un , deux .
Raphael
Je ne suis pas sûr d'être d'accord avec la forme de cette tentative de question de référence (assez large). De plus, il n'est pas clair pour moi ce qui au-delà de la définition est attendu ici. (Si plus de gens lisaient la définition, il y aurait moins de confusion.)
Raphael

Réponses:

8

Voici plusieurs façons de penser le non-déterminisme (copié de cette réponse ).

Le génie. Chaque fois que la machine a le choix, un génie lui indique la direction à suivre. Si l'entrée est dans la langue, alors le génie peut diriger la machine de telle manière qu'il accepte finalement. Inversement, si l'entrée n'est pas dans la langue, quoi que le génie demande à la machine de faire, elle sera toujours rejetée.

Conseils. La machine calcule une fonction bivariée. La première entrée est un mot et la deuxième entrée est un "indice" . Chaque fois que la machine fait face à un choix non déterministe, elle consulte le symbole de conseil suivant et fonctionne en conséquence. On nous promet ce qui suit:wx

  • Complétude: siwL alors il y a un indicex ce qui oblige la machine à accepter.
  • Solidité: siwL puis la machine rejette sur tous les indices.

Accepter les calculs. Un calcul acceptant est un calcul légal (dans lequel la machine fonctionne toujours selon l'un des choix auxquels elle est confrontée) qui se termine à un état acceptant. Un mot est dans la langue ssi il a un calcul acceptant.

Nous pouvons formaliser la notion d'acceptation de calcul à l'aide de configurations . Une configuration est une description instantanée de l'état complet de la machine. On peut définir une relationσσ, où σ,σ sont des configurations, qui tient lorsque σ peut mener à σen une seule étape. Dans une machine déterministe, il y a au plus unσ chacun σ, alors que dans une machine non déterministe, il pourrait y en avoir plusieurs. Un calcul acceptant pour un motw est celui qui commence à la configuration initiale (la bande contient w, la tête pointe au début de w, l'état est l'état initial) et se termine par une configuration d'acceptation.

Une autre description équivalente est en termes d'accessibilité. Considérons un graphe orienté dans lequel les sommets sont des configurations et il y a un bordσ à σ si σσ. Un calcul acceptant est un chemin de la configuration initiale à une configuration acceptante.

Yuval Filmus
la source
7

La différence entre les machines de Turing déterministes et non déterministes réside dans la fonction de transition. Dans les machines déterministes de Turingδ la fonction de transition est une fonction partielle:

δ:Q×BQ×B×{left,right}

ce qui signifie que, étant donné un état et un symbole de bande, vous avez un ou aucun état, entrez le symbole à droite et la direction à déplacer. Cependant, dans les machines de Turing non déterministes, cela ressemble (iciP est l'ensemble des sous-ensembles d'un ensemble):

δ:Q×BP(Q×B×{left,right})

ce qui signifie que vous n'avez aucun ou plusieurs états, des symboles de bande à écrire ou une direction vers laquelle vous déplacer. Cela donne à votre machine la possibilité de choisir efficacement dans un tel état et symbole de bande entre les différentes "branches" de calcul possibles.

En pratique, cela signifie que nous pouvons calculer différentes sorties pour la même entrée. Par conséquent, le langage d'une machine de Turing non déterministe est l'ensemble des mots pour lesquels nous trouvons une dérivation dans les transitions définies. Une exécution spécifique peut ne pas trouver une telle dérivation mais l'important est qu'elle puisse se produire. Ainsi, lorsque vous "devinez", vous choisissez simplement l'une des branches de calcul possibles.

Exemple d'utilisation

L={(M1,M2):there exists at least one word accepted by both TM at the same time}

Dans ce cas, on pourrait simplement "deviner" un mot w et exécuter M1 et M2 sur wvérifier que si les deux acceptent, ils acceptent en même temps. La supposition pourrait fonctionner en introduisant un étatq avec des transitions qui écrivent sur une bande 0s et / ou 1s et qui sort en lisant n'importe quel symbole sur la machine générale.

Pour être honnête, je n'ai trouvé aucun exemple de mauvaise utilisation de cette "supposition", mais vérifier que chaque fois que cette phrase est utilisée est correctement effectuée, cela réduit pour vérifier que vous pouvez créer des automates avec cette structure qui simule la devinette.

Rodrigo
la source
"En pratique, cela signifie que nous pouvons calculer différentes sorties pour la même entrée." - cela semble suggérer que nous pourrions réellement construire une machine non déterministe. C'est faux.
Raphael
@Raphael vous voulez dire qu'il n'est pas possible de construire une machine non déterministe? pourquoi est-ce le cas?
Rodrigo
Parce que le non-déterminisme est un concept mathématique qui n'a pas d'équivalent physique (pour autant que je sache).
Raphael
6

Acceptation de la chaîne d'entrée dans NTM

permettez-moi d'ajouter plus sur les machines de Turing déterministes et non déterministes. Considérons que pour une langueL, nous concevons respectivement une machine de Turing déterministe et non déterministe. Sur une entréex, il n'y aura qu'un seul chemin de configurations dans le cas de la machine de Turing déterministe, à savoir c0c1ck (où chaque ci représente une configuration à ie étape). Maintenant sur la base de la configurationck, nous pouvons facilement accepter et rejeter la chaîne d'entrée x.

Voir l'image ci-dessous pour une meilleure compréhension: entrez la description de l'image ici

Dans le cas de NTM, nous devons être prudents, car il peut arriver que sur certains chemins de configuration, nous entrions dans un état de rejet. Ainsi, pour les machines de Turing non déterministes, nous disons qu'une chaîne est acceptée si au moins l'un des chemins de configuration conduit à accepter l'état . Nous rejetterons la chaîne d'entrée si tous les chemins de configuration conduisent à un état de rejet.

Par exemple, considérons l'arborescence de configuration ci-dessus pour la machine de Turing non déterministe sur une chaîne d'entrée, par exemple xDans ce cas, nous accepterons la chaîne d'entrée car il existe un seul chemin d'acceptation.

Référence : http://cs.umw.edu/~finlayson/class/fall14/cpsc326/notes/24-complexity2.html

Shiv
la source
5

Augmentation avec un module de devinettes.

J'ai trouvé ce modèle dans " Computers and Intractability " de MR Garey et DS Johnson.

Le NDTM a exactement la même structure qu'un DTM, sauf qu'il est complété par un module de devinette ayant sa propre tête en écriture seule. Le module de devinettes fournit les moyens d'écrire la «supposition» et est utilisé uniquement à cette fin.

entrez la description de l'image ici

Comment ça fonctionne.

La première étape est l'étape de devinette. Initialement, la chaîne d'entréex est écrit dans des carrés de ruban 1 par |x| (alors que tous les autres carrés sont vides), la tête de lecture-écriture balaye le carré 1, la tête en écriture seule balaye le carré 1, et le contrôle d'état fini est "inactif". Le module de devinettes dirige ensuite la tête d'écriture seule, une étape à la fois, soit pour écrire un symbole de l'alphabet de la bande Γ dans le carré de bande en cours de numérisation et déplacer un carré vers la gauche, ou pour arrêter, à quel point le module de devinettes devient inactif et le contrôle d'état fini est activé dans l'état q0. Le choix de rester actif et, le cas échéant, quel symbole deΓpour écrire, est faite par le module de devinettes de manière totalement arbitraire. Ainsi, le module de devinettes peut écrire n'importe quelle chaîne deΓ avant qu'il ne s'arrête et, en effet, ne doit jamais s'arrêter.

L'étape de "vérification" commence lorsque le contrôle d'état fini est activé dans l'état q0. A partir de là, le calcul se déroule uniquement sous la direction du programme NDTM selon exactement les mêmes règles que pour un DTM. Le module de devinettes et sa tête en écriture seule ne sont plus impliqués, ayant rempli leur rôle en écrivant la chaîne devinée sur la bande. Bien sûr, la chaîne devinée peut (et sera généralement) examinée pendant l'étape de vérification. Le calcul cesse lorsque et si le contrôle d'état à états finis entre dans l'un des deux états d'arrêt (soitqY ou qN) et est censé accepter le calcul s'il s'arrête dans l'étatqY. Tous les autres calculs, arrêtés ou non, sont classés simplement comme des calculs non acceptables .
Notez que tout programme NDTMM aura un nombre infini de calculs possibles pour une chaîne d'entrée donnée x, un pour chaque chaîne devinée possible de Γ. Nous disons que le programme NDTMM accepte x si au moins l'un d'entre eux est un calcul acceptant.

Le temps requis par un programme NDTMM accepter la chaîne xLM est défini comme le minimum, sur tous les calculs acceptables de M pour x , du nombre d'étapes se produisant dans les étapes de devinette et de vérification jusqu'à l'état d'arrêt qY est saisi.

Le seul point qui mérite une mention spéciale est que, lorsque nous envisageons généralement un algorithme non déterministe comme devinant une structure S cela dépend en quelque sorte de l'instance [problème] donnée I, le module de devinette d'un NDTM ignore entièrement l'entrée donnée. Cependant, puisque chaque chaîne deΓest une supposition possible, nous pouvons toujours concevoir notre programme NDTM de sorte que l'étape de vérification commence par vérifier si non la chaîne supposée correspond (sous l'interprétation implicite que notre programme place sur les chaînes) à une supposition appropriée pour l'entrée donnée. Sinon, le programme peut entrer immédiatement dans l'état d'arrêtqN.

. . .

La classe NP est défini de manière informelle comme la classe de tous les problèmes de décision Π qui, dans des schémas de codage raisonnables, peuvent être résolus par des algorithmes non déterministes à temps polynomial.

L'utilisation du terme «résoudre» dans ces définitions informelles doit, bien entendu, être prise avec un grain de sel. Il devrait être évident qu'un "algorithme non déterministe du temps polynomial" est fondamentalement un dispositif définitionnel pour saisir la notion de vérifiabilité du temps polynomial, plutôt qu'une méthode réaliste de résolution des problèmes de décision. Au lieu d'avoir un seul calcul possible sur une entrée donnée, il en a plusieurs différents, un pour chaque supposition possible.

C’est cette notion de «vérifiabilité» du temps polynomial que la classe NPest destiné à isoler. Notez que la vérifiabilité du temps polynomial n'implique pas la solvabilité polynomiale.

fade2black
la source