Vous êtes sur la page 1sur 26

LOG320 09_NonDeterminisme.

xls

Non déterminisme
et
Algorithmes randomisés

1. Introduction
2. Générateurs de nombres aléatoires
3. Simplement aléatoire
4. Monte-Carlo et Las Vegas
5. Autres exemples

S. Ratté, novembre 2003 (révisé mars 2004, juillet 2004)


LOG320

Hiver 2004 Titre 1 de 26


LOG320 09_NonDeterminisme.xls

Algorithmes randomisés - définition


DONNÉES

ALGORITHME RÉSULTAT

PAC: Probablement Approximativement


Correct
probablement proche du résultat exact.
PC: Probablement Correct
mais peut dire n’importe quoi de temps en
Randomisation des Utilisation d'une
temps
données afin d'éviter composante aléatoire dans
C: toujours Correct
les pires cas. le traitement lui-même.

Hiver 2004 Introduction-1 2 de 26


LOG320 09_NonDeterminisme.xls

Exemples d'insertion d'une composante aléatoire

8 Randomiser les données offertes à un tri rapide afin d'éviter le pire cas
9 Randomiser le choix du pivot.

Hiver 2004 Introduction-2 3 de 26


LOG320 09_NonDeterminisme.xls

Une histoire avec une morale


Vous avez découvert une carte indiquant l'existence d'un trésor. Elle est
cependant difficile à déchiffrer. Après de nombreux efforts, voici ce
que vous savez:

1. Le trésor d'une valeur inconnue "x" est cachée à l'un des deux endroits indiqués.
2. Il faut 5 jours de marche pour se rendre à l'un ou l'autre des deux endroits.
3. Votre temps est compté car un dragon vole une part "y" du trésor à chaque nuit.
4. Vos estimations vous indiquent qu'il vous faudra encore 4 jours pour déchiffrer
complètement la carte.

Vos choix:

A) Algorithme déterministe 1. Prendre les 4 jours pour déchiffrer la carte.


B) Algorithme déterministe 2. Un elfe (ou un gnome) vous révèlera l'endroit mais exige
trois fois la part que le dragon vole en une nuit (donc il exige 3y).
C) Algorithme non déterministe. Tirer à pile ou face pour savoir quel endroit visiter
en premier. Si cela ne fonctionne pas alors vous visiterez le second endroit.

Hiver 2004 Introduction-3 4 de 26


LOG320 09_NonDeterminisme.xls

2. Générateurs de nombres aléatoires


Départ

RAND

Un ordinateur ne peut pas générer des séquences de vrais nombres aléatoires.


Parce qu'il utilise une méthode systématique, la génération conduit inévitablement
à un cycle ayant, en général, la forme d'un "rho".
cf. Sedgewick & Flageolet, pp 460ss.

Départ = 3 26 83
(x2 + 1) mod 99 5

2 50 59

10 92 17

Hiver 2004 Générateurs-1 5 de 26


LOG320 09_NonDeterminisme.xls

Générateur Von Neumann 4578


1590
Départ 4578 561
carré 20958084 9580 426
carré 91776400 7764
carré 60279696 2796 Choisissons d'abord un nombre de départ Ao représenté sur
carré 07817616 8176
carré 66846976 8469
N/2 bits. Mettons-le au carré et prenons ensuite les N/2 bits du
carré 71723961 7239 milieu de ce nombre. Ce nouveau nombre A1 est le nombre
carré 52403121 4031 pseudo-aléatoire suivant.
carré 16248961 2489
carré 06195121 1951
carré 03806401 8064
carré 65028096 280

Hiver 2004 Générateurs-2 6 de 26


LOG320 09_NonDeterminisme.xls

Générateurs LCG (Linear Congruential Generator)


Lehmer 1948

m b a Ao
101 13 7 34 essayez a=7 et essayez a=6

