Académique Documents
Professionnel Documents
Culture Documents
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
ALGORITHME RÉSULTAT
8 Randomiser les données offertes à un tri rapide afin d'éviter le pire cas
9 Randomiser le choix du pivot.
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:
RAND
Départ = 3 26 83
(x2 + 1) mod 99 5
2 50 59
10 92 17
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
Générateurs Marsaglia
Georges Marsaglia 1985
0 1 2 3 ... N-1
So S1 S2 S3 ... Sn-1
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
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!!!
Test du Khi-deux
http://random.com.hr/products/random/Diehard.html
http://stat.fsu.edu/pub/diehard/
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?
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.
2 8 10 11 13 19 20 22 23 29
2 8 10 11 13 19 20 22 23 29
2 8 10 11 13 19 20 22 23 29
Et celle-ci ?
2 8 10 11 13 19 20 22 23 29
(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?
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.
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.
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
Sedgewick et Flajolet, pp 406-7 montrent que la probabilité du succès est d'environ 0.72135
Soit 2,6667
http://perso.wanadoo.fr/jpq/proba/montecarlo/buffon.htm
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
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
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!
(… 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
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?