Approche naïve
function fois(m, n : integer) : integer; begin if (n = 0) then fois := 0 else if (n = 1) then fois := m else fois := fois(m, n - 1) + m; end;Exercice 1.1 : Calculer la complexité en nombre d'additions de cette fonction.
Approche ``Diviser pour régner''
function produit(m, n : integer) : integer;
var f : integer;
begin
if (n = 0) then produit := 0
else if (n = 1) then produit := m
else
begin
f := produit (m, n div 2);
if ((n mod 2) = 0) then produit := f + f
else produit := f + f + m
end;
end;
Afin de calculer la complexité en nombre d'additions
Programme Pascal associé :
type tableau = array [1..N] of integer;
procedure Trier(var t : tableau; i, j : integer);
begin
if (i < j) then
begin
Decouper(t, i, j, k); Trier(t, i, k - 1); Trier(t, k + 1, j);
end;
end;
La procédure Decouper garantit, qu'après exécution, pour le tableau
, l'élément de rang
vérifie :
. La complexité en temps
de Decouper est exactement égale à la taille du tableau t, soit
pour
notre exemple.
Les performances du tri rapide dépendent directement de la manière dont le découpage est réalisé.
Exercice 2.1 : Supposons que ce pire des cas survienne à chaque étape de l'algorithme, déterminer
la complexité de la procedure Trier.
NB : On utilisera une relation de récurrence de la forme
.
Exercice 2.2 : Supposons que le meilleur des cas survienne à chaque étape de l'algorithme, déterminer
la complexité de la procedure Trier.
NB : On utilisera une relation de récurrence de la forme
.