Oui, vous avez raison, les ordinateurs sont automatisés déterministes. Les modèles non déterministes sont plus utiles à des fins théoriques, parfois la solution déterministe n'est pas aussi évidente pour la définition (ou dire l'énoncé du problème) et si peu difficile à trouver. Ensuite, une approche consiste à concevoir d'abord un modèle non déterministe qui peut être relativement facile à concevoir, puis à essayer de le convertir en un modèle déterministe. Ci-dessous, j'ai essayé de démontrer ce que je veux dire avec un exemple. Considérez l'expression régulière:
(01)*01(0 + 1)*
Supposons maintenant, si vous êtes invité à dessiner DFA pour la langue générée par RE ci-dessus.
Avec ma connaissance de la conception autorités fédérales, je sais que (1) lorsqu'un *
présent dans l' expression régulière a indiqué que je besoin de boucle correspondante FA (2) opérations concaténer comme a.b
moyen quelque chose comme: .(q0)─a→(q1)─b→(q2)
Donc, à ma première tentative, je dessinerais un NFA comme:
Pensé que ce n'est pas une solution déterministe mais semble très simple FA qui peut être facilement conçu en utilisant l'expression régulière donnée. Mon genre d'analogie pour montrer la similitude entre l'expression régulière ci-dessus et mon NFA est comme ci-dessous:
- La boucle à l'état q 0 doit être pour
(01)*
01
(après (01)*
) donne(q0)─0→(q1)─1→(q2)
(0 + 1)*
donne une boucle automatique à l'état q 2 pour l'étiquette 0, 1
Selon mon analogie, je pense que la FA que j'ai dessinée ci-dessus est relativement simple à tirer d'une RE donnée. Et heureusement, dans la classe des automates finis, chaque modèle non déterministe peut être converti en un modèle déterministe équivalent. Nous avons une méthode algorithmique pour convertir un NFA en DFA . Je peux donc facilement convertir au-dessus de NFA en DFA:
Une autre partie est malheureusement que ce n'est pas toujours possible de convertir un modèle non déterministe en un modèle déterministe, par exemple la classe pour l'automatisme push-down déterministe est un sous-ensemble de la classe de l'automate push-down déterministe "check venn diagram " et vous ne pouvez pas toujours convertir un NPDA dans un PDA.
Habituellement, lorsqu'il n'est pas possible de convertir une solution non déterministe en solution déterministe, à l'aide d'une solution non déterministe, nous définissons la solution déterministe dans un sous-domaine (ou, disons, un domaine partiel) au lieu d'un domaine complet. Ou nous définissons la solution d'une autre manière (par exemple une approche gourmande) qui bien sûr peut ne pas vous donner une solution optimale .
Parfois, le non-déterminisme est un mécanisme efficace pour décrire avec précision et efficacité certains problèmes / solutions complexes, par exemple, des machines non déterministes peuvent servir de modèle d'algorithme de recherche et de retour en arrière (lire: Comment le processus de chaîne dans un modèle non déterministe en utilisant le retour arrière) ). Des modèles déterministes opposés représentent mieux des solutions efficaces, minimisées et moins redondantes.
Ici, je voudrais également citer de Wikipedia Utilisation de l'algorithme non déterministe :
Dans la conception d'algorithmes, des algorithmes non déterministes sont souvent utilisés lorsque le problème résolu par l'algorithme autorise intrinsèquement plusieurs résultats (ou lorsqu'il existe un seul résultat avec plusieurs chemins par lesquels le résultat peut être découvert, chacun également préférable). Surtout, chaque résultat produit par l'algorithme non déterministe est valide, quels que soient les choix que l'algorithme fait lors de son exécution.
Un grand nombre de problèmes peuvent être conceptualisés grâce à des algorithmes non déterministes, y compris la question non résolue la plus célèbre de la théorie informatique, P vs NP.
Comme @keshlam l'a également mentionné dans son commentaire : «Le non-déterminisme» est en pratique utilisé pour désigner toute imprévisibilité dans l'issue d'un processus. Par exemple, les programmes simultanés présentent un comportement non déterministe - deux exécutions du même programme avec la même entrée peuvent produire des résultats différents (si le mécanisme de contrôle de concurrence n'est pas appliqué). En savoir plus à ce sujet dans "Utilité du non-déterminisme" .
Je vous suggère également de lire les liens suivants:
1. Quelle est la différence entre le non-déterminisme et le hasard?
2. 9.2.2 Modèles non déterministes et probabilistes: (a). Non déterministe: je n'ai aucune idée de ce que la nature fera. (b). Probabiliste: J'ai observé la nature et collecté des statistiques.
3. Programmation non déterministe