Quelles sont les différences et les relations entre les algorithmes randomisés et les algorithmes non déterministes?
De Wikipédia
Un algorithme randomisé est un algorithme qui utilise un degré d'aléatoire dans le cadre de sa logique. L'algorithme utilise généralement des bits uniformément aléatoires comme entrée auxiliaire pour guider son comportement, dans l'espoir d'obtenir de bonnes performances dans le "cas moyen" sur tous les choix possibles de bits aléatoires. Formellement, les performances de l'algorithme seront une variable aléatoire déterminée par les bits aléatoires; ainsi, soit le temps d'exécution, soit la sortie (ou les deux) sont des variables aléatoires.
Un algorithme non déterministe est un algorithme qui peut présenter différents comportements sur différentes exécutions, par opposition à un algorithme déterministe. Il existe plusieurs façons dont un algorithme peut se comporter différemment d'une exécution à l'autre. Un algorithme simultané peut fonctionner différemment sur différentes courses en raison d'une condition de concurrence . Le comportement d'un algorithme probabiliste dépend d'un générateur de nombres aléatoires. Un algorithme qui résout un problème en temps polynomial non déterministe peut s'exécuter en temps polynomial ou en temps exponentiel selon les choix qu'il fait lors de l'exécution.
Les algorithmes randomisés et les algorithmes probabilistes sont-ils le même concept?
Si oui, les algorithmes randomisés ne sont-ils qu'une sorte d'algorithmes non déterministes?
Réponses:
Les algorithmes non déterministes sont très différents des algorithmes probabilistes.
Les algorithmes probabilistes sont ceux qui utilisent des lancers de pièces et fonctionnent "la plupart du temps". Par exemple, les variantes aléatoires de tri rapide fonctionnent dans le temps dans l'attente (et avec une probabilité élevée), mais si vous n'avez pas de chance, cela pourrait prendre jusqu'à Θ ( n 2 ) . Les algorithmes probabilistes sont pratiques et sont utilisés par exemple par votre ordinateur lors de la génération de clés RSA (pour tester que les deux facteurs de votre clé secrète sont premiers). Un algorithme probabiliste qui n'utilise pas de lancer de pièces est parfois appelé "déterministe".Θ ( n logn ) Θ ( n2)
Les algorithmes non déterministes sont ceux qui "ont besoin d'un indice" mais sont toujours corrects: ils ne peuvent pas être trompés en leur donnant un mauvais indice. A titre d'exemple, voici un algorithme non déterministe qui factorise un entier : devinez une factorisation de nn n , et vérifiez que tous les facteurs sont premiers (il existe un algorithme déterministe "rapide en théorie" pour le faire). Cet algorithme est très rapide et rejette les faux indices. La plupart des gens pensent que les algorithmes randomisés ne peuvent pas factoriser les entiers aussi rapidement. De toute évidence, ce modèle de calcul n'est pas réaliste.
Pourquoi nous soucions-nous des algorithmes non déterministes? Il existe une classe de problèmes, connue sous le nom de NP, qui consiste en des problèmes de décision qui ont des algorithmes non déterministes efficaces. La plupart des gens pensent que les problèmes les plus difficiles de cette classe, les problèmes dits NP-complets, n'ont pas d'algorithmes déterministes (ou même aléatoires) efficaces; c'est ce que l'on appelle la question P vs NP. Étant donné que de nombreux problèmes naturels sont NP-complets, il est intéressant de savoir s'ils ne sont pas résolus de manière efficace dans le pire des cas (dans la pratique, souvent les cas qui se présentent dans la pratique sont en fait résolus dans un délai raisonnable).
la source
Un algorithme spécifie une méthode pour passer d'une entrée donnée à une sortie souhaitée qui a une certaine relation avec l'entrée. Nous disons que cet algorithme est déterministe si à tout moment, il est spécifié exactement et sans ambiguïté quelle est la prochaine étape de l'algorithme qui doit être effectuée dans le cadre de cette méthode, potentiellement dépendante de l'entrée ou des données partielles calculées jusqu'à présent, mais toujours unique.
Le non-déterminisme signifie qu'une partie de l'algorithme est laissée sous ou même non spécifiée. Par exemple, "int i = un nombre pair entre 0 et n" est sous-spécifié. Cela signifie qu'aucun comportement unique n'est spécifié à ce stade.
Pour que cette distinction soit utile, vous avez besoin du concept (habituel) de «correction» pour les algorithmes (déterministes), qui est officieusement que «l'algorithme calcule toujours ce que je veux qu'il calcule». Il devient alors intéressant de réfléchir à ce que la correction signifierait pour les algorithmes non déterministes, qui doivent prendre en compte les choix possibles dans des instructions sous-spécifiées.
Il existe deux façons de définir l'exactitude du non-déterminisme. La première est plutôt simple et moins intéressante, pour laquelle la justesse signifie "l'algorithme calcule toujours ce que je veux qu'il calcule, pour toutes les séquences de choix que je suis autorisé à faire". Cela se produit parfois si un auteur d'un peu de pseudocode est trop paresseux pour choisir un nombre et dit "choisir n'importe quel nombre pair entre 0 et n", alors que "choisir 0" aurait rendu l'algorithme déterministe. Essentiellement, en remplaçant tout non-déterminisme par le résultat d'un choix, vous pouvez rendre l'algorithme déterministe.
C'est aussi le «non-déterminisme» dont parle votre deuxième paragraphe. C'est aussi le non-déterminisme des algorithmes parallèles: dans ces algorithmes, vous n'êtes pas sûr de ce à quoi ressemble exactement l'exécution, mais vous savez que cela fonctionnera toujours, quoi qu'il arrive exactement (sinon votre algorithme parallèle serait incorrect).
La définition intéressante de la correction pour l'algorithme non déterministe est "l'algorithme calcule toujours ce que je veux qu'il calcule, pour une séquence de choix que je suis autorisé à faire". Cela signifie qu'il peut y avoir des choix qui sont faux, dans le sens où ils font que l'algorithme produit la mauvaise réponse ou même va dans une boucle infinie. Dans l'exemple "choisissez n'importe quel nombre pair entre 0 et n", peut-être 4 et 16 sont de bons choix, mais tous les autres nombres sont faux, et ces nombres peuvent varier selon l'entrée, les résultats partiels et les choix effectués jusqu'à présent.
Lorsqu'il est utilisé en informatique, le non-déterminisme se limite généralement à choisir de façon non déterministe soit un 0 soit un 1. Cependant, si vous choisissez de nombreux bits non déterministes, vous pouvez générer de longs nombres non déterministes ou d'autres objets, ainsi que faire des choix non déterministes, ce (si jamais) limite son applicabilité - si l'applicabilité est limitée, le non-déterminisme était trop puissant en premier lieu.
Le non-déterminisme est un outil qui est exactement aussi puissant qu'un algorithme déterministe basé sur un certificat, c'est-à-dire un algorithme qui vérifie une propriété donnée une instance et un certificat pour cette propriété. Vous pouvez simplement deviner de manière non déterministe le certificat pour une direction, et vous pouvez donner un certificat qui contient toutes les «bonnes» réponses pour les suppositions non déterministes de 0 et 1 de votre programme pour l'autre direction.
Si nous ajoutons du temps au mixage, les choses deviennent encore plus intéressantes. Le temps d'exécution d'un algorithme non déterministe est généralement considéré comme le minimum sur tous les choix (à droite). Cependant, d'autres choix peuvent entraîner une durée de fonctionnement considérablement pire (qui peut être asymptotiquement pire ou même arbitrairement pire que le minimum), ou même une boucle infinie. C'est pourquoi nous prenons le minimum: nous ne nous soucions pas de ces cas étranges.
Nous arrivons maintenant aux algorithmes randomisés. Les algorithmes aléatoires sont comme des algorithmes non déterministes, mais au lieu de «permettre» le choix entre 0 et 1 à certains points, ce choix est déterminé par un tirage aléatoire au moment où le choix doit être fait (qui peut différer d'une exécution à l'autre) , ou lorsque le même choix doit être refait ultérieurement lors de l'exécution de l'algorithme). Cela signifie que le résultat est 0 ou 1 avec une probabilité égale. L'exactitude devient maintenant "l'algorithme calcule presque toujours ce que je veux qu'il calcule" ou "l'algorithme calcule toujours ce que je veux qu'il calcule" (juste la version déterministe). Dans le second cas, le temps nécessaire à l'algorithme pour calculer sa réponse est généralement «presque toujours rapide», contrastant avec un «toujours rapide» déterministe.
la source
En bref: le non-déterminisme signifie avoir plusieurs choix, également valables, de continuer un calcul. La randomisation signifie utiliser une source externe de bits (aléatoires) pour guider le calcul.
Afin de comprendre le non-déterminisme, je vous suggère de regarder les automates finis (FA). Pour une FA déterministe (DFA), la fonction de transition est bien une fonction. Étant donné l'état actuel et le prochain symbole d'entrée, l'état suivant est défini de manière unique.
[ source ]
Le point clé ici est que l'acceptation est définie comme «accepter s'il y a un cycle d'acceptation» pour NFA. Ce critère d'existence peut être interprété comme «toujours bien deviner», même s'il n'y a pas de supposition réelle.
Notez qu'il n'y a aucune probabilité ici, nulle part. Si vous deviez traduire le non-déterminisme en langages de programmation, vous auriez des instructions qui peuvent provoquer des sauts vers différentes autres instructions avec le même état . Une telle chose n'existe pas, sauf peut-être dans les langages de programmation ésotériques conçus pour vous faire réfléchir.
La randomisation est assez différente. Si nous le décomposons, l'automate / programme n'a pas plusieurs choix pour poursuivre l'exécution. Une fois le ou les bits aléatoires dessinés, l'instruction suivante est définie de manière unique:
En termes d'automates finis, considérez ceci:
[ source ]
Une dernière remarque: on peut voir que le non-déterminisme est un concept purement théorique, il ne peut pas être mis en œuvre! Alors pourquoi l'utilisons-nous?
Il permet souvent des représentations plus petites. Vous savez peut-être qu'il existe des NFA pour lesquels le plus petit DFA est exponentiellement aussi grand¹. L'utilisation des plus petits n'est qu'une question de simplification de la conception des automates et des preuves techniques.
La traduction entre les modèles est souvent plus simple si la non-déterminisme est autorisé dans le modèle cible. Considérez, par exemple, la conversion d'expressions régulières en DFA: la manière habituelle (et simple) est de la traduire en NFA et de déterminer celle-ci. Je n'ai pas connaissance d'une construction directe.
Cela peut être une préoccupation académique, mais il est intéressant de noter que le non-déterminisme peut augmenter la puissance d'un appareil. Ce n'est pas le cas pour les automates finis et les machines de Turing, sans doute les appareils de modèles de machines les plus populaires, mais par exemple les automates déterministes à refoulement, les automates Büchi et les automates à arbre descendant peuvent accepter strictement moins de langues que leurs frères et sœurs non déterministes².
la source
Vous devez savoir qu'il existe deux définitions différentes du non-déterminisme qui sont lancées ici.
Comme wikipedia le définit, à peu près "pas de déterminisme", c'est-à-dire tout algorithme qui n'a pas toujours le même comportement sur les mêmes entrées. Les algorithmes randomisés sont un cas particulier des algorithmes "non déterministes", car ils correspondent à la définition que je viens de donner.
Les modèles de calcul non déterministes (comme les machines de turing non déterministes) sont des modèles théoriques de calcul. Ils peuvent avoir plusieurs chemins d'exécution possibles et ils "acceptent" si l'un de ces chemins accepte. Vous devez noter qu'ils ne sont pas réels. Il n'y a aucun moyen d'exécuter physiquement un algorithme qui n'est pas déterministe dans ce sens, bien que vous puissiez le simuler avec un algorithme aléatoire ou déterministe.
En CS, le non-déterminisme signifie généralement (2), donc la définition de Wikipedia que vous avez donnée (qui est (1)) est trompeuse. La plupart des réponses données jusqu'à présent expliquent (2), pas (1).
la source
Revisiter cela en raison de certaines recherches connexes que je fais, le désaccord entre moi-même et certains des autres qui ont répondu, peut être assimilé à une compréhension holistique dans laquelle nous avions tous raison. Mais l'OMI, la terminologie informatique adoptée «non-déterminisme borné» est un oxymore incorrect (ce que je voulais dire auparavant).
Leur point clé est de faire la distinction entre le non-déterminisme borné et non borné. [1]
Les machines de Turing non déterministes (alias «NTM») ont un non-déterminisme borné en ce que chaque transition d'état a un nombre limité de possibilités, c'est-à-dire que le nombre de programmes (alias «configurations») est fini. La bande reste illimitée, donc la preuve de résiliation reste indécidable. Mais pour toute entrée donnée qui s'arrête, la sortie est déterministe et limitée dans le temps, c'est-à-dire que pour toute entrée, le résultat est déterministe ou ne se termine pas. Les NTM exécutent également toutes les configurations possibles en parallèle, de sorte qu'ils s'exécutent exponentiellement plus rapidement que l'émulation des NTM sur les machines déterministes de Turing (alias «DTM»). [2]
Il n'y a vraiment pas de relation non déterministe entre les entrées et les résultats dans les MNT parce que le résultat est toujours le même pour n'importe quelle entrée ou état initial, ce qui est évident parce qu'ils peuvent être émulés par des MNT sans aléa supplémentaire. [2] Indécidable n'est pas l'antithèse du déterministe, car ne pas s'arrêter est aussi un résultat déterministe. Les machines déterministes ont toujours le même résultat pour une entrée donnée, même lorsque ce résultat ne doit pas s'arrêter. Le non-déterminisme localisé des NTM est dans chaque transition d'état de l'algorithme d'exécution. Il est a priori indécidable quel chemin de l'arborescence pourrait se terminer en fournissant l'état de sortie. Mais l'indécidabilité n'est pas du non-déterminisme. Ainsi, le terme «non-déterminisme borné» est destiné à décrire l'indétermination localisée au sein de la machine à états mais pas la relation des entrées aux résultats, d'où le concept de «délimité». Je pense toujours que le terme «non-déterminisme borné» est un oxymore et il aurait pu être décrit avec plus de précision comme une machine de Turing à «transition d'état parallélisée».
Alors que, pour toute entrée ou état initial donné, le non- déterminisme illimité (alias «indéterminisme») a un nombre illimité d'états possibles. Le non-déterminisme illimité implique non seulement le nombre de configurations possibles de programmes, mais également un état externe illimité qui ne fait pas partie de l’entrée ou de l’état initial, comme les retards illimités. Et ainsi les résultats peuvent varier lors d'exécutions répétées pour la même entrée ou condition initiale; il n'y a donc pas de relation déterministe entre les intrants et les résultats. [3]
Les algorithmes aléatoires et probabilistes utilisent un certain non-déterminisme, c'est-à-dire la sélection aléatoire de configurations possibles éventuellement limitées en nombre de configurations, mais ils n'exécutent pas toutes les configurations possibles comme le font les MNT. Ainsi, ils ne sont déterministes que si le caractère aléatoire est déterministe (par exemple PRNG) et si l'état initial de l'entropie pour le caractère aléatoire est considéré comme faisant partie de l'entrée.
[1] https://en.wikipedia.org/w/index.php?title=Unbounded_nondeterminism&oldid=710628370#Nondeterministic_automata
[2] https://en.wikipedia.org/w/index.php?title=Non-deterministic_Turing_machine&oldid=754212081#Equivalence_with_DTMs
[3] Hewitt, Meijer et Szyperski: The Actor Model (tout ce que vous vouliez savoir ...) . Sautez à 17:44 minutes.
la source
Outre toutes les réponses qui expliquent la différence, j'ai un exemple qui peut vous aider à obtenir la chose qu'ils veulent dire.
Considérons une pile ou face, vous obtenez soit un H ou T . Si la pièce est toss au hasard, il est très probable que de 1000 lancers de pièces, 500 serait H et il est tout à fait improbable que 999 d'entre eux serait H . Mais si le tirage au sort n'est pas déterministe, nous ne pouvons pas dire que l'obtention de 999 H serait hautement improbable.
la source
Les algorithmes randomisés (temps polynomial, résultat booléen) sont dans la classe de complexité de calcul RP, qui est un sous-ensemble de NP où résident des algorithmes non déterministes (temps polynomial, résultat booléen) et un sur-ensemble de P où déterministe (temps polynomial, résultat booléen) les algorithmes résident.
Le sous-ensemble de la complexité consiste à réduire les problèmes d'un ensemble à un autre ensemble. Ainsi, RP ⊆ NP exclut la possibilité d'algorithmes randomisés qui sont également non déterministes car, par définition, un sur-ensemble contient le sous-ensemble. Sous-ensemble signifie que chaque algorithme RP (ou n'importe quel algorithme RP-complet) peut être réduit à un algorithme NP (ou tout algorithme NP-complet). P est un sous-ensemble de RP car chaque problème dans P peut être réduit à un problème dans RP où la quantité d'entropie non contrôlée est de 0.
Tangentiellement, cela est analogue à la façon dont chaque problème en NC (calcul parallèle) peut être réduit à un problème en P en simulant le calcul parallèle en une réduction à un problème série en P mais il n'est pas encore prouvé que l'inverse soit vrai, c'est-à-dire que chaque problème dans P est réductible à un problème dans NC, ni prouvé faux, c'est-à-dire la preuve invraisemblable qu'un problème P-complet n'est pas réductible à un problème dans NC. Il peut être possible qu'il y ait des problèmes qui sont intrinsèquement sériels et ne peuvent pas être calculés en parallèle, mais prouver que prouver P ≠ NC semble peu plausible (pour des raisons trop tangentielles pour être discutées dans cette réponse).
Plus généralement (c'est-à-dire non limité aux types de résultats booléens), les algorithmes randomisés se distinguent des algorithmes déterministes en ce qu'une partie de l'entropie est d'origine externe . Les algorithmes randomisés se distinguent des algorithmes non déterministes car l'entropie est bornée , et il est donc prouvé que les algorithmes randomisés (et non non déterministes) se terminent toujours.
L'imprévisibilité des algorithmes non déterministes est due à l' incapacité d' énumérer toutes les permutations possibles de l'entropie d'entrée (ce qui entraîne une imprévisibilité de la terminaison). L'imprévisibilité d'un algorithme randomisé est due à l' incapacité de contrôlertoute l'entropie d'entrée (ce qui entraîne une imprévisibilité d'un résultat indéterminé, bien que le taux d'imprévisibilité puisse être prévu). Ni l'un ni l'autre de ceux-ci ne sont des déclarations sur l'imprévisibilité de la bonne réponse au problème, mais plutôt l'imprévisibilité se manifeste dans le canal latéral de terminaison et de résultat indéterminé respectivement. Il semble que de nombreux lecteurs confondent l'imprévisibilité dans un domaine avec l'imprévisibilité du résultat correct, ce qui est une confusion que je n'ai jamais écrite (consultez l'historique des modifications).
Il est essentiel de comprendre que le non-déterminisme est toujours (dans toute science ou usage du terme) l'incapacité à énumérer l'entropie universelle (c'est-à-dire sans limite). Alors que la randomisation fait référence à l'accès à une autre source d'entropie (dans des programmes entropiques autres que et donc non contrôlés par les variables d'entrée) qui peut ou non être illimitée.
J'ai ajouté le commentaire suivant ci-dessous la réponse actuellement la plus populaire à l'autre fil qui pose une question similaire.
Ajouter certains des meilleurs commentaires pour clarifier mon point de vue sur la seule distinction saillante entre randomisé et non déterministe.
Il est vraiment assez élégant et facile de voir la distinction, une fois que vous arrêtez tous de l'embrouiller en essayant de la décrire d'un point de vue opérationnel plutôt que du point de vue de l'entropie saillante.
.
.
.
Les dictionnaires sont des outils. Apprenez à les utiliser.
Ainsi, la randomisation nécessite seulement qu'une partie de l'entropie d'entrée soit équiprobable, ce qui est donc conforme à ma définition qu'une partie de l'entropie d'entrée ne soit pas contrôlée par l'appelant de la fonction. Notez que la randomisation ne nécessite pas que l'entropie d'entrée soit indécidable par rapport à la terminaison.
Cela nous dit donc que les algorithmes déterministes doivent être complètement déterminés par l'état d'entrée de la fonction, c'est-à-dire que nous devons être en mesure de prouver que la fonction se terminera (ou ne se terminera pas) et que cela ne peut pas être indécidable. Malgré la tentative confuse de Wikipédia de décrire non déterministe, la seule antithèse déterministe telle que définie ci-dessus par Wikipedia, ce sont les algorithmes dont l'état d'entrée (entropie) est mal défini. Et la seule façon dont l'état d'entrée peut être mal défini est lorsqu'il est illimité (il ne peut donc pas être pré-analysé de façon déterministe). C'est précisément ce qui distingue une machine de Turing non déterministe (et de nombreux programmes du monde réel qui sont écrits dans des langages complets de Turing courants tels que C, Java, Javascript, ML, etc.) des MT déterministes et des langages de programmation tels que HTML, les formules de feuille de calcul, Coq, Epigram,
Wikipédia et d'autres tentent de confondre la randomisation avec le non-déterminisme, mais quel est l'intérêt d'avoir les deux concepts si vous ne les distinguez pas avec éloquence?
Il est clair que le déterminisme concerne la capacité de déterminer. Il est clair que la randomisation consiste à rendre une partie de l'entropie équiprobable.
L'inclusion d'entropie aléatoire dans l'état d'un algorithme ne le rend pas nécessairement indéterminable. Par exemple, un PRNG peut avoir la distribution statistique équiprobable requise, mais aussi être entièrement déterministe.
Les concepts orthogonaux contradictoires sont ce que les personnes à faible QI. J'attends mieux que ça de cette communauté!
la source