Algorithme de Las Vegas

En informatique, un algorithme de Las Vegas est un type d'algorithme probabiliste qui donne toujours un résultat correct ; son caractère aléatoire lui donne un avantage net sur le temps d'exécution, dont on étudie la distribution de probabilité[1]. Comme le suggère David Harel dans son livre d'algorithmique[2], ainsi que Motvani et Raghavan[1], le tri rapide randomisé[3] est un exemple paradigmatique d'algorithme de Las Vegas.

Les exécutions d'un algorithme de Las Vegas donnent toujours un résultat correct ; c'est le temps d'exécution qui est aléatoire.

Quand le problème que l'algorithme résout a plusieurs solutions correctes, sur une même donnée, comme c'est le cas pour le tri d'un tableau qui possède des clés équivalentes, alors l'algorithme de Las Vegas peut retourner l'une ou l'autre de ces solutions, et il le fait de façon non prévisible.

Exemple du tri rapide randomisé

Article détaillé : Tri rapide.

Dans cette section, nous expliquons l'exemple du tri rapide randomisé qui est un algorithme de Las Vegas.

Description de l'algorithme

L'algorithme de tri rapide aléatoire, ou quicksort randomisé consiste à trier un tableau d'éléments en utilisant diviser pour régner :

  1. choisir aléatoirement un pivot aléatoirement (i.e. un élément du tableau) ;
  2. partitionner le tableau en plaçant les éléments strictement plus petits que le pivot à gauche (sous-tableau A), puis le pivot, puis les éléments plus grands que le pivot (sous-tableau B) ;
  3. trier récursivement les sous-tableaux A et B.

Le résultat est un tableau constitué du tri du tableau A, suivi du pivot, suivi du tri du tableau B.

Analyse du temps d'exécution

On effectue l'algorithme de tri rapide randomisé sur un exemple. Les pivots successifs sont surlignés en gris.
On effectue l'algorithme de tri rapide randomisé sur le même exemple en surlignant en gris les pivots successifs. On obtient un autre ordre de tri

