Complexité en temps dans le pire cas de
triRapide
Mis à part les appels récurssifs, ainsi que la boucle interne for(i=gauche+1;i<=droit;i++) noté B, les instructions de la fonctions triRapide sont réalisées en temps constant; la procedure echanger est clairement executée en temps constant. On note q le facteur constant représentant la somme des temps constants de la boucle interne B et p les autres temps constants. Pour évaluer le temps consommé par cette fonction par rapport à la taille n de l'instance initiale, il faut alors :
Il reste donc à énumérer le nombre d'appel récurssif.
Tout le source.
Initialement gauche=1 et droite=n. On peut alors énumérer ainsi:
Niveau |
|
Premier niveau (n=8) | p+(q*(n)) |
Second niveau | 2*{p+(q*n/2)} |
Troisième niveau | 4*{p+(q*n/4)} |
... | ... |
h-1 | 2h-2*{p+(q*n/(2h-2))} |
Dernier niveau h | n |
Majoration de h
On peut modéliser l'ensemble des appels de la fonction triRapide par une arbre binaire équilibré. Si h désigne la hauteur minimum de l'arbre binaire alors
2h-2
n
2h-1
D'où
h
lg2(n)+2
Remarques
Les opérations effectuées sur le niveau h sont en faite réalisées toutes en temps constant car il s'agit uniquement du test suivant:
Ainsi à ce niveau il y a n conditions executées. C'est tout.
Conclusion
On calcule la somme des opérations élémentaires sur les h niveaux. On note P= p+2p+4p+...2h-2*p et Q=(h-1)*(q*n). On a alors une complexité en temps T en P+Q, ie
T
P+k1(n*lg2(n))
où k1 est une constante. La somme P est la somme des élément d'une suite geometrique de raison 2 et de premier terme U0=1. Alors
1+2+4+8+16+...+2h=U0+U1+U2+U3+..+Uh
=20+21+22+23+24+...+2h
=(2(h+1)-1)/(2-1)
=2(h+1) -1
de plus, on peut remarquer que
1+2=4-1
1+2+4=8-1
1+2+4+8=16-1
soit 1+2+4+8+16+...+2h = 2(h+1) -1 !!!!!
Ainsi P= p * (2(h-1) -1). Puisque 2lg2(x)=x on a :
Tk2n+k1(n*lg2(n))
où k2 est une constante. D'où
T=(n*lg2(n))