Exercices Ch10.mcw
Transcription
Exercices Ch10.mcw
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 exemplaires. 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 1 √ 2 4k diagonale qui se trouvent à l’intérieur du cercle est de = 2 . Dans ce cas, n (la valeur retournée) 2 √ est une estimation de 2√ 2, et non une estimation de π. Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 1 * 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 i a2 t 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 n–9 quelle base a, tandis que si n est composé, alors il ne peut être FPP à plus de 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 i at MOD n, a2t MOD n, ..., a2 t MOD n. FONCTION FPP (n,a) : BOOLÉEN {retourne VRAI si n est FPP en base a et FAUX sinon} {Assert: n–1 = 2s–1 t} r ← a ; x ← 1 ; s ← 1 ; t ← n–1. 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( VRAI | n premier) P(n premier) P(n premier | VRAI) = P( VRAI | n premier) P(n premier) + P( VRAI | n composé) P(n composé) p ≥ . p + 4 –k (1–p) 2 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche 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 –n2/2N N! 1– n ≈e N (N–n)! 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 n Ω (∑ i) = Ω(n 2) i=1 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 1 2 3 4 5 6 7 Val[I] 2 3 13 1 5 21 8 Next[I] 2 5 6 1 7 0 3 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 Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 3 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’algorithme 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 N 1 MA (N) = N ∑ T A (N, K). K=1 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) 4 Le nombre d’accès au tableau Val pour atteindre la clé de rang K ∈ (1, N) est évidemment TA (N, K) = K. EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche Le pire cas s’obtient pour le dernier élément du tableau, soit: PA (N, K) = Max {K | 1 ≤ K ≤ N} = N N 1 1 N (N+1) N+1 = 2 . MA (N) = N ∑ K = N 2 et le cas moyen par: K=1 Le nombre d’accès au tableau Val pour atteindre la clé de rang K ∈ (1, N) est si X < Val[I] (cas <) 1 + K TB (N, K) = 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. ii) 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 = 1 2 3 4 5 6 7 1 1 2 3 4 5 6 7 2 2 1 2 3 4 5 6 3 2 3 1 2 3 4 5 I = Uniforme (1, N) 4 2 3 4 1 2 3 4 5 2 3 4 5 1 2 3 6 2 3 4 5 6 1 2 7 2 3 4 5 6 7 1 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: N–1 Sinf = ∑ K=1 N (N–K)(K+1) = ∑ i=2 N (N+1–i) i = [ ∑ (N+1–i) i] – N i=1 (le passage de la première expression à la seconde s’obtient en posant i = K+1, soit K = i–1). Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 5 En ce qui concerne sa partie supérieure, les colonnes successives sont formées de: la valeur 1, la somme des 2 premiers entiers, la somme des 3 premiers entiers, ..., la somme des N–1 premiers entiers, et la somme des N premiers entiers. Cela donne une somme pour la partie supérieure: N Ssup = K ∑∑ K=1 i=1 N i = ∑ K (K+1) 2 K=1 Cette somme n’est pas facile à calculer telle quelle. Cependant, si on examine cette même partie supérieure diagonale par diagonale, on retrouve de gauche à droite: N fois la valeur 1, N–1 fois la valeur 2, N–2 fois la valeur 3, ..., 1 fois la valeur N. Vu ainsi, cela donne: N Ssup =N*1 + (N–1)*2 + ... + 1*N = ∑ (N+1–i) i i=1 La somme totale des éléments du tableau est ainsi S = Sinf + Ssup, soit: N N N [∑ (N+1–i) i] – N = 2 [(N+1)∑ i – ∑ i2] – N i=1 i=1 i=1 N(N+1) N(N+1)(2N+1) = 2 [(N+1) 2 – ] – N = N (N+1) [N+1 – 2N+1 6 3 ]–N 3N+3–2N–1 = N (N+1) [ ] – N = N(N+1)(N+2) – N. 3 3 S =2 Comme il y a dans ce tableau N2 cases (possibilités) équiprobables, cela donne pour la moyenne: S (N+1)(N+2) 1 N2+3N–1 N MB (N) = 2 = – = ≈ 3 , 3N 3N N N N+1 N ce qui est meilleur que le MB (N) = 2 ≈ 2 de l’algorithme déterministe A. Quant au pire cas, il s’obtient pour K = N (où le pire tirage est I = 1: l’algorithme explore dans l’ordre tous les éléments), mais aussi pour K = N–1 (où le pire tirage est I=N: l’algorithme explore le Ne élément, puis chacun des N–1 premiers). Dans ces deux cas, on obtient, compte tenu de ce que tous les tirages sont équiprobables: N 1 1 N (N+1) N+1 = 2 = MA (N), PB (N) = N ∑ i = N 2 i=1 alors que nous avions PA (N) = N. iii) Si, au lieu de tirer d’abord un seul élément au hasard, avec l’espoir de couper la liste en deux, on en tire deux, avec l’espoir de la couper en trois, on obtient un algorithme C. Cet algorithme fera au minimum deux accès à la liste (l’un des deux tirages aléatoires donne l’élément cherché dans la liste), et au maximum N+1 accès (on cherche le plus grand élément, et les deux tirages aléatoires donnent deux fois le premier). Cependant, dans ce dernier cas, comme les tirages aléatoires sont indépendants 1 1 et équiprobables, cette probabilité n’est que de 3 parmi les N3 cases du tableau (au lieu de 2 dans N N le cas précédent à un seul tirage). 6 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche FONCTION C(X): position. I1 ← Uniforme (1, N); Y1 ← Val[I1]; SI X = Y1 ALORS RETOURNER I2 ← Uniforme (1, N); Y2 ← Val[I2]; SI X = Y2 ALORS RETOURNER SI Y1 > Y2 ALORS Echanger I1 et I2; Echanger Y1 et Y2; FINSI I1. I2. {la clé maximum tirée est Y2 et son index est I2} SI X < Y1 ALORS RETOURNER Util (X, Tete). SI X > Y2 ALORS RETOURNER Util (X, Next[I2]). RETOURNER Util (X, Next[I1]). Fin C. Avec N = 7, le nombre exact d’accès au tableau Val pour trouver la clé de rang N est donné par: I1 = Uniforme (1, N) → 1 2 3 4 5 6 7 1 8 7 6 5 4 3 2 2 7 7 6 5 4 3 2 3 6 6 6 5 4 3 2 I2 = Uniforme (1, N) 4 5 5 5 5 4 3 2 5 4 4 4 4 4 3 2 6 3 3 3 3 3 3 2 7 2 2 2 2 2 2 2 35 34 32 29 25 20 14 Somme pour chaque I → ce qui donne 189 accès au total, d’où une espérance de PC (7) = 189/49 = 3,86 accès pour trouver l’élément le plus grand (pire cas), au lieu de 4 accès avec l’algorithme B. En généralisant la configuration du tableau précédent à N quelconque, on peut montrer que [ N ] 1 [1 (N+1) + 3 (N) + 5 (N–1) + ... + (2N–1) 2] = 12 ∑ (2i–1)(N+2–i) . N2 N i=1 Le calcul de la partie entre crochets se termine de manière comparable à ii), en faisant intervenir la somme des N premiers entiers et la somme des N premiers carrés. On trouve: PC (N) = [] N = 2 (N+2) ∑ i i=1 N – (N+2) ∑ 1 i=1 N –2∑ N +∑ i i2 i=1 i=1 N (N+1) = 2 (N+2) 2 N(N+1)(2N+1) N(N+1) – (N+2) N –2 + 6 2 1 2N+1 = N (N+2) N+1 – 1 – N (N+1) 2 – 3 4N–1 4N3 N3 = N2 (N+2) + N (N+1) 6 ≈ N3 – 6 = 3 , [ d’où ] PC (N) = [ 1 N2 ] [] = N3 . Si maintenant on fait trois tirages aléatoires au départ au lieu de 2 (ou de 1), on devrait encore améliorer ces résultats (nombre d’accès compris entre 3 et N+2). On améliorera encore plus en faisant 4 tirages, etc. Cependant, il ne faut pas augmenter indûment le nombre de ces tirages préliminaires destinés à réduire la longueur de la chaîne à explorer en séquence. En effet, le nombre de collisions de ces tirages augmenterait, et la longueur de la chaîne retant à explorer en bout de ligne ne diminuerait pas de manière aussi intéressante. Si on admettait que les tirages aléatoires préliminaires sont idéalement bien répartis (ce qui est faux à cause des collisions), il faudrait effectuer √N tirages, ce qui donnerait tout aussi idéalement une longueur de chaîne restant à explorer de √N, d’où au total 2√N accès, ce qui serait significativement mieux que linéaire... Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 7 Exercice 9 Soit X un ensemble fini dont le nombre d’éléments est très élevé, mais dans lequel nous pouvons puiser d’une façon aléatoire, uniforme et indépendante. Soit une fonction f : X → ℜ. i) Construire un algorithme de Las Vegas qui doit retourner un élément x ∈ X tel que f(x) = f0 (une valeur donnée). On suppose que {x ∈ X | f (x) = f0} n’est pas un ensemble vide. ii) Construire une fonction qui nous assure de trouver une solution à ce problème en utilisant l’algorithme de Las Vegas précédent. Solution i) PROCEDURE LV(X, var y, var Succès). y ← Uniforme (X). SI f(y) = f0 ALORS Succès ← VRAI SINON Succès ← FAUX. FIN LV. ii) FONCTION Obstiné (X): élément de X. RÉPÉTER LV(X, y, Succès) JUSQU’À Succès RETOURNER y. FIN Obstiné. Exercice 10 En reconsidérant l’énoncé de l’exercice 9, i) Construire un algorithme de Monte-Carlo qui permet de décider s’il existe ou non au moins un élément x dans X tel que f (x) = f0. ii) Construire une fonction qui nous permet d’améliorer nos chances de succès de trouver une réponse exacte, en utilisant l’algorithme de Monte-Carlo précédent. Solution: i) FONCTION MC(X): booléen. y ← Uniforme (X) RETOURNER (f(y) = f0) ii) FONCTION Obstiné (X,k): booléen. POUR i ← 1 JUSQU’À k FAIRE SI MC(X) ALORS RETOURNER VRAI. RETOURNER FAUX. 8 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche Exercice 11 (problème 8.6.2 ou 10.22) Soit MC (x) un algorithme de Monte-Carlo consistant et 75%-correct. Considérez l’algorithme : FONCTION MC3 (x). t ← MC (x); u ← MC (x); v ← MC (x). SI t = u OU t = v ALORS RETOURNER t. RETOURNER v. FIN MC3. 27 Prouvez que cet algorithme est consistant et 32 -correct, donc 84%-correct. Montrer que, par contre, il pourrait ne même pas être 71%-correct si MC, bien que 75%-correct, n’était pas consistant. Solution D’abord, il faut voir ici t, u, v comme les valeurs de variables aléatoires. Pour résoudre ce problème, il faut d’abord faire l’hypothèse que ces variables aléatoires sont indépendantes (cette hypothèse est nécessaire). Sous cette hypothèse, on aura P[t et u corrects] = P[t correct] × P[u correct], et ainsi de suite. Si l’algorithme est consistant, on peut voir que chaque fois qu’au moins 2 des 3 réponses (t, u, v) sont correctes, l’algorithme va retourner la bonne réponse. Mais la probabilité qu’au moins 2 des 3 réponses soient correctes est égale à P[t et u corrects] + P[t et v corrects] + P[u et v corrects] – 2 P[t et u et v corrects] 9 9 9 27 = 16 + + – 2 16 16 64 27 = 32. 27 Donc, l’algorithme est au moins 32 -correct. Si l’algorithme n’est pas consistant, supposons que toutes les solutions fausses qu’il peut retourner sont identiques, c’est-à-dire qu’il n’y a qu’une seule solution fausse. Dans ce cas, lorsqu’au moins 2 des 3 réponses (t, u, v) seront fausses, l’algorithme va retourner la mauvaise réponse. La 1 1 1 2 5 probabilité qu’au moins 2 des 3 réponses soient fausses est égale à 16 + 16 + 16 – 64 = 32. De plus, si v est faux et t, u sont corrects et distincts, l’algorithme retournera aussi la mauvaise réponse. Ce dernier événement est disjoint du précédent et, si les bonnes réponses sont distinctes avec probabilité 1 9 9 proche de 1, sa probabilité est approximativement 4 16 = 64. Ainsi, la probabilité d’une mauvaise 5 9 19 réponse sera approximativement 32 + 64 = 64 ≈ 0.297 > 0.29. Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 9 Exercice 12 (problème 8.6.4 ou 10.28) Soient A et B deux algorithmes de Monte-Carlo efficaces pour résoudre un même problème de décision. L’algorithme A est p-correct et vrai-biaisé, et l’algorithme B est q-correct et faux-biaisé. Donnez un algorithme de Las Vegas efficace LV (x, VAR y, VAR Succès) pour résoudre ce même problème. Quelle est la probabilité de succès en pire cas d’une itération de votre algorithme ? Solution L’algorithme A est VRAI-biaisé, donc est toujours correct (retourne toujours la bonne réponse) sur une certaine sous-classe XA d’exemplaires, et est tantôt correct et tantôt incorrect sur la sous— pour classe complémentaire X laquelle la bonne réponse est VRAI. Ainsi, lorsque la bonne réponse A est FAUX, A est correct donc retourne toujours FAUX ; lorsque la bonne réponse est VRAI, A étant pcorrect retourne VRAI avec une probabilité p et FAUX avec une probabilité d’erreur 1–p. Un raisonnement analogue pour B montre que lorsque la bonne réponse est VRAI, B est correct et retourne toujours VRAI ; lorsque la bonne réponse est FAUX, A étant q-correct retourne FAUX avec une probabilité q et VRAI avec une probabilité d’erreur 1–q. Lorsque la bonne réponse est l’algorithme A retourne l’algorithme B retourne VRAI (p) VRAI FAUX ou FAUX (1–p) FAUX VRAI VRAI (1–q) ou FAUX (q) Ainsi, lorsque A retourne VRAI, ou que B retourne FAUX, on est sûr que c’est la bonne réponse. Algorithme de Las Vegas Procedure LV (x, var y, var Succès); Succès ← VRAI. SI A (x) {A retourne VRAI} ALORS y ← VRAI. SINON SI ¬B (x) {B retourne FAUX} ALORS y ← FAUX SINON Succès ← FAUX. FIN LV. Probabilité de succès d’une itération P(Succès) = P(Succès/VRAI) P(VRAI) + P(Succès/FAUX) P(FAUX) = p v + q (1–v) 10 EXERCICES SUR LES ALGORITHMES PROBABILISTES ©2001 R. Lelouche Exercice 13 (ancien problème 8.6.5) Considérez la fonction (algorithme de Monte-Carlo) FONCTION Major (T[1..n]): booléen. {Tirer un élément x au hasard dans T} i ← uniforme (1..n). x ← T[i]. {Compter le nombre k d’éléments égaux à x } k ← 0. POUR j ← 1 à n FAIRE SI T[j] = x ALORS k ← k+1. RETOURNER (k > n/2). FIN Major. indiquant si un tableau est ou non majoritaire. Montrez que la probabilité que k appels successifs à Major (T) retournent tous la valeur FAUX est inférieure à 2–k si T est majoritaire. Par contre, dès qu’un appel retourne VRAI, on peut affirmer avec certitude que T est majoritaire. Analyse d’algorithmes 2001 EXERCICES SUR LES ALGORITHMES PROBABILISTES 11