Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 1
EXERCICES SUR LES ALGORITHMES PROBABILISTES
Chapitre 10
Exercice 1
Qu’est-ce qui distingue un algorithme de Sherwood de l’algorithme déterministe dont il est issu ?
Solution
L’algorithme déterministe est efficace en moyenne mais possède un mauvais comportement en
pire cas.
L’objectif d’un algorithme de Sherwood est d’éliminer l’écart entre bons et mauvais exem-
plaires. L’algorithme de Sherwood peut prendre à l’occasion plus de temps sur un exemplaire x; cela
ne dépend pas alors de x mais des choix probabilistes faits par l’algorithme.
Exercice 2 (problème 8.2.2)
Un problème est dit bien caractérisé s’il est toujours possible de vérifier efficacement
l’exactitude d’une solution présumée d’un exemplaire. Montrez comment obtenir un algorithme de
Las Vegas pour résoudre un problème bien caractérisé pour lequel on dispose déjà d’un algorithme de
Monte-Carlo. Inversement, montrez comment obtenir un algorithme de Monte-Carlo pour résoudre
un problème quelconque pour lequel on dispose déjà d’un algorithme de Las Vegas.
Solution
Si on dispose d’un algorithme de Monte-Carlo, on peut l’utiliser pour générer une solution,
puis vérifier l’exactitude de la solution (c’est possible puisque le problème est bien caractérisé) et la
donner en réponse si et seulement si elle est exacte. On obtient ainsi un algorithme de Las Vegas.
Inversement, si on dispose d’un algorithme de Las Vegas, on peut l’utiliser et s’il fournit une
réponse, on retourne cette réponse, sinon on retourne n’importe quoi comme réponse. On obtient
ainsi un algorithme de Monte-Carlo.
Exercice 3 (problème 8.3.4)
Quelle valeur est estimée si, dans l’algorithme du jet des dards sur une cible carrée, l’on fait
«x Uniforme (0, 1); y x» au lieu de «x Uniforme (0, 1); y Uniforme (0, 1)» ?
Solution
On choisit ainsi un point au hasard sur la diagonale du carré. La proportion des points de cette
diagonale qui se trouvent à l’intérieur du cercle est de 1
2 = 2
2. Dans ce cas, 4k
n (la valeur retournée)
est une estimation de 22, et non une estimation de π.
2 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche
* Exercice 4 (théorème 10.6.2 et problème 10.16)
On dispose d’un entier impair n > 4 , et on veut savoir si n est premier ou non. On peut écrire
n–1 = 2st, où t est impair. Pour chaque entier a tel que 2 a n–2 , on dit que n est fortement
pseudo-premier (FPP) en base a s’il existe un entier i tel que 0 i < s et
a2it mod n = n–1,
ou si at mod n = 1. Un théorème nous apprend que, si n est premier, alors il est FPP à n’importe
quelle base a, tandis que si n est composé, alors il ne peut être FPP à plus de n–9
4 bases différentes.
a) Donnez un algorithme efficace pour tester si n est FPP en base a.
b) Donnez un algorithme probabiliste qui utilise l’algorithme précédent pour tester si n est premier, et
qui ne se trompe qu’avec une probabilité inférieure à 4–k. De quel type d’algorithme s’agit-il ? Si
l’algorithme retourne “n est premier”, quelle est la probabilité que n soit effectivement premier ?
Solution (non vérifiée)
a) On utilise la technique diviser-pour-régner pour calculer successivement
at MOD n, a2t MOD n, ..., a2it MOD n.
FONCTION FPP (n,a) : BOOLÉEN
{retourne VRAI si n est FPP en base a et FAUX sinon}
r a ; x 1 ; s 1 ; t n–1. {Assert: n–1 = 2s–1 t}
TANT QUE t est pair FAIRE s s + 1 ; t t DIV 2. {Assert: n–1 = 2s–1 t ET t impair}
TANT QUE t > 0 FAIRE
SI t est impair ALORS x x * r MOD n.
r r * r MOD n.
t t DIV 2.
SI (x = 1 OU x = n – 1) ALORS RETOURNER VRAI.
POUR i 1 JUSQUÀ s FAIRE
x x * x MOD n.
SI x = n – 1 ALORS RETOURNER VRAI.
RETOURNER FAUX.
FIN FPP.
b) FONCTION Premier (n,k) : BOOLÉEN
POUR i 1 JUSQUÀ k FAIRE
a Uniforme (2 .. n–2).
SI NON FPP (n, a) ALORS RETOURNER FAUX.
RETOURNER VRAI.
FIN Premier.
Il s’agit d’un algorithme de Monte-Carlo. Si n est premier, il retourne toujours VRAI, tandis que
si n n’est pas premier, il retourne VRAI avec une probabilité inférieure à 4–k. S’il retourne VRAI, la
probabilité que n soit effectivement premier dépend de la probabilité a priori que n soit premier. Soit p
cette probabilité. Alors
P(n premier | VRAI)= P(VRAI | n premier) P(n premier)
P(VRAI | n premier) P(n premier) + P(VRAI | n composé) P(n composé)
p
p + 4–k (1–p).
Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 3
Exercice 5 (problème 10.11 ou 8.3.9)
Une salle contient 25 personnes choisies aléatoirement. Seriez-vous prêt à parier qu’au moins
deux d’entre elles ont le même anniversaire ?
Exercice 6 (problème 8.4.16)
Que pensez-vous de la solution au problème des collisions dans une table de hashing qui
consisterait à “ignorer” le problème ? Si l’on dispose a priori d’une borne supérieure sur le nombre
d’identificateurs n, suffit-il de choisir la taille N de la table un peu plus grande que n pour que la
probabilité de collision soit négligeable ? (indice: résolvez d’abord l’exercice 5)
Solution
Même si N est beaucoup plus grand que n, la probabilité d’une collision n’est pas du tout
négligeable. Dans le meilleur des cas (si tout est uniforme), la probabilité qu’il n’y ait aucune
collision est
1– N!
Nn(N–n)! e n2/2N
Par exemple, pour n = 1000 et N = 5000 , cette probabilité est inférieure à 3,73 × 10–44.
Exercice 7 (problème 8.4.17)
Montrez que n requêtes à la table des symboles peuvent prendre un temps total dans (n2) en
pire cas.
Solution
Il est possible (pire cas) que la fonction de hachage envoie les n identificateurs à la même
adresse. Dans ce cas, si l’on fait une requête par identificateur, le temps requis sera dans
(
i=1
n i) = (n2)
Exercice 8 (adaptation de la section 8.4.3, ou du problème 10.36)
Vous disposez d’une liste contenant N clefs distinctes en ordre croissant. Cette liste est
représentée sous la forme de deux tableaux Next[1:N] et Val[1:N], ainsi que d’une tête de liste Tete.
Les clefs sont dans le tableau Val. La plus petite clef est dans Val[Tete]. Si Val[I] n’est pas la plus
grande clef de la liste, Next[I] donne l’indice dans Val de la clef suivante. Next[I] = 0 indique la fin
de la liste. Le rang d’une clef est le nombre de clefs inférieures ou égales à celle-ci dans la liste. Voici
par exemple une façon de représenter la liste 1, 2, 3, 5, 8, 13, 21 :
I 1234567
Val[I] 2 3 13 1 5 21 8
Next[I] 2 5 61703
Dans cet exemple, Tete = 4 et le rang de 8 est 5.
Il s’agit d’analyser et de développer certains algorithmes pour fouiller dans ce type de liste. Afin
de simplifier les algorithmes et leur analyse, nous supposerons que la clef demandée se trouve
4 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche
toujours dans la liste. Étant donné une clef X, ces algorithmes doivent retourner un indice I entre 1 et
N tel que Val[I] = X. Notre but est de minimiser le nombre d’accès au tableau Val. L’efficacité sera
donnée en fonction du nombre N de clefs dans la liste et du rang K de la clef cherchée.
Si A est un algorithme déterministe (resp. probabiliste), TA (N, K) dénote le nombre exact
(resp. l’espérance mathématique du nombre) d’accès au tableau Val que fait l’algorithme A pour
rechercher la clef de rang K dans une liste de N clefs. De même, PA (N) dénote le pire cas de l’algo-
rithme A, c’est-à-dire la plus grande valeur possible de TA (N, K), et MA(N) le nombre moyen
d’accès faits par A pour rechercher une clef choisie aléatoirement avec distribution uniforme parmi les
N clefs de la liste. Nous avons donc
PA (N) = Max {TA (N, K) | 1 K N}
et
MA (N) = 1
N
K=1
N TA (N, K).
L’algorithme ci-dessous sera utile par la suite. Il sert à trouver une clef X à partir d’une position
I dans la liste, en autant que X Val[I] et que X se trouve effectivement dans la liste.
FONCTION Util (X, I): position.
TANTQUE X > Val[I] FAIRE I Next[I]
RETOURNER I .
FIN Util.
i) Un algorithme déterministe évident pour résoudre ce problème est le suivant (Val, Next et Tete
sont supposés globaux):
FONCTION A(X): position.
RETOURNER Util (X, Tete).
FIN A.
Déterminez TA(N, K) pour tout entier N et pour tout K (1, N). Déterminez PA(N) et MA(N)
pour tout entier N.
ii) Voici un premier algorithme probabiliste:
FONCTION B(X): position.
I Uniforme (1, N)
Y Val[I]
SI X < Y ALORS RETOURNER Util (X, Tete)
SINON SI X > Y ALORS RETOURNER Util (X, Next[I])
SINON RETOURNER I.
Fin B.
Déterminez TB (N, K) pour tout entier N et pour tout K entre 1 et N. Déterminez PB (N) et
MB(N) pour tout entier N . En fonction de N, quelle(s) valeur(s) de K maximise(nt) TB (N, K) ?
iii) Esquissez le meilleur algorithme probabiliste auquel vous puissiez penser. En particulier, votre
algorithme doit être préférable à celui qui est donné en (ii) si la clef recherchée est la plus grande de la
liste. Une analyse mathématique rigoureuse n’est pas demandée, mais appuyez vos idées sur des
arguments intuitifs. Optionnellement, estimez de votre mieux l’efficacité de votre algorithme.
Solution
i) Le nombre d’accès au tableau Val pour atteindre la clé de rang K (1, N) est évidemment
TA (N, K) = K.
Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 5
Le pire cas s’obtient pour le dernier élément du tableau, soit:
PA (N, K) = Max {K | 1 K N} = N
et le cas moyen par: MA (N) = 1
N
K=1
N K = 1
N N (N+1)
2 = N+1
2.
ii) Le nombre d’accès au tableau Val pour atteindre la clé de rang K (1, N) est
TB (N, K) =
1 + K si X < Val[I] (cas <)
1 + K – rang (Val[I]) si X > Val[I] (cas >)
1 si X = Val[I] (cas =)
où le 1 dans chaque cas correspond à l’accès aléatoire initial à la valeur Y. L’espérance mathématique
de ce nombre se calcule en tenant compte des deux faits que:
d’une part, la clé cherchée X est équiprobable parmi toutes les valeurs de Val (ou, ce qui revient
au même, le rang de cette clé est K avec la probabilité uniforme 1/N);
d’autre part, le tirage aléatoire de l’indice I fournit chacun des N indices possibles avec la
probabilité uniforme 1/N.
Avant de calculer TB (N, K) quels que soient K et N, tabulons ces valeurs pour une valeur
particulière de N, par exemple N = 7:
Rang de la clé cherchée K = 1234567
11234567
22123456
32312345
I = Uniforme (1, N) 42341234
52345123
62345612
72345671
Somme pour chaque K 13 18 22 25 27 28 28
Moyenne pour chaque K 1,86 2,57 3,14 3,57 3,86 4,00 4,00
La dernière ligne s’obtient en tenant compte que les tirages aléatoires de I sont équiprobables.
Cette table est facilement généralisable dans le cas général. La diagonale vaut 1 (cas merveilleux
où le tirage aléatoire de I tombe immédiatement sur la clé cherchée). Pour un tirage aléatoire I donné,
les valeurs successives de TB sont les entiers successifs à partir de 1 à droite de la diagonale (donc
pour K I), ce qui correspond à l’appel à Util (X, Next[I]), tandis que les valeurs successives de TB
sont les entiers successifs à partir de 2 à gauche de la diagonale (donc pour K < I), ce qui correspond
à l’appel à Util (X, Tete) (valeurs en italiques dans le tableau–exemple ci-dessus).
Étudions ce tableau, colonne par colonne.
En ce qui concerne sa partie inférieure (éléments en italiques), les colonnes successives sont
formées de: N–1 fois la valeur 2, N–2 fois la valeur 3, ..., 1 fois la valeur N, et la dernière colonne
est vide. Cela donne une somme pour la partie inférieure:
Sinf =
K=1
N–1
(N–K)(K+1) =
i=2
N (N+1–i) i = [
i=1
N (N+1–i) i] – N
(le passage de la première expression à la seconde s’obtient en posant i = K+1, soit K = i–1).
1 / 11 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !