CentraleSupélec LMF, UMR CNRS 9021
Département informatique Laboratoire Méthodes Formelles
Bât Breguet, 3 rue Joliot-Curie Bât 650 Ada Lovelace, Université Paris Sud
91190 Gif-sur-Yvette, France Rue Noetzlin, 91190 Gif-sur-Yvette, France
TD de FISDA n°2 : complexité et tri rapide

Exercice 1

On considère le programme suivant, qui calcule {$n^p$} :

Calculer la coimplexité de cet algorithme en nombre de multiplications dans le meilleur et dans le pire des cas.

Exercice 2 : Analyse de l'algorithme du tri rapide

L'algorithme du tri rapide pour classer les éléments d'un tableau tab situés entre les indices min et max inclus est :

Cet algorithme consiste à mettre un élément particulier, le pivot, à la place qu'il aurait dans le tableau classé, en déplaçant tous les éléments qui lui sont inférieurs ou égaux à sa gauche, et tous ceux qui lui sont supérieurs à sa droite. Si p est la position du pivot, il ne reste ensuite qu'à appliquer de nouveau l'algorithme au sous-tableau de droite (entre min et p-1) et au sous-tableau de droite (entre p+1 et max).

L'appel de tri_rapide(tab, 0, n-1) trie tous les éléments du tableau s'il est de taille n.

L'opération partition est celle qui réalise effectivement le tri lors des appels récursifs à tri_rapide :

La configuration des éléments du tableau lors du test de l'élément d'indice k est indiquées sur la figure suivante :

Le symbole • indique le pivot, les symboles ≤ et > indiquent des éléments respectivement inférieurs ou égaux et strictement supérieurs au pivot. Le symbole ? indique des éléments dont on ne connait pas encore la position par rapport au pivot.

Question 1

Calculez la complexité en nombre de comparaisons d'éléments du tableau de l'algorithme de partition.

Question 2

Calculez la complexité en moyenne {$M(n)$} (en nombre de comparaisons d'éléments du tableau) de l'algorithme du tri rapide pour un tableau de taille {$n$}.

Montrez que cette complexité vérifie : {$${\displaystyle M(n) = n-1+\frac{1}{n} \sum_{p=1}^{n}\left(M(p-1) + M(n-p)\right)}$$}