24
Algorithmique Cours 3 : Diviser pour régner, théorème maître ROB3 – année 2014-2015

Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

AlgorithmiqueCours 3 : Diviser pour régner, théorème maître

ROB3 – année 2014-2015

Page 2: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Résumé des épisodes précédents● On s'est intéressé au comptage des lapins, via le

calcul du nème terme de la suite de Fibonacci :

– algorithme Fib1 de complexité O(20.694n)– algorithme Fib2 de complexité O(n2)

– Algorithme Fib3 matriciel :

La complexité de Fib3 est équivalente à la complexité de multiplication de deux entiers de n bits. On cherche donc à concevoir un algorithme de multiplication de complexité O(nα) avec α < 2.

Page 3: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Diviser pour régner

Pour concevoir des algorithmes plus rapides :

DIVISER un problème en sous-pbs plus petits

RESOUDRE les sous-problèmes récursivement

FUSIONNER les réponses aux sous-pbs afin d'obtenir la réponse au problème de départ

Page 4: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Application à la multiplication

a b

c d

n/2 bitsn/2 bits

n bits

X

Y

X =

Y =

X = a 2n/2 + b

X × Y = ac 2n + (ad + bc) 2n/2 + bd

Y = c 2n/2 + d

Pour simplifier la présentation, mais sans perte de généralité, on suppose que n est une puissance de 2.

Page 5: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Application à la multiplication

a b

c d

n/2 bitsn/2 bits

n bits

X =

Y =

X × Y = ac 2n + (ad + bc) 2n/2 + bd

fonction mult(x,y)Entrée: Deux entiers x et y sur n bitsSortie: Leur produit

si n = 1 retourner xysinon partitionner x en a,b et y en c,d

retourner mult(a,c)2n + (mult(a,d)+ mult(b,c))2n/2 + mult(b,d)

Page 6: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Ce qui donne en décimal

a b

c d

n/2 bitsn/2 bits

n bits

X =

Y =

X = a 10n/2 + b

X × Y = ac 10n + (ad + bc) 10n/2 + bd

Y = c 10n/2 + d

Page 7: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Exemple (en décimal)

X =

Y =

X × Y = ac 10n + (ad + bc) 10n/2 + bd

a b

c d

1234*2139

12345678 * 21394276

12*21 12*39 34*21 34*39

1*2 1*1 2*2 2*1

2 1 4 2

Ainsi : 12*21 = 2*102 + (1 + 4)101 + 2 = 252

1234*4276 5678*2139 5678*4276

Page 8: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Exemple (en décimal)

X =

Y =

X × Y = ac 10n + (ad + bc) 10n/2 + bd

a b

c d

1234*2139 1234*4276 5678*2139 5678*4276

12345678 * 21394276

252 468 714 1326*104 + *102 + *102 + *1 = 2639526

Page 9: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Exemple (en décimal)

X =

Y =

X × Y = ac 10n + (ad + bc) 10n/2 + bd

a b

c d

1234*2139 1234*4276 5678*2139 5678*4276

12345678 * 21394276

2639526 5276584 12145242 24279128*108 + *104 + *104 + *1

= 264126842539128

Page 10: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Arbre des appels récursifsn

4(n/2)

16(n/4)

4k (n / 2k)

4 lg n (1)

. . .

. . .

T(n)

T(n/2)

T(n/4) T(n/4)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / 2k)

T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

. . .

. . .

T(n/2)

T(n/4) T(n/4) T(n/4)

A chaque niveau k de l'arbre, il y a 4k nœuds.

Page 11: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Calculs en un nœud T(n/2k)

a b

c d

n/2k+1 bitsn/2k+1 bits

n/2k bits

X =

Y =

X × Y = ac 2n/2 + (ad + bc) 2n/2 + bd k k+1

A un nœud T(n/2k), on réalise une multiplication par 2n/2 (n/2k décalages vers la gauche), une autre par 2n/2 , et trois additions avec des nombres comportant au plus n/2k-1 bits, soit :

O(n/2k) opérations élémentaires

k

k+1

Page 12: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Arbre des appels récursifsn

4(n/2)

16(n/4)

4k (n / 2k)

4 lg n (1)

. . .

. . .

T(n)

T(n/2)

T(n/4) T(n/4)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / 2k)

T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

. . .

. . .

T ( n)=∑k=0

log2 n

4k

(n

2k )=∑

k=0

log2n

n ( 42 )

k=n (2 log2n+1

−1)=n(2n−1)

T(n/2)

T(n/4) T(n/4) T(n/4)

Page 13: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Arbre des appels récursifsn

4(n/2)

16(n/4)

4k (n / 2k)

4 lg n (1)

. . .

. . .

T(n)

T(n/2)

T(n/4) T(n/4)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / 2k)

T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

. . .

. . .

T(n/2)

T(n/4) T(n/4) T(n/4)

Complexité en O(n2)

Page 14: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Question

● Soient deux nombres complexes a+bi et c+di● Leur produit : (a+bi)(c+di) = [ac-bd] + [ad+bc]i● Entrée : a, b, c, d ● Sortie : ac-bd, ad+bc

Si la multiplication de deux nombres coûte 1€ et leur addition coûte 1 centime, quelle est la façon la moins coûteuse d'obtenir la sortie à partir de

