Académique Documents
Professionnel Documents
Culture Documents
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
Complexité des algorithmes récursifs.
Objectifs de ce module
• Étudier le cas de la complexité des algorithmes
récursifs :
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
Complexité des algorithmes récursifs.
Plan de ce module
1. Récursivités “simples“.
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
Complexité des algorithmes récursifs.
1. Récursivités “simples“
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
Plan de ce chapitre
a. Position du problème.
b. Suites arithmétiques et géométriques.
c. Suites récurrentes linéaires.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
a. Position du problème.
• Dans le module précédent on a étudié comment calculer la
complexité d’algorithmes itératifs.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
a. Position du problème.
• La complexité d’un algorithme récursif va donc être une
suite définie par récurrence.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
*
" n Î IN , un =aun- 1 + b
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
Si a =1 un =Q ( n)
Si a >1 un =Q ( a n )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
def factorielle(n):
if n == 0:
return 1
else:
return n*factorielle(n-1)
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
def factorielleIteratif(n):
resultat = 1
for i in range(2,n+1):
resultat *= i
return resultat
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
def hanoi(de,vers,via,n):
if n==1:
print(de," vers ",vers)
else:
hanoi(de,via,vers,n-1)
print(de," vers ",vers)
hanoi(via,vers,de,n-1)
hanoi("1","3","2",3)
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
T ( n) =Q ( 2 n )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
( E) x 2 - ax - b =0
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
ì 0 si n =0
ï
un =í 1 si n =1
ï u +u si n ³ 2
î n- 1 n- 2
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
( E) x 2 - x - 1 =0
•On a alors
1+ 5 1- 5
D =5, x1 = et x2 =
2 2
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
n n
æ1+ 5 ö æ1- 5 ö
$ l , m Î IR, " n Î IN, un =l. ç ÷ + m. ç ÷
è 2 ø è 2 ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
•On a u0 = 0 et u1 = 1 donc
ì0 =l + m
ï
í æ1+ 5 ö æ1- 5 ö
ï1 =l. ç ÷+ m. ç ÷
î è 2 ø è 2 ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
si x >1 x n ® +¥
si - 1 < x <1 xn ® 0
n
si x £- 1 x n'a pas de limite
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
un =Q ( x1n )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
1+ 5 1- 5
D =5, x1 = et x2 =
2 2
ææ ö
nö
ç 1+ 5 ÷
un =Q ç ÷
çè 2 ø ÷
è ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
( )
" n ³ 2, v n =av n- 1 +bv n- 2 + f n
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
•Si pour cette suite (un)n , Δ > 0, x1 > 1 et abs(x1) > abs(x2) et si
de plus f(n) est une fonction polynomiale alors
vn =Q ( x1n )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
def fibonnaci(n):
if n<2:
return n
else:
return fibonnaci(n-1) + fibonnaci(n-2)
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
ì 0 si n =0
ï
un =í 1 si n =1
ï u +u si n ³ 2
î n- 1 n- 2
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
•On est dans le cadre du résultat précédent sur les suites non
homogènes donc
ææ ö
nö
1+ 5
T ( n ) =Q çç ÷÷
çè 2 ø ÷
è ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
1. Récursivités “simples“.
Fin de ce chapitre
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
Complexité des algorithmes récursifs.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
Plan de ce chapitre
a. Position du problème.
b. L’exemple du tri fusion.
c. Le “master theorem“ (cas simple).
d. Le “master theorem“ (cas général).
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
a. Position du problème.
Rappel des trois étapes du paradigme “diviser pour régner“
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
a. Position du problème.
• Avec ce paradigme, la complexité d’un algorithme traitant
des données de taille n va naturellement dépendre de la
complexité du même algorithme avec des données de
taille n/b, où b est le facteur avec lequel on divise le
problème en sous-problèmes.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
7 5 14 4 10 2 8
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
7 5 14 4 10 2 8
7 5 14 4 10 2 8
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
7 5 14 4 10 2 8
7 5 14 4 10 2 8
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
7 5 14 4 10 2 8
7 5 14 4 10 2 8
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
7 5 14 4 10 2 8
5 7 4 14 2 10 8
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
5 7 4 14 2 10 8
4 5 7 14 2 8 10
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
4 5 7 14 2 8 10
2 4 5 7 8 10 14
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
2 4 5 7 8 10 14
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
def triFusionRec(l,first,last):
if first<last:
triFusionRec(l,first,(first+last)//2)
triFusionRec(l,((first+last)//2)+1,last)
fusion(l,first,(first+last)//2,last)
def triFusion(l):
triFusionRec(l,0,len(l)-1)
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
T ( n ) =O ( n ´ log 2 ( n ) )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
æn ö
•Le coût d’un niveau j est donc j
2 ´ ç j ÷=n
è2 ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
æn ö
2 ´ ç ÷=n
è2 ø
æn ö
2 2 ´ ç 2 ÷=n
è2 ø
æn ö
2 3 ´ ç 3 ÷=n
è2 ø
log 2 ( n) æ n ö
2 ´ ç log ( n) ÷=n
è2 2 ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
•Conclusion : T ( n ) =O ( n ´ log 2 ( n ) )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
def divideAndConquer(n):
if n ==1:
end of processing
else:
divideAndConquer(n//b)
divideAndConquer(n//b)
... a times
divideAndConquer(n//b)
work of cost f(n) for dividing the problem
and merging the solutions to
the subproblems
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
æn ö
T ( n) =aT ç ÷+ f ( n )
èb ø
•Alors :
ì d
ï Q ( )
n si log b ( a) < d
ï
T ( n ) =í Q ( n d log ( n ) ) si log b ( a) =d
ï
ï Q n logb ( a)
( ) si log b ( a) > d
î
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
•Alors :
ì d
ï Q ( )
n si a < b d
ï
T ( n) =í Q ( n d log ( n ) ) si a =b d
ï
ï Q n logb ( a)
( ) si a > b d
î
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
a appels récursifs nd
d
æn ö
a´ ç ÷
èb ø
d
2æn ö
a ´ ç 2÷
èb ø
d
3æn ö
a ´ ç 3÷
èb ø
d
logb ( n) æ n ö
a ´ ç log ( n) ÷
èb b ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
logb ( n) d logb ( n) j
æn ö æa ö
å a ´ ç j ÷ =n d
j
èb ø
å ç d÷
èb ø
j=0 j=0
a
•Tout dépend donc de la valeur
bd
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
•Si a < bd, le coût d’un niveau est une fonction décroissante
de j. Moralement la complexité sera essentiellement celle de
l’appel initial donc en nd.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
•Si a > bd, le coût d’un niveau est une fonction croissante de j.
Moralement la complexité sera essentiellement celle due aux
appels finaux. Elle sera donc de l’ordre du nombre de feuilles
de l’arbre des appels récursifs, i.e. nlogb(a).
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
log b ( n) j log b ( n)
æa ö
nd å ç d÷ =
èb ø
nd å 1
j=0 j=0
= n d ´ log b ( n )
D’où d
T ( n ) =Q ( n log ( n ) )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
r 1 r 1
r
1 q q 1
si q 1, q j
j 0 1 q q 1
r
1
si q 1, q j
j 0 1 q
r 1
r 1
r
q
si q 1, q j
q 1
j 0 q 1 q 1
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
log b ( n) j
æa ö 1
n d
å ç d ÷ £n
èb ø
d
a
j=0 1- d
b
D’où T ( n ) =Q ( n d )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
j
æ ö
logb ( n )
æa ö dæa ö
logb ( n )
ç 1 ÷
n å ç d ÷ £n ç d ÷ ç1+
d
÷
èb ø èb ø ç a
j=0 - 1 ÷
è bd ø
Or
nd - d log b ( n) logb ( n)
-d
b
d log b ( n)
=n b d d
=n b ( ) =n d n - d =1
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
log b ( n)
•On a alors (
T ( n) =Q a )
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
æn ö
T ( n) =aT ç ÷+ f ( n )
èb ø
( ) ( ) ( )
d
si f n =O n avec d < log b a alors T n =Q n ( ) ( log b a ( )
)
si f ( n ) =Q ( n ) avec d =log ( a ) alors T ( n ) =Q ( n ( ))
d ( )
log b a
b
log n
ænö
( ) ( ) d
si f n =W n avec d > log b a et si a. f ç ÷£c. f n avec c <1
èbø
( ) ( )
( )
alors T n =Q f n( ( ))
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
n æn ö 3
T ( n ) =2 T ç ÷+ n
è2 ø
æn ö æn ö 2
T ( n ) =T ç ÷+T ç ÷+ n
è2 ø è 4 ø
1 æn ö
T ( n ) = T ç ÷+ n
2 è2 ø
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
2. Algorithmes de type “diviser pour régner“.
Fin de ce chapitre
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com
Complexité des algorithmes récursifs.
©
© SUPINFO
SUPINFO International
International University
University –– http://www.supinfo.com
http://www.supinfo.com