A1 49 LIGNE
A2 53 110 On démarre avec 4 valeurs dont trois constantes:
A3 81 Ao = le nombre de départ,
A4 75
A5 33 a = la pente (fixe),
A6 42 b = l'ordonnée à l'origine (fixe),
A7 4
A8 41
m = le modulo (fixe)
98 Pour obtenir la séquence pseudo-aléatoire, on effectue:
93 (a*Ao + b) % m = A1
58
15 (a*A1 + b) % m = A2
17
13
3
34 Le choix de "a" est crucial.
49 Et "m" doit être premier (c'est préférable).
25 ans 53
d'utilisation 81 Note: 231 - 1 = 2147483647 est un nombre premier.
… 75 Un bon choix pour "a" est 16807
arrive Knuth 33
42
4

PLUSIEURS GÉNÉRATEURS ÉTAIENT MÉDIOCRES!!!

Hiver 2004 Générateurs-3 7 de 26


LOG320 09_NonDeterminisme.xls

Générateurs Marsaglia
Georges Marsaglia 1985

Georges Marsaglia a l'idée d'utiliser non pas un LCG pour


créer son générateur, mais deux. Le premier, que nous
appellerons ici "le générateur", est chargé de remplir un
tableau avec N nombres pseudo-aléatoires. Le second, que
nous appellerons "le directeur", est chargé de générer un
indice dans le tableau précédent. Le nombre dans la case
devient le nombre généré par la méthode de Marsaglia. Ce
nombre est ensuite remplacé par "le générateur" qui poursuit
naturellement sa séquence.

Le LCG "générateur" génère N nombres qui sont placés dans un tableau.

0 1 2 3 ... N-1
So S1 S2 S3 ... Sn-1

1- le LCG "directeur" génère un nombre entre 0 et N;


2- le nombre situé à cet indice dans le tableau devient le premier nombre aléatoire;
3- la case laissée vide est remplie par le LCG "générateur".

Exemple:
Remplissage du tableau par le LCG générateur
0 1 2 3 4 5 6 7 8
23 0 32 44 19 22 52 14 35

1- Choix du LCG directeur: 2


2- Premier nombre aléatoire: Ao 32
3- Remplacement par le LCG générateur
0 1 2 3 4 5 6 7 8
23 0 76 44 19 22 52 14 35

1- Choix du LCG directeur: 0


2- Deuxième nombre aléatoire: A1 23

Hiver 2004 Générateurs-4 8 de 26


LOG320 09_NonDeterminisme.xls
3- Remplacement par le LCG générateur
0 1 2 3 4 5 6 7 8
62 0 76 44 19 22 52 14 35

1- Choix du LCG directeur: 8


2- Troisième nombre aléatoire: A3 35
3- Remplacement par le LCG générateur
0 1 2 3 4 5 6 7 8
62 0 76 44 19 22 52 14 46

Hiver 2004 Générateurs-4 9 de 26


LOG320 09_NonDeterminisme.xls

Générateurs Fibonacci décalés (lagged Fibonacci)


On sait que les produits sont plus longs à effectuer que les
sommes. Dans la méthode LCG, on utilise nécessairement une
multiplication. L'idée derrière la méthode dites "Fibonacci décalée"
(Lagged Fibonacci) est d'utiliser uniquement des sommations.

Rappel de la suite: Xn = Xn-1 + Xn-2


1,1,2,3,5,8,13,21,34,55, …

Idée de départ: on part de deux nombres So et S1 (coefficient 1, 1) et l'on continue avec

So+S1 (1,1)
So+2S1 (1,2)
2So+3S1 (2,3)
3So+5S1 (3,5)
5So+8S1 (5,8)
… évidemment ces additions s'effectuent selon un certain modulo!!!

Reprendre l'idée de Marsaglia

Remplir d'abord le tableau de longueur N grâce à un LCG de base


Prenons ensuite un entier K et un entier P qui feront office de valeurs de décalage.
"m" est souvent choisi comme une puissance de 2
Choisir un indice de démarrage "i"

1. A = Additionner T(i-p) et T(i-k) (modulo "m")


2. T(i) = A
3. i=1+1

Hiver 2004 Générateurs-5 10 de 26


LOG320 09_NonDeterminisme.xls

Tester des générateurs

Test du Khi-deux

1. Générer N nombre < R


2. On s'attend à N/R nombres de chaque valeurs MAIS pas exactement
sinon le résultat ne serait pas aléatoire…
3. On fait plusieurs expériences

Pour les tests de Georges Marsaglia

http://random.com.hr/products/random/Diehard.html

http://stat.fsu.edu/pub/diehard/

Hiver 2004 Générateurs-6 11 de 26


LOG320 09_NonDeterminisme.xls

3.Simplement aléatoire
Exemple 1: le professeur et ses quiz
Un professeur donne des devoirs de programmation à chaque semaine
Il veut être certain que les étudiants comprennent ce qu'ils ont remis
(note: cette vérification est moins forte que celle d'exiger que
les étudiants ne trichent pas…)
Le problème: Quand doit-il donner un quiz?

Solution 1. À chaque semaine.


Impraticable. Prend trop de temps en classe et trop
de temps à corriger.

Solution 2. À toutes les deux semaines.


Non. Les étudiants réaliseraient assez vite la
fréquence.

Solution 3. Au début de chaque cours, une pièce est lancée.


Si le résultat est "face", le quiz est donné, sinon, le
quiz n'est pas donné.

Avantage: le patron des quiz (oui, oui, non, oui, non, …) ne peut
être prédit;

Il est possible qu'il n'y aie aucun quiz mais la probabilité est faible.
Il est possible qu'il y aie autant de quiz que de programmes mais la
probabilité est faible.
On obtiendra environ 50% des programmes testés.

Hiver 2004 Aléatoire-1 12 de 26


LOG320 09_NonDeterminisme.xls

Exemple 2: Application du principe sur une structure de données


Les "Skipped lists"

Temps de recherche sur une liste chaînée normale?

2 8 10 11 13 19 20 22 23 29

Examinons la liste suivante, quel est son temps de recherche ?

2 8 10 11 13 19 20 22 23 29

Examinons maintenant celle-ci, quel est son temps de recherche?

2 8 10 11 13 19 20 22 23 29

Et celle-ci ?

2 8 10 11 13 19 20 22 23 29

Hiver 2004 Aléatoire-2 13 de 26


LOG320 09_NonDeterminisme.xls

(Skipped lists…)

2 8 10 11 13 19 20 22 23 29
1 2 3 4 5 6 7 8 9 10

Remarques préliminaires
Déf. Un nœud de niveau "k" est un nœud possédant "k" pointeurs.

Condition de construction
eme
Le i pointeur d'un nœud pointe sur le 2 i nœud devant
Que pensez-vous de l'insertion dans une telle liste?

Nouvelle condition de construction


Le ieme pointeur d'un nœud de niveau "k" pointe sur le prochain nœud possédant au
moins "i" niveaux.

Insertion d'un nouveau nœud, quel est son niveau?

On alloue un nouveau nœud mais… de quel niveau doit-il être?


En extrapolant à partir du dessin précédent, si N est la taille de la liste,
- combien de nœuds de niveau 1 y trouve-t-on?
- combien de nœuds de niveau 2 y trouve-t-on?
- en général…

On détermine ainsi aléatoirement le niveau du nouveau nœud en se basant sur cette


distribution théorique.

Algorithme de recherche
1. Démarrer avec le pointeur du plus haut niveau;
2. Avancer avec ce pointeur tant que la valeur du prochain nœud est plus petite que
celle que l'on recherche
3. Lorsque cela arrive, on descend d'un niveau et on recommence la stratégie.
4. Une fois au niveau 1, il peut se passer deux choses, soit nous nous trouvons devant
le nœud cherché, soit celui-ci n'est tout simplement pas dans la liste.

Hiver 2004 Aléatoire-3 14 de 26


LOG320 09_NonDeterminisme.xls

Algorithme d'insertion
1. Créer un nouveau nœud et déterminer son niveau de manière aléatoire
2. Procéder ensuite comme pour l'insertion mais en gardant en mémoire les endroits
où les changements de niveaux ont eu lieu;
3. Insérer ensuite le nouveau nœud en rattachant tous les pointeurs gardés en
mémoire.

Voici une liste typique

2 8 10 11 13 19 20 23 29 33

22

Parcours

2 8 10 11 13 19 20 23 29 33

Nouvelle liste

2 8 10 11 13 19 20 22 23 29 33

Recherche sur Web: "Skipped Lists"


Référence: Mark Allen Weiss (1994) Data Structures and Algorithms Analysis in C++, Addison-Wesley.

Hiver 2004 Aléatoire-3 15 de 26


LOG320 09_NonDeterminisme.xls

Exemple 3: L'élection d'un leader


(stratégie d'allocation de ressources, spécialement dans un contexte distribué)
Algorithme permettant de nommer un "leader" parmi N individus qui partagent une canal distribué.

Soit un ensemble d'individu,


1. Si l'ensemble est vide, échec
2. Si l'ensemble contient un seul individu, cet individu est le leader
3. Autrement, lancer une pièce équilibrée pour chacun des membres de l'ensemble.
Le nouvel ensemble à considérer sera formé de ceux ayant obenu "pile".

De manière approximative, quelles sont les tailles successives de l'ensemble?

En combien d'étapes approximativement peut-on espérer un résultat?

Sedgewick et Flajolet, pp 406-7 montrent que la probabilité du succès est d'environ 0.72135

Hiver 2004 Aléatoire-4 16 de 26


LOG320 09_NonDeterminisme.xls

Exemple 1: Les aiguilles de Buffon


(18ème siècle, Georges Louis Leclerc, compte de Buffon)
•Vous échappez sur votre plancher de bois le contenu d’une
boîte d’aiguilles. La position et l'angle des aiguilles sont
évidemment déterminés de manière aléatoire.
•Il y a N aiguilles de longueur L, planches de largeur 2L

Buffon a montré que la probabilité qu'une aiguille touche à deux


planches est de 1/π

Utilisation de la méthode pour approximer π


k=0
pour i=1 à n
laisser tomber une aiguille sur le sol
si l’aiguille touche 2 planches
alors k=k+1
retourner n/k

Dans l'exemple ci-dessus, on a N=8 et K = 3, d'où une estimation de 8/3

Soit 2,6667

http://perso.wanadoo.fr/jpq/proba/montecarlo/buffon.htm

Hiver 2004 Monte-Carlo-1 17 de 26


LOG320 09_NonDeterminisme.xls

Exemple 2: Une autre approximation de PI

Répétez l ‘algorithme suivant un certain nombre de fois :


1. Générez deux nombres aléatoires « x » et « y » dans
l’intervalle [0,1].
2. Si (x2 + y2) < 1 vous avez un bon coup que vous devez
comptabiliser.
Lorsque vous avez terminé, divisez le nombre de bons
coups par le nombre d’itérations effectuées. Qu’obtenez-
vous? Votre réponse doit être claire et concise.

0,9

0,8

0,7

0,6

0,5

0,4

0,3

0,2

0,1

0
0 0,2 0,4 0,6 0,8 1

N=101, Nb de bons coups = 76.

Hiver 2004 Monte-Carlo-2 18 de 26


LOG320 09_NonDeterminisme.xls

Exemple 3: Intégration à la Monte-Carlo

Trouvez d’abord le maximum de la fonction dans l’intervalle


[a,b], ce qui vous permet de définir un rectangle dont la base est
donnée par « a » et « b » et la hauteur par le maximum de la
fonction. Ensuite:

1. Générez une certaine quantité de points (x,y) dans le


rectangle comme si vous y lanciez des dards .
2. Comptez le nombre de fois où le point obtenu est situé sous
la courbe : y <= f(x). On appelle cela un « succès ».
3. Faites le rapport entre le nombre de succès et le nombre
d’essais, puis multipliez ce résultat par la surface du rectangle.

Vous obtenez alors une bonne approximation de l’intégrale.

Surface du rectangle Fonction


18 X 100 = 1800 -(X-10)2 + 100
120

100

80

60

40

20

0
-2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-20

Hiver 2004 Monte-Carlo-3 19 de 26


LOG320 09_NonDeterminisme.xls

Exemple 4: Approximer la solution optimale


Sites
1 2 3 4
É
d A 11 $ 12 $ 18 $ 40 $
i
B 14 $ 15 $ 13 $ 22 $
f
i
C 11 $ 17 $ 19 $ 23 $
c
e D 17 $ 14 $ 20 $ 28 $
s

Itération Actuel Édifice A Édifice B Nouveau


73 $
1 73 $ 2 3 69 $
2 69 $ 3 2 73 $
3 69 $ 2 4 70 $
4 69 $ 4 3 61 $
5 61 $ 4 1 65 $
6 61 $ 3 4 69 $
7 61 $ 1 3 78 $
8 61 $ 1 4 65 $
9 61 $ 3 1 78 $
10 61 $ 3 1 78 $
61 $
A B C D
1 3 4 2

Hiver 2004 Monte-Carlo-4 20 de 26


LOG320 09_NonDeterminisme.xls

4.2 Las Vegas et la réponse exacte

Les caractéristiques des algorithmes de type Monte-Carlo


- Les algorithmes de type Monte Carlo produisent toujours une solution.
- Celle-ci peut être incorrecte, au mieux il s'agit de la solution optimale.
- On obtient cette solution en effectuant un choix aléatoire.
- On peut améliorer vos chances de trouver la solution optimale en
effectuant plusieurs essais.

Les caractéristiques des algorithmes de type Las Vegas


- Les algorithmes de type Las Vegas produisent toujours une solution correcte.
- Si l'algorithme ne peut trouver de solutions correctes, il répond "ne sais pas" (null).
- On dispose d'un algorithme (peut être de type Monte Carlo) pour générer une solution.
- On dispose d'un algorithme déterministe pour savoir si cette solution est correcte ou non.

Hiver 2004 Monte-Carlo-5 21 de 26


LOG320 09_NonDeterminisme.xls

Un exemple et deux styles

Un tableau T[1.N] contient des valeurs entières. Écrire un algorithme pour


décider si oui ou non une valeur quelconque C se trouve dans ce tableau.

Style Monte-Carlo Style Las Vegas


MC(T, C) LV(T, C)
i = uniforme(1, N) i = uniforme(1, N)
Si T[i] = C alors Si T[i] = C alors
retourner Vrai retourner Vrai
Sinon Sinon
retourner Faux retourner "Sais pas"

Augmenter nos chances On peut aussi utiliser MC


MC(T, C) LV(T, C)
Pour nb = 1 à 10000 rep = MC(T, C)
i = uniforme(1, N) Si rep = Vrai alors
Si T[i] = C alors retourner Vrai
retourner Vrai Sinon
retourner Faux retourner "Sais pas"

Faire un MC avec un LV On peut aussi être certain


MC(T, C) LV_obstiné(T, C)
rep = LV(T, C) répéter
Si rep = Vrai alors rep = LV(T,C)
retourner Vrai jusqu'à ce que rep = Vrai
Sinon
retourner uniforme(Vrai, Faux)

Hiver 2004 Monte-Carlo-5 22 de 26


LOG320 09_NonDeterminisme.xls

Comment garder un secret


(application, entre autre, en cryptographie et dans tout contexte distribué)
(illustre également le concept de variables aléatoires indépendantes)

N étudiants ont reçu leur note d'examen. Malheureusement, le professeur


a oublié de mentionner la moyenne et celle-ci détermine leur note finale.
Ils désirent calculer la moyenne du groupe mais ne veulent pas que les
autres connaissent leur note. Comment faire?

Voici les étapes de l'algorithme.

0. On choisit un M qui est nécessairement plus grand que la somme S de toutes les
notes (ex. M = 101 * N si les notes sont sur 100)
1. Chaque étudiant i choisit N-1 nombres au hasard dans l'intervalle [0..M-1] (soit Hi
cet ensemble) et calcule la somme Si de ces nombres.
2. Chaque étudiant choisit ensuite un Yi bien à lui tel que la (Si + Yi) mod M = Ni
3. Chaque étudiant conserve son Yi et distribue aux autres les nombres composant
son ensemble Hi
4. Chaque étudiant effectue la somme (modulo M) de son Yi avec les N-1 nombres
qu'il a reçu.
5. Les N sommes obtenues par les étudiants sont additionnées et le résultat est
divisé par N, ce qui permet d'obtenir la moyenne du groupe.

WOW!

Hiver 2004 Exemple-1 23 de 26


LOG320 09_NonDeterminisme.xls

(… un exemple)
M=303

I. Étapes 1 et 2 de l'algorithme
Etudiant 1 Etudiant 2 Etudiant 3
x1 28 58 5
x2 200 78 87
y= 155 257 271
Somme 383 393 363
Somme mod M (doit être égale à sa note) 80 90 60
230 ----- la vraie somme

II. Étapes 3 à 5
Etudiant 1 Etudiant 2 Etudiant 3
5 28 58
78 87 200
y= 155 257 271
Somme 238 372 529
Somme mod M 238 69 226

On fait la grande somme 533


toujours modulo M 230 ---- la somme publique

Hiver 2004 Exemple-2 24 de 26


LOG320 09_NonDeterminisme.xls

Ce nombre est-il premier?


Réutilisation de ce cher Fermat

Petit théorème de Fermat

Si N est premier, alors

AN-1 mod N = 1 pour tout A appartenant à [1..N-1]

Exemple N 7 N 9

A Résultat A Résultat
1 1 1 1
2 1 2 4
3 1 3 0
4 1 4 7
5 1 5 7
6 1 6 0
7 4
8 1

Algorithme No 1

A = RandomUniforme(1,N-1)
if A N-1 Mod N = 1 retourner vrai
sinon retourner faux
Lorsque cet algorithme retourne FAUX, êtes-vous certains du résultat?
Lorsque cet algorithme retourne VRAI êtes-vous certains du résultat?

Avec N = 561 (nombre de Carmichael), plusieurs des A dans


[1..560] donne 1 mais 561 n'est pas premier.

Hiver 2004 Exemple-3 25 de 26


LOG320 09_NonDeterminisme.xls

Globalement, la probabilité d’erreur est basse:


3.3% sur les 1000 premiers nombres
encore plus basse pour les grands nombres.
MAIS pour certains N, elle est excessive:
exemple: 561 admet 368 faux positifs (plus de 50%).

Voir Miller-Rabin pour un algorithme plus efficace.

Hiver 2004 Exemple-3 26 de 26

Vous aimerez peut-être aussi