Algorithmes déterministes et probabilistes
Un algorithme déterministe est un algorithme qui, pour une entrée donnée, exécutera une suite d'instructions fixe : il fournit donc toujours le même résultat pour cette entrée, en un temps prédictible.
Un algorithme probabiliste utilise des choix aléatoires dans son processus, ce qui peut aboutir à des résultats différents et/ou à des durées d'exécution variables, pour une même entrée. On distingue deux grandes catégories d'algorithmes probabilistes : les algorithmes de Monte Carlo et les algorithmes de Las Vegas.
Algorithmes de Monte Carlo
Les algorithmes de Monte Carlo fournissent une solution rapidement, mais sans garantie de précision. Leur probabilité de trouver une solution est élevée.
Par exemple, on peut utiliser un algorithme de Monte Carlo pour calculer une approximation du nombre pi. Pour cela, on doit :
- simuler des points aléatoires dans un carré de côté 2 centré à l'origine ;
- compter combien tombent à l'intérieur d'un quart de cercle de rayon 1 inscrit dans ce carré.
La probabilité qu'un point aléatoire se trouve à l'intérieur du quart de cercle est proportionnelle à la surface du quart de cercle par rapport au carré, et correspond à $\pi / 4$.
Avec cet algorithme, la durée d'exécution sera connue à l'avance, car elle dépend du nombre de points aléatoires générés. La précision sera plus ou moins bonne, et sera aussi liée au nombre de points placés.
Algorithmes de Las Vegas
Les algorithmes de Las Vegas garantissent un résultat correct, mais leur durée d'exécution est variable. Ces algorithmes arrêtent leurs calculs lorsqu'une solution est trouvée.
Par exemple, pour construire un nombre premier de grande taille (utile en cryptographie), on peut générer un nombre aléatoire et tester sa primalité jusqu'à en trouver un qui soit premier. Cette méthode, bien qu'aléatoire, finit toujours par donner un résultat exact : un nombre premier. Sa durée d'exécution n'est par contre par connu à l'avance.