Chap 4. Diviser Pour Régner PDF
Chap 4. Diviser Pour Régner PDF
Chap 4. Diviser Pour Régner PDF
If ( left = right)
return left; Sous-problème1 Sous-problème2
Else
m= (left+right)/2 // division du problème en 2 sous-problèmes
k1 = maximum (x, left, m) // régner sur le 1er sous-problème
k2 = maximum (x, m+1, right) // régner sur le 2ème sous-problème
If(x (k1) > x (k2)) // combiner les solutions
Return k1
Else
Return k2
End_maximum
3
3 Eexemple_2 : multiplication naïve de
matrices
Nous nous intéressons ici à la multiplication de matrices carrées de taille n.
Algorithme naïf
- L’algorithme classique est le suivant :
Soit n la taille des matrices carrés A et B
Soit C une matrice carrée de taille n
Multiplier (A, B,C)
For i = 1 to n do
For j=1 to n do
C(i,j)=0
For k=1 to n do
C(i,j)= C(i,j) +A(i,k)*B(k,j)
End_Multiplier
Cet algorithme effectue O(n3) multiplications et autant d’additions.
4
3 Eexemple_2 : multiplication naïve de
matrices
Algorithme « diviser pour régner » naïf
• Dans la suite nous supposerons que n est une puissance de 2. Décomposons les matrices A, B et C
en sous-matrices de taille n/2 x n/2. L’équation C = AB peut alors se récrire :
r s a b e g
*
t u c d f h
• En développant cette équation, nous obtenons :
r = ae+bf ; s = ag+bh; t = ce+df et u = cg+dh:
• A partir de ces équations on peut aisément dériver un algorithme « diviser pour régner » dont la
complexité est donnée par la récurrence :
T(n) = 8T(n/2)+O(n2)
5
4 Analyse des algorithmes «diviser pour
régner» (1)
6
4 Analyse des algorithmes «diviser pour
régner» (2)
• La récurrence définissant le temps d’exécution d’un algorithme « diviser pour régner » se
décompose suivant les trois étapes du paradigme de base :
1. Si la taille du problème est suffisamment réduite, n <= c pour une certaine constante c,
la résolution est directe et consomme un temps constant O(1).
2. Sinon, on divise le problème en a sous-problèmes chacun de taille 1/b de la taille du
problème initial. Le temps d’exécution total se décompose alors en trois parties :
- D(n) : le temps nécessaire à la division du problème en sous-problèmes.
- aT(n/b) : le temps de résolution des a sous-problèmes.
- C(n) : le temps nécessaire pour construire la solution finale à partir des solutions aux
sous-problèmes.
(1) si n c
• La relation de récurrence prend alors la forme : T ( n)
aT (n / b) D(n) C (n) sin on
7
Notations de Landau (1)
• Quand nous calculerons la complexité d’un algorithme, nous ne
calculerons généralement pas sa complexité exacte, mais son ordre
de grandeur.
8
Notations de Landau (2)
Exemples
• n = O(n), 2n = O(3n), n+2 = O(n) (Il suffit de prendre n0 = 2 et c = 2)
• sqrt(n) = O(n), log(n) = O(n), n = O(n2).
9
Notations de Landau (3)
: f ( g ) g ( f )
• Cela signifie que g « est majorée par f »
10
Notations de Landau (4)
: f ( g ) f ( g ) et g ( f )
• Ceci signifie que :
f ( g ) c, d R , n0 / n n0 d .g (n) f (n) c.g (n)
• Ce qui veut dire que chaque fonction est un majorant de l’autre ou encore que les deux fonctions
sont « de même ordre de grandeur asymptotique »
Exemples : n+log(n) = (n+sqrt(n)).
Remarques
• On peut considérer que :
• ( g ) est une borne supérieure
• ( g ) est une borne inférieure
• ( g ) est une borne exacte. Celle-ci est donc plus précise que les précédentes
11
7 Résolution des récurrences « diviser pour
régner »
Théorème 1 (Résolution des récurrences « diviser pour régner »)
• Soient a >=1 et b > 1 deux constantes,
soit f (n) une fonction et soit T(n) une fonction définie pour les entiers
positifs par la récurrence :
T (n) a.T (n / b) f (n)
• T(n) peut alors être bornée asymptotiquement comme suit :
12
Version-2 du théorème
OU
• Donc : a = 8,
• b = 2 logb a = 3
• f (n) = (n2) = (n logb a-1)
• On est donc dans le cas 1 du théorème (avec 1 ), l’algorithme a
donc une complexité en (n3)
14
Exemple-2
n
T (n) 9T n
3
• On est dans le cas : a=9 , b=3 et f(n)=n
log 9
n log a
b
n log 9
3
n 2
( n 2
) f ( n) n n 21
n 3
avec 1
On applique le cas 1 :
T (n) (n ) 2
15
Exemple-3 2n
T ( n) T 1
3
f (n) (n
log 3 1 logb a
)
n logb a n 2
1
• On applique donc le cas 2 :
T (n) (nlogb a. log n) (log n)
16
n
Exemple-4 T (n) 3T n log n
4
• On est dans le cas : a=3 , b=4 et f(n)=nlogn
n logb a n log4 3 (n 0,793 ) f (n) (n log4 3 ) avec 0.2
18