L'aléatoire se situe au niveau du choix des pivots. Le résultat est un tableau trié, quels que que soient les choix de pivots, i.e. le résultat est toujours correct. En revanche, le temps d'exécution dépend de ces choix. C'est, en fait, un tri souvent utilisé sur des tableaux de grandes tailles parce que, de manière empirique, il donne de bons résultats en complexité temporelle[4]. Dans les figures à droite, l'algorithme est exécuté deux fois sur le même échantillon ; on voit que l'on obtient un tableau trié dans les deux cas, alors que les pivots sont choisis aléatoirement.

  • Si l'algorithme choisit toujours le pivot le plus petit (ou le plus grand)[5], alors le partitionnement est déséquilibré. Le temps d'exécution vérifie l'équation de récurrence et on a .
  • Si l'algorithme pouvait choisir toujours le pivot médian, c'est-à-dire, au milieu du tableau (par une sorte d'oracle), la relation de récurrence serait et on a .

Pour simuler l'oracle, on prend un choix aléatoire du pivot en espérant qu'il nous donnera souvent un pivot situé pas très loin de la médiane.

Pseudo-code

La version Las Vegas du tri rapide choisit aléatoirement le pivot dans la liste à trier, tout en gardant le reste de l'agorithme inchangé. En voici le code en langage Python :

 1 def separation(liste,pivot,i):
 2     """Entrée : une liste, un pivot et la place du pivot dans la liste
 3     Sortie : une liste listePetit contenant les éléments de liste strictement plus petits que le pivot et une liste listeGrand contentant, à l'exception du pivot, les éléments plus grands que le pivot"""
 4     listePetit=[]
 5     listeGrand=[]
 6     for k in range(len(liste)):
 7         if k<>i: """Cela permet d'exclure le pivot"""
 8             if liste[k] >= pivot :
 9                 listeGrand.append(liste[k])
10             else :
11                 listePetit.append(liste[k])
12     return listePetit,listeGrand
13 
14 def quicksort(liste):
15     """Entrée : une liste
16        Sortie : une liste avec les mêmes éléments triés par l'algorithme de tri rapide randomisé"""
17     n=len(liste)
18     if n==1:
19         return liste """Une liste à 1 élément est toujours triée"""
20     else:
21         i=randint(0,n-1) """Choix du pivot AU HASARD dans la liste"""
22         pivot=liste[i]
23         liste1,liste2=separation(liste,pivot,i) """On sépare en 2 listes de taille strictement plus petite que n car le pivot n'appartient à aucune des deux listes"""
24         return quicksort(liste1)+[pivot]+quicksort(liste2) """Le résultat est la concaténation des deux sous-listes auparavant triés, avec le pivot entre elles"""



Existence d'une stratégie optimale pour les algorithmes de Las Vegas

Étant donné un algorithme de Las Vegas A, Luby, Sinclair et Zuckerman ont étudié comment minimiser l'espérance du temps requis pour obtenir la réponse de A. Pour cela ils adoptent une stratégie[6] qui indique, quand relancer l'algorithme[7]. On note TA(x) le temps d'une exécution de A sur l'entrée x ; ce temps n'est pas toujours le même, c'est une variable aléatoire.

Etant donné A et une entrée x, les stratégies, telles que Luby et al. les considèrent, ont la forme suivante :

  • On se fixe une entier t1 et on effectue t1 étapes de l'algorithme A sur l'entrée x. S'il s'est arrêté, alors la stratégie se termine.
  • Sinon, on se fixe un autre entier t2 et on effectue t2 étapes de l'algorithme A sur l'entrée x. S'il s'est arrêté, alors la stratégie se termine.
  • Sinon, etc.

Ainsi, une stratégie S a une deuxième composante, à savoir une suite infinie d'entiers, de sorte que nous pouvons écrire une stratégie sous la forme S(A, t1, t2, ...). Une stratégie est optimale si elle minimise l'espérance du temps de son exécution sur x pour un A fixé. Luby et al. donne une stratégie optimale de la forme S(A, t*, t*, ...) où t* dépend de la distribution de probabilité de TA(x). Le calcul de t* demande à connaître cette distribution. On note l'espérance du temps d'exécution de la stratégie optimale.

Cependant, en général, on ne connaît pas la distribution de probabilité de TA(x). C'est pourquoi Luby et al. montre l'existence d'une stratégie dite universelle dont l'espérance du temps d'exécution n'est pas trop éloignée de l'espérance de la stratégie optimale, à savoir que son espérance est . Cette stratégie est S(A, 1, 1, 2, 1, 1, 2, 4, 1, 1, 2, 1, 1, 2, 4, 8, 1, ...) et ne requiert, comme on le voit, aucune connaissance sur la distribution de TA(x).

Algorithme de Las Vegas

Un algorithme de Las Vegas est un algorithme probabiliste (utilisant le hasard) qui fournit toujours un résultat juste. Ainsi, l'algorithme renverra toujours une solution au problème posé mais sa complexité temporelle n'est pas prévisible. Par des bons choix lors des points clés de l'exécution de l'algorithme, on doit pouvoir montrer que cette complexité est faible.

Ces algorithmes ont été ainsi nommés par Laszlo Babai en 1979 par métonymie avec les algorithmes de Monte-Carlo. On nommera par la suite une troisième famille d'algorithmes probabilistes les algorithmes d'Atlantic City, en référence aux nombreux jeux d'argent se déroulant dans ces trois villes.

Algorithmes de Monte-Carlo

Les algorithmes de Monte-Carlo sont des algorithmes probabilistes qui utilisent le hasard pour renvoyer la meilleure réponse possible en un temps fixé. La complexité temporelle est donc fixé pour ces algorithmes. Cependant, la justesse du résultat est soumise à une incertitude.

Algorithmes d'Atlantic City

Les algorithmes d'Atlantic City (en) essayent de tirer le meilleur des deux méthodes précédentes. Ce type d'algorithme renverra presque toujours un résultat juste en un temps presque toujours fixé. L'incertitude se situe donc sur la complexité temporelle et sur la justesse du résultat.

Conclusion

Exprimé autrement :

  • un algorithme de Las Vegas s'arrête quand il a trouvé une réponse exacte ;
  • un algorithme de Monte-Carlo répond dans un temps prévisible et court sans pour autant garantir une réponse exacte (voir tests de primalité probabilistes) ;
  • un algorithme d'Atlantic City (en) est relativement rapide et donne une réponse exacte avec une bonne garantie de l'exactitude.

Notes et références

  • Algorithms and Theory of Computation Handbook, CRC Press LLC, 1999, "Las Vegas algorithm", in Dictionary of Algorithms and Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 17 July 2006. (accessed May 09, 2009) Available from:
  • (en) Rajeev Motwani et Prabhakar Raghavan, Randomized Algorithms, Cambridge ; New York, Cambridge University Press (réimpr. 1997, 2000) (1re éd. 1995), 476 p. (ISBN 9780521474658), chap. 1.2 (« Introduction: Las Vegas and Monte Carlo »), p. 9-10
  • https://brilliant.org/wiki/randomized-algorithms-overview/
  1. (en) Rajeev Motwani et Prabhakar Raghavan, Randomized Algorithms, Cambridge University Press, (ISBN 9780521474658, lire en ligne), section 1.2, p. 9
  2. David Harel, Computers Ltd: What They Really Can't Do, Oxford University Press, (lire en ligne), p. 130
  3. (en) Robert Sedgewick, « Implementing Quicksort Programs », Commun. ACM, vol. 21, no 10, , p. 847-857 (DOI 10.1145/359619.359631)
  4. (en) S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani, Algorithms, , 318 p., p. 62; The Unix Sort Command
  5. (en) Thomas H. Cormen, Charles E. Leiserson et Ronald L. Rivest, Introduction à l'algorithmique, Paris, Dunod, , xxix+1146 p. (ISBN 978-2100-03922-7, SUDOC 068254024), chap. 7 (« Tri rapide »)
  6. Une « stratégie » est une succession de choix d'exécution, qui prend un algorithme (ici l'algorithme A), comme l'une de ses composantes.
  7. (en) Michael Luby, Alistair Sinclair et David Zuckerman, « Optimal Speedup of Las Vegas Algortihms », Information Processing Letters Volume 47, Issue 4, , Pages 173-180 (lire en ligne)

Voir aussi

  • Hasard
  • Générateur de nombres pseudo-aléatoires
  • Portail de l'informatique théorique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Sharealike. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.