Algorithme de Las VegasAlgorithme 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.
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 de meilleures performances temporelles en moyenne[2]. Comme le suggère David Harel dans son livre d'algorithmique[3], ainsi que Motvani et Raghavan[2], le tri rapide randomisé[4] est un exemple paradigmatique d'algorithme de Las Vegas. Quand le problème que l'algorithme résout possède plusieurs solutions, sur une même donnée, comme c'est le cas pour le tri d'un tableau qui contient des clés équivalentes, 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éDans cette section, nous expliquons l'exemple du tri rapide randomisé qui est un algorithme de Las Vegas. Description de l'algorithmeL'algorithme de tri rapide aléatoire, ou quicksort randomisé consiste à trier un tableau d'éléments en utilisant diviser pour régner :
Le résultat est un tableau constitué d'un tri du tableau A, suivi du pivot, suivi d'un tri du tableau B. Analyse du temps d'exécution![]() ![]() L'aléatoire se situe au niveau du choix des pivots. Le résultat est un tableau trié, quels 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[5]. 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.
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. Proposition d’implémentationLa version Las Vegas du tri rapide choisit aléatoirement le pivot dans la liste à trier, tout en gardant le reste de l'algorithme inchangé. En voici le code en langage Python : # Import des modules nécessaires
from random import * # Outils et fonctions d'aléatoires
# Fonction de séparation de listes selon le pivot
def separation(liste, pivot, n):
"""
Entrée: une liste, un pivot et la place du pivot dans la liste
Sortie: deux listes
- la première contenant les éléments plus petits que le pivot
- la seconde contenant les éléments plus grands ou égal au pivot
"""
# Les listes à remplir
listePetit = []
listeGrand = []
# Traitement liste à séparer
for (i, x) in enumerate(liste):
# Exclusion du pivot
if i == n: continue
# Séparation
if x >= pivot: listeGrand.append(x)
else: listePetit.append(x)
# for
# On renvoie le tuple contenant les deux listes
return (listePetit, listeGrand)
# separation()
# Fonction tri rapide
def quicksort(liste):
"""
Entrée: une liste
Sortie: la liste triée
"""
# Longueur de la liste
n = len(liste)
# Une liste vide ou à un élément est toujours triée
if n <= 1: return liste
# Choix du pivot au hasard dans la liste
i = randint(0, n - 1)
pivot = liste[i]
# Séparation de la liste en deux sur le pivot
(petit, grand) = separation(liste, pivot, i)
# Appel récursif sur chacune des listes et regroupement des résultats
return quicksort(petit) + [pivot] + quicksort(grand)
# quicksort()
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[7] qui indique, quand relancer l'algorithme[8]. 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 :
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). Définition et comparaison avec les algorithmes de Monte Carlo et d'Atlantic CityAlgorithme de Las VegasUn 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. Lien avec les algorithmes de Monte Carlo et d'Atlantic CityAlgorithmes de Monte-CarloLes 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 CityLes algorithmes d'Atlantic City 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. ConclusionExprimé autrement :
Notes et références
Voir aussiInformation related to Algorithme de Las Vegas |