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

  Nombre d'instructions élémentaires

par 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-2n2h-1

D'où

hlg2(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

TP+k1(n*lg2(n))

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))

k2 est une constante. D'où

T=(n*lg2(n))