l'entrée ?

Pouvez-vous faire mieux que 4.03€ ?

Page 15: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

La solution de Gauss à 3.05€

Entrée : a,b,c,d

Sortie : ac-bd, ad+bc

P1 = a + b

P2 = c + d

P3 = P1P2 = ac + ad + bc + bdP4 = ac

P5 = bd

P6 = P4 – P5 = ac - bd

P7 = P3 – P4 – P5 = bc + ad

1 centime :

1€ :

1 centime :

1€ :

1€ :

1 centime : 1 centime :

Carl Friedrich Gauss1777-1855

Page 16: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

mult gaussifiée (Karatsuba, 1962)

a b

c d

n/2 bitsn/2 bits

n bits

X =

Y =

X × Y = ac 2n + (ad + bc) 2n/2 + bd

fonction mult2(x,y)Entrée: Deux entiers x et y sur n bitsSortie: Leur produit

si n = 1 retourner xysinon

partitionner x en a,b et y en c,dP3= mult(a+b,c+d); P4= mult(a,c); P5= mult(b,d)retourner P4.2n + (P3-P4-P5).2n/2 + P5

Anatolii Alexeevich Karatsuba,1937-2008

Page 17: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

mult2 : arbre des appels récursifsn

3(n/2)

9(n/4)

3k (n / 2k)

3 lg n (1)

. . .

. . .

T(n)

T(n/2)

T(n/4) T(n/4)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / 2k)

T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

. . .

. . .

T ( n)=∑k=0

log2 n

n ( 32 )

k=n

( 32 )

1+ log2n

−1

32−1

=2 n(( 32 )

log2n 32−1)=2n (nlog

232 3

2−1)=3n

log2 3−2 n

Page 18: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

mult2 : arbre des appels récursifs

3 nlog23−2 n ∈ O (n1,58 ) car log2 3=1,58Complexité :

n

3(n/2)

9(n/4)

3k (n / 2k)

3 lg n (1)

. . .

. . .

T(n)

T(n/2)

T(n/4) T(n/4)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / 2k)

T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

T(n/2)

T(n/4) T(n/4)T(n/4)

. . .

. . .

Page 19: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

O(n ) << O(n )1,58 2

n1,58

n2

Grâce à mult2, on a donc un algorithme de complexité O(n1.58) pour compter les lapins !

Page 20: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Bref : diviser pour régner

DIVISER le problème en a sous-pbs de taille n/b

RESOUDRE les sous-problèmes récursivement

FUSIONNER les réponses aux sous-pbs en O(nd) afin d'obtenir la réponse au problème de départ

A partir de la connaissance des valeurs des paramètres a, b et d, le théorème maître permet de déterminer « automatiquement » la complexité d'une méthode de type diviser pour régner.

Page 21: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Théorème maître

● Les algorithmes de type « diviser pour régner » résolvent a sous-pbs de taille n/b et combinent ensuite ces réponses en un temps O(nd), pour a,b,d > 0

● Leur temps d'exécution T(n) peut donc s'écrire :

T(n) = aT(n/b) + O(nd)

(« n/b » signifiant ici partie entière inférieure ou supérieure de n/b)

● Le terme général est alors :

Ce théorème permet de déterminer la complexité de la plupart des algorithmes de type « diviser pour régner ».

Page 22: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Preuven

a(n/b)

a2(n/b2)

ak (n / bk)

a lg n (1)

. . .

. . .

T(n)

T(n/b)

T(n/b2) T(n/b2)

T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)

T(n / bk)

T(n/b2)

T(n/b)

T(n/b2) T(n/b2)T(n/b2)

T(n/b)

T(n/b2) T(n/b2)T(n/b2)

. . .

. . .

a branches

Hauteurlog

bn

Largeur alog n = nlog a bb

Le niveau k est composé de a sous-problèmes, chacun de taille n/bk k

Page 23: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Preuve● Sans perte de généralité, on suppose que n est une puissance de b.

● Le niveau k est composé de ak sous-problèmes, chacun de taille n/bk. Le travail total réalisé à ce niveau est :

● Comme k varie de 0 (racine) à logbn (feuilles), ces nombres forment une suite géométrique de raison a/bd

● Trois cas :

– La raison est inférieure à 1 : la suite est décroissante et la somme des termes est du même ordre de grandeur que le premier terme, soit O(nd)

– La raison est supérieure à 1 : la suite est croissante et la somme des termes est du même ordre de grandeur que le dernier terme, soit O(nlog a) :

– La raison est exactement 1 : dans ce cas les O(log n) termes de la suite sont égaux à O(nd)

Page 24: Algorithmique Cours 3 : Diviser pour régner, théorème maître …spanjaard/cours/Algo_cours3.pdf · 2015. 4. 2. · Algorithmique Cours 3 : Diviser pour régner, théorème maître

Le théorème « marche » bien

● Pour T(n) = aT(n/b) + O(nd), le terme général est :

● Algorithme mult : T(n) = 4T(n/2) + O(n)

a=4, b=2, d=1 et donc 1<2=log24 → O(nlog 4)=O(n2)

● Algorithme mult2 : T(n) = 3T(n/2) + O(n)

a=3, b=2, d=1 et donc 1<1,58≈log24 → O(nlog 4)=O(n1,58)