Tris

publicité
ALGORITHMIQUE II
TRIS ITERATIFS
SMI ALGOII
1
2
Le problème:
Etant donnée une suite de n nombres (a1,a2,…, an), on
cherche une permutation (arrangement) des éléments
de cette suite (a’1,a’2,…, a’n) telle que a’1≤a’2≤…≤a’n.
♦ A partir de la suite (7,1,2,6), un algorithme de tri
donne comme résultat la suite (1,2,6,7).
On se limite aux nombres entiers rangés dans un
tableau A à n éléments.
Dans le cas où les éléments sont des collections de
données (enregistrement), on trie le tableau suivant une
clé (champ de l’enregistrement).
SMI ALGOII
3
Tri par sélection:
Algorithme:
pour i=1 à n-1 faire
-chercher le 1ème minimum, Ak , de {Ai+1,…,An}
(K est l’indice de min{Ai+1,…,An} dans le tableau A)
- échanger Ai et Ak
L’algorithme fonctionne selon le schéma suivant:
échange
A
trié
1
i
SMI ALGOII
k
n
•
Exemple
7
3
2
9
5
4
2
3
7
9
5
4
2
3
7
9
5
4
3
2
2
2
3
3
5
9
4
5
4
4
SMI ALGOII
5
7
9
7
7
9
4
Analyse du tri par sélection
5
Algorithme:
Tri_selection(A,n)
début
pour i := 1 à n-1 faire
//Recherche de min{Ai, …, An} = Ak
k := i;
pour j:=i+1 à n faire
si A[j] < A[k] alors k:=j;
fsi;
fpour
// échange de Ak et Ai
temp := A[k];
A[k] := A[i];
A[i] := temp;
fpour;
fin
La boucle j détermine le iè minimum;
elle tourne n-i fois (au maximum) pour
faire (n-i) tests d’éléments.
Les échanges de A[k] et A[i]
demandent 3 opérations.
La complexité du corps de la boucle j
est de la forme
a(n-i)+b, donc en O(n-i) ( i=1, …, n-1).
La complexité de l’algorithme est de
l’ordre de:
T(n) = O(n2)
SMI ALGOII
TRI par ISERTION
6
Algorithme:
Pour i := 2 à n faire
- on insère A[i], à sa place, dans le sous-tableau
A[1..i-1]
(On cherche le 1er élément ≤ A[i] parmi {A[i-1],…,A[1]} en
décalant d’une position à droite)
L’algorithme fonctionne selon le schéma suivant:
A[i]
A
triétrié
1
i-1 i
SMI ALGOII
3
•
i=2
exemple
>
7
3
2
5
7
7
2
5
3
7
2
5
2
3
7
2
5
3
7
7
5
3
3
7
5
2
3
7
5
i=3
5
2
3
2
3
7
5
5
7
i=4
SMI ALGOII
7
Analyse du tri par insertion
8
Algorithme:
Tri_Insersion(A,n)
début
pour i := 2 à n faire
cle := A[i];
j := i-1;
Tantque (j≥1) et (cle<A[j]) faire
A[j+1] := A[j];
j := j-1;
ftantque
A[j+1] = cle;
fpour
fin
La boucle j tourne, dans le
pire des cas, (i-1) fois
(i-1 comparaisons et i-1
décalages)
La complexité du corps de la
boucle i est de la forme
a(i-1)+b, pour i=2,…,n.
La complexité de l’algorithme:
T(n) = O(n2)
SMI ALGOII
Tri à Bulles
9
On dit qu’on a une inversion s’il existe (i,j) tels que i<j et
ai > aj
(a1,…,ai , ai+1,…,an)
(a1,…,ai+1,ai,…,an)
Un tableau est trié s’il n’a aucune inversion. La complexité du
tri est proportionnelle au nombre d’inversions qui est de
l’ordre de
(nombre de couple(i,j) tels que i<j).
L’algorithme consiste à parcourir le tableau à trier en
examinant si chaque couple d’éléments consécutifs (ai, ai+1)
est dans le bon ordre ou non, si ce couple n’est pas dans le
bon ordre on échange ses éléments et ce processus est
répété tant qu’il reste des inversions à faire.
SMI ALGOII
Tri à Bulles
10
Algorithme1:
Bulles1(A,n)
Début
fini := faux;
Tant que non fini faire
i:=1;
tant que (i < n) et (A[i] ≤ A[i+1] ) faire
i := i + 1 ;
ftantque;
si i < n alors
échanger (A[i], A[i+1]) ;
fini := faux ; }
sinon
fini := vrai ;
fsi;
ftantque;
fin
On remarque que les transpositions successives
font pousser le maximum à la dernière position
du tableau si on fait un balayage de gauche à
droite et le minimum à la 1ère position si on fait
un balayage de droite à gauche.
Algorithme2:
Bulles2(A,n)
Début i := 1;
tantque i ≤ n-1 faire der_ech := n;
pour j := n à i+1 pas -1 faire
si A[j-1] > A[j] alors
échanger(A[j], A[j-1]); der_ech := j;
fsi;
fpour; i := der_ech;
ftantque;
Fin
Le nombre de comparaison d’éléments de A ≤
Le nombre d’échanges ≤
T(n) = O(n2)
SMI ALGOII
•
Exemple
3
7
5
2
3
7
2
5
i=1
Der_ech=2
I=2
Der_ech=4
i=4
3
2
7
5
2
3
7
5
2
2
3
5
3
5
SMI ALGOII
7
7
11
Téléchargement