J'ai récemment entendu ceci:
"Une machine non déterministe n'est pas la même chose qu'une machine probabiliste. En gros, une machine non déterministe est une machine probabiliste dans laquelle les probabilités de transitions ne sont pas connues".
Je me sens comme si je comprends le point mais je n'ai vraiment pas. Est-ce que quelqu'un pourrait m'expliquer cela (dans le contexte des machines ou en général)?
Edit 1:
Juste pour clarifier, la citation était dans le contexte d'automate fini, mais la question est significative pour les machines de Turing aussi comme d'autres ont répondu.
De plus, j'entends des gens dire - "... alors je choisis l'objet x de l'ensemble de manière non déterministe". J'avais l'habitude de penser qu'ils veulent dire - "au hasard". D'où la confusion.
Réponses:
Il est important de comprendre que les informaticiens utilisent le terme "non déterministe" différemment de la façon dont il est généralement utilisé dans d'autres sciences. Une MT non déterministe est en réalité déterministe au sens physique du terme - c’est-à-dire qu’une MNT produit toujours la même réponse sur une entrée donnée: elle accepte toujours ou rejette toujours. Une MT probabiliste acceptera ou rejettera une entrée avec une certaine probabilité. Ainsi, lors d'une exécution, elle pourrait l'accepter et une autre, elle pourrait la rejeter.
Plus en détail: à chaque étape du calcul effectué par un MNT, au lieu d’avoir une seule règle de transition, plusieurs règles peuvent être invoquées. Pour déterminer si la MNT accepte ou rejette, vous examinez toutes les branches possibles du calcul. (Ainsi, s'il existe, disons, exactement 2 transitions parmi lesquelles choisir à chaque étape et que chaque branche de calcul comporte un total de N étapes, il y aura brances au total à prendre en compte.) Pour une MNT standard, une entrée est: accepté si l' une des branches de calcul accepte.2N
Cette dernière partie de la définition peut être modifiée pour obtenir d'autres types de machines de Turing connexes. Si vous êtes intéressé par des problèmes ayant une solution unique, vous pouvez faire accepter la MT si une seule branche accepte. Si le comportement de la majorité vous intéresse, vous pouvez définir la MT à accepter si plus de la moitié des branches l’acceptent. Et si vous choisissez au hasard (selon une distribution de probabilité) l'une des branches possibles et acceptez ou refusez en fonction de ce que cette branche fait, alors vous avez une MT probabiliste.
la source
Dans le contexte de Turing Machines, "non déterministe" signifie vraiment "parallèle". Un algorithme randomisé peut explorer de manière aléatoire les branches de l'arbre de calcul d'une machine de Turing non déterministe, mais une machine de Turing non déterministe peut les explorer - en même temps - en même temps, ce qui lui donne toute sa puissance.
Dans d'autres contextes (je ne peux pas dire de votre citation si vous parlez de Turing Machines), un algorithme aléatoire pourrait utiliser intentionnellement le hasard, alors qu'un algorithme que vous vouliez être déterministe pourrait finir par présenter un non-déterminisme à cause d'un bogue ...
En réponse à votre modification, lorsque les gens disent "choisissez un élément d'un ensemble de manière non déterministe", il est possible qu'ils signifient simplement "de manière aléatoire". Cependant, il est également possible qu'ils signifient "choisissez comme par magie l'élément -right- de l'ensemble". Une manière courante de visualiser les machines à calcul non déterministes est qu’elles «découvrent» comme par magie une solution, puis vérifient son exactitude. Bien sûr, vous pouvez voir cette supposition magique comme étant simplement le résultat de la vérification de toutes les possibilités en parallèle.
la source
Il existe plusieurs contextes différents où «déterministe», «aléatoire» et «non déterministe» signifient trois choses différentes. Dans les contextes où il y a plusieurs participants, tels que la sécurité et la concurrence, l'intuition est souvent quelque chose comme:
déterministe signifie «je peux choisir»
non déterministe signifie «quelqu'un d'autre peut choisir»
aléatoire signifie «personne ne peut choisir»
Quelques exemples:
[simultanéité, aléatoire] Considérez un protocole de réseau tel que Ethernet , où plusieurs nœuds peuvent envoyer un message à tout moment. Si deux nœuds envoient un message à des intervalles très rapprochés, il se produit une collision: les messages se chevauchent et sont illisibles. Si une collision se produit, les deux nœuds doivent essayer d'envoyer les messages ultérieurement. Imaginez que vous écrivez la spécification d'Ethernet. Comment spécifiez-vous le délai entre les tentatives? (Les retards auraient dû être différents ou il y aurait encore une collision!)
déterministe: définit un algorithme que les deux nœuds doivent utiliser. Cela n'est pas fait pour Ethernet car, pour donner des résultats différents, l'algorithme devrait privilégier un nœud par rapport à l'autre (pour tout contenu de message donné), et Ethernet évite de le faire.
non déterministe: laissez chaque implémenteur décider. Ce n'est pas bon car les implémenteurs des deux nœuds peuvent choisir le même algorithme.
random: chaque nœud doit sélectionner une valeur de délai de manière aléatoire (avec une distribution spécifiée). Ça fonctionne comme ça. Il existe une faible probabilité que les deux nœuds choisissent le même délai et qu'il y ait une autre collision, mais la probabilité de succès augmente asymptotiquement vers 1 à mesure que le nombre de tentatives augmente.
[simultanéité, non déterministe] Vous écrivez un algorithme simultané. Dans une situation spécifique, il peut y avoir une impasse. Comment pouvez-vous empêcher l'impasse de se produire? Cela dépend du type de planification de votre environnement de concurrence.
déterministe: le planificateur bascule toujours entre les threads à certains points bien définis, par exemple uniquement lorsque le code donne explicitement. Ensuite, il vous suffit simplement de vous assurer que les fils ne cèdent pas aux mauvais moments.
random: le programmateur est assuré de changer de thread de manière aléatoire. Ensuite, une stratégie viable peut être de détecter le blocage si cela se produit et de relancer l’algorithme depuis le début.
non déterministe (la plupart des planificateurs sont comme cela): vous ne savez pas quand le planificateur basculera entre les threads. Donc, vous devez vraiment éviter l'impasse. Si vous avez essayé de détecter et de redémarrer de manière aléatoire, vous courez le risque que le planificateur planifie vos threads exactement de la même manière, encore et encore.
[sécurité, aléatoire] Vous écrivez une application avec une invite de mot de passe. Comment modélisez-vous un attaquant?
déterministe: l'attaquant essaye toujours les mêmes mots de passe. Ce n’est pas un modèle utile d’attaquant - les attaquants ne sont pas prévisibles par définition.
non déterministe: l'attaquant connaît votre mot de passe d'une manière ou d'une autre et y entre. Cela montre la limitation des mots de passe: ils doivent être gardés secrets. Si votre mot de passe est secret, cet attaquant est irréaliste.
random: l'attaquant tente des mots de passe de manière aléatoire. Dans ce cas, il s’agit d’un modèle réaliste d’attaquant. Vous pouvez étudier le temps qu'il faudrait pour que l'attaquant devine votre mot de passe en fonction de la distribution aléatoire qu'il utilise. Un bon mot de passe est long pour toute distribution réaliste.
[sécurité, non déterministe] Vous écrivez une application et vous craignez qu'elle puisse avoir une faille de sécurité. Comment modélisez-vous un attaquant?
déterministe: l'attaquant sait tout ce que vous savez. Encore une fois, ce n'est pas un modèle utile d'attaquant.
random: l'attaquant jette des ordures aléatoires et espère faire planter votre programme. Cela peut être utile parfois ( fuzzing ), mais l'attaquant pourrait être plus intelligent que cela.
non déterministe: s'il y a un trou, l'attaquant le trouvera éventuellement. Donc, vous feriez mieux de durcir votre application (augmentez les besoins en informations de l’attaquant; notez que s’il s’agit d’une exigence de renseignements plutôt que d’une exigence de calcul, cela compte comme non déterministe jusqu’à ce que l’intelligence artificielle apparaisse), ou mieux, de prouver qu’il n’existe pas. trou de sécurité et donc un tel attaquant n'existe pas.
la source
Un exemple pour rendre les choses plus claires:
Supposons que vous deviez choisir une porte à ouvrir parmi 10000 portes (disons qu'il y a un prix derrière l'une des portes). Choisir au hasard signifie que vous choisiriez l'une des 10000 portes et y entreriez. S'il y a un prix derrière une seule porte, vous ne le trouverez probablement pas. Une machine non déterministe entrerait simultanément dans toutes les 10 000 portes. S'il y a un prix n'importe où, la machine non déterministe le trouvera.
la source
Définition de machine de Turing non déterministe : machine de Turing qui possède plusieurs états suivants pour certaines combinaisons de contenu de la cellule et de l'état actuels. Une entrée est acceptée si une séquence de mouvements mène à l'acceptation.
Définition de la machine de Turing probabiliste : Machine de Turing non déterministe qui choisit de manière aléatoire les transitions disponibles à chaque point, selon une distribution de probabilité.
La machine de Turing probabiliste est une machine de Turing non déterministe pouvant faire des erreurs.
PPT j'ai trouvé utile.
la source
Je préfère la définition suivante:
Il n’existe pas de machine probabiliste de Turing! Il n'y a que des machines déterministes (à chaque étape un seul état de suivi possible) et des machines non déterministes (à chaque étape un nombre constant d'états de suivi possibles).
Le non-déterminisme fonctionne comme suit: considérons une machine non déterministe qui s'arrête sur chaque entrée (possible si le problème est décidable), où chaque calcul possible utilise le même nombre d'étapes et où chaque étape a exactement 2 états de suivi possibles ( les deux pas vraiment une restriction). Comme dans la définition de NP, une machine non déterministe accepte une entrée s'il existe au moins un calcul acceptant possible et la rejette si tous les calculs sont rejetés.
Le hasard entre en jeu de la manière suivante: Vous pouvez choisir de manière uniforme et aléatoire un chemin unique de calcul à partir d'une machine non déterministe, comme indiqué ci-dessus. Vous acceptez si et seulement si ce chemin de calcul choisi au hasard accepte. Cette approche randomisée "résout" votre problème si, avec une probabilité écrasante, cette réponse est correcte.
La différence entre le non-déterminisme et le caractère aléatoire réside donc dans le fait de savoir si vous recherchez la simple existence d'une réponse correcte Oui (et de réponses Non fiables), ou si vous souhaitez résoudre votre problème "la plupart du temps" .
la source
Pour rester simple: une machine non déterministe peut choisir de manière optimale le résultat de chaque tirage (si vous aimez l'analogie avec une machine probabiliste). Vous pouvez également imaginer qu'il exécute le calcul pour chaque résultat du lancer de pièce en parallèle.
la source
Reculer pendant le débogage pour motiver le non-déterminisme
La notion de machine non déterministe se suggère lorsque vous souhaitez revenir en arrière (dans le temps) dans un programme lors du débogage. Dans un ordinateur typique, chaque étape ne modifie qu'une quantité finie de mémoire. Si vous enregistrez toujours ces informations pour les 10000 étapes précédentes, vous pouvez alors avancer et revenir en arrière dans le programme. Cette possibilité ne se limite pas aux programmes de jouets. Si vous essayez de supprimer l'asymétrie entre les pas en avant et les pas en arrière, vous vous retrouvez avec la notion de machine non déterministe.
Similarités et différences entre le non déterminisme et le caractère aléatoire
Bien que les machines probabilistes partagent certaines caractéristiques avec les machines non déterministes, cette symétrie entre les pas en avant et les pas en arrière n'est pas partagée. Pour le voir, modélisons les étapes ou les transitions d'une machine déterministe par des fonctions (totales ou partielles), les transitions d'une machine non déterministe par des relations (finies) et les transitions d'une machine probabiliste par des matrices (sub) stochastiques . Par exemple, voici les définitions correspondantes pour les automates finis
Il existe de nombreuses conditions d'acceptation raisonnables
Les transitions ne sont qu'une partie d'une machine, les états initial et final, les conditions possibles de sortie et d'acceptation sont également importants. Toutefois, il existe très peu de conditions d'acceptation non équivalentes pour les machines déterministes, un certain nombre de conditions d'acceptation raisonnables pour les machines non déterministes (NP, coNP, #P, ...) et de nombreuses conditions d'acceptation possibles pour les machines probabilistes. Par conséquent, cette réponse se concentre principalement sur les transitions.
La réversibilité n'est pas triviale pour les machines probabilistes
La réversibilité est délicate même pour les machines non déterministes
Ces considérations ont également un sens pour les automates à pile
Cet article suggère que l'une des motivations du non-déterminisme consiste à supprimer cette asymétrie entre les pas en avant et les pas en arrière. Cette symétrie du non-déterminisme est-elle limitée aux automates finis? Voici les définitions symétriques correspondantes pour les automates à pile
Vérification schématique de l'inversion pour des opérations d'entrée et de pile en progression
Voici un schéma d’une opération d’entrée en progression dont l’inversion serait très mauvaise
The stack operation(a,b) gets reversed to (b,a) as follows
A generalized stack operation(ab,cde)∈Γ∗×Γ∗ would be reversed to (cde,ab)
Reversibility for Turing machines
A machine with more than one stack is equivalent to a Turing machine, and stack operations can easily be reversed. The motivation at the beginning also suggests that reversal (of a Turing machine) should not be difficult. A Turing machine with a typical instruction set is not so great for reversal, because the symbol under the head can influence whether the tape will move left or right. But if the instruction set is modified appropriately (without reducing the computational power of the machine), then reversal is nearly trivial again.
A reversal can also be constructed without modifying the instruction set, but it is not canonical and a bit ugly. It might seem that the existence of a reversal is just as difficult to decide as many other question pertaining to Turing machines, but a reversal is a local construction and the difficult questions often have a global flavor, so pessimism would probably be unjustified here.
The urge to switch to equivalent instruction sets (easier to reverse) shows that these questions are less obvious than they first appear. A more subtle switch happened in this post before, when total functions and stochastic matrices were replaced by partial functions and substochastic matrices. This switch is not strictly necessary, but the reversal is ugly otherwise. The switch to the substochastic matrices was actually the point where it became obvious that reversibility is not so trivial after all, and that one should write down details (as done above) instead of taking just a high level perspective (as presented in the motivation at the beginning). The questions raised by Niel de Beaudrap also contributed to the realization that the high level perspective is slightly shaky.
Conclusion
Non-deterministic machines allow a finite number of deterministic transitions at each step. For probabilistic machines, these transitions additionally have a probability. This post conveys a different perspective on non-determinism and randomness. Ignoring global acceptance conditions, it focuses on local reversibility (as a local symmetry) instead. Because randomness preserves some local symmetries which are not preserved by determinism, this perspective reveals non-trivial differences between non-deterministic and probabilistic machines.
la source
In the context of Turing Machines (TMs) and automata theory, a non-deterministic machine is one in which any instantiation of the machine which accepts is fine. In this sense, it is like running multiple deterministic machines in parallel and take the output of any instances that accept the input. In fact there is a (deterministic) algorithm to transform any non-deterministic automaton (withn states) into an equivalent deterministic one (with 2n states, exponential) by considering equivalence classes of states, no matter if the algorithm implemented in the machine involves randomisation or probabilities (see below).
But if the algorithm implemented in the machine, involves randomisation or probabilities (intrinsic in the algorithm), then it is a randomised (or probabilistic) machine.
In general, it is always possible to remove non-determinism from a machine and construct a deterministic equivalent (see algorithm above), but the same cannot be done (in general) to remove randomisation (in the context of the above) because it is intrinsic to the algorithm implemented.
Note that in the light of the above, both a deterministic machine and a non-deterministic machine can be probabilistic if the algorithm (involved) uses randomisation (or probabilities) in this way.
To sum up, non-determinism in automata (in this context) refers to classes of similar automata, while randomisation or probabilistic machines refer to the (intrinsic application of randomisation in the) actual algorithms implemented by these automata.
la source