Professional Documents
Culture Documents
? But :
? Ré-ordonner les valeurs de la façon suivante
T[i] = T[i+1] ? i ? [1 .. Taillemax]
1
Tri par insertion (4) Tri par insertion : Exemple
? Complexité :
? Le corps de la boucle est exécuté n-1 fois 9435721
? Une itération :
? Recherche de la position : p
? Décalage des éléments : TC – p 4935721
? Total : TC 2345791
Au total :
n(n ? 1)
?
?
n?1
i?1
i? 3495721
2 1234579
? Complexité : O(n2)
3459721
? Dans le meilleur des cas quand le tableau est totalement trié, le tri
par insertion est linéaire.
? Amélioration : Recherche dichotomique : ? (n log2 n)
3457921
1234759
2
Tri par permutations (tri à bulles) Tri par permutation
TriParPermutation(T : Tableau d’entiers, TailleMax :
entier)
Entrées : T(tableau d’entiers), TailleMax (taille du
? Idée Simple : tableau)
? Si 2 éléments voisins ne sont pas ordonnés on les Sortie : Tableau trié T
Début
échange
i,j : entier;
? Deux parties dans le tableau :
Pour TC de 2 jqa TailleMax faire
? Les éléments de la partie triée sont inférieurs aux
Pour i de TailleMax en décroissant jqa TC faire
éléments de la partie non triée. Si T[i-1]> T[i] alors
Eléments triés < Eléments non triés T[i-1]? T[i];
Fin Si
Fin Pour
1 Fin Pour
TailleMax
Fin
3
Diviser pour Régner Tri Fusion
? 3 étapes :
? Séparer le pb en plusieurs sous-problèmes
? Diviser :
similaires au problème initial
? la séquence de n éléments à trier en 2 sous-séquences
? 3 étapes : de n/2 éléments.
? Diviser : le pb en un certain nombre de sous-pb ? Régner : Toute séquence de longueur 1 est triée
? Trier les 2 sous-séquences récursivement à l’aide du tri
? Régner : sur les sous-pbs en les résolvant
fusion
? Combiner : les solutions des sous-pbs en une
? Combiner : Action Principale : la fusion
solution unique. ? Fusionner les 2 sous-séquences triées pour produire la
séquence triée.
TF(A,5,5)=7
TF(A,5,6)=72
TF(A,5,8)=7216 TF(A,6,6)=2
TF(A,7,7)=1
TF(A,7,8)=16
TF(1,8,8)=6
4
Le tri fusion: Exemple Tri Rapide
Fusion(A,1,1,2)=4,9 ? Proposé par Hoare en 1962
? Diviser :
Fusion(A,3,3,4)=3,5 Fusion(A,1,3,4)=3,4,5,9 Fusion(A,1,4,8)=1,2,3,4,5,6,7,9
? T[p..r] est divisé en 2 sous-tableaux non vide T[p..q] et
T[q+1..r] tel que :
Fusion(A,5,5,6)=2,7 Fusion(A,5,6,8)=1,2,6,7
? Chaque élément de T[p..q] soit inférieur à chaque élément
de T[q+1..r]
Fusion(A,7,7,8)=1,6
? fonction Partitionner
? Régner :
? 2 sous-tableaux triés grâce à la récursivité
? fonction TriRapide
? Combiner :
? 2 sous-tableaux triés sur place : Rien à faire
3 8 2 6 4 1 5 7
espace de travail 5 8 2 6 4 1 3 7
3 8 2 6 4 1 5 7
en partant de gauche 5 8 2 6 4 1 3 7
le 1er élément aussi
grand que le pivot 3 1 2 6 4 8 5 7
en partant de droite
le 1er élément plus 5 8 2 6 4 1 3 7 3 1 2 6 4 8 5 7
petit que le pivot
3 1 2 6 4 8 5 7
échanger les éléments 5 8 2 6 4 1 3 7
3 1 2 4 6 8 5 7
5
Tri rapide exemple suite Tri Rapide : Complexité
3 1 2 4 6 8 5 7
? Temps d’exécution dépend de l’équilibre ou
non du partitionnement.
3 1 2 4 6 8 5 7 ? Si le partitionnement est équilibré : aussi
rapide que le tri fusion
3 1 2 4 6 8 5 7
? Si le partitionnement est déséquilibré : aussi
2 1 3 4 5 8 6 7
lent que le tri par insertion
5 6 8 7
2 1 8 7
1 2 3 4 5 6 7 8
? Partitionnement est équilibré. ? tous les tris vu dans ce cours sont tris par
? Il faut donc résoudre : comparaisons
? T(n) = 2T(n/2) + ? (n) ? un tri par comparaison est un tri dans lequel
6
Tri linéaire Optimalité des tris vus en cours
? Exemple le tri par dénombrement ? On va montrer qu’un tri par comparaison a une
? soit A un tableau d’entier inférieur ou égal à 6 complexité en ? (n log2 n)
3 6 4 1 3 4 1 4 ? Donc les tris qui ont une complexité en
? soit C un tableau auxiliaire qui compte le nombre O(nlog2 n) sont optimaux.
de fois qu’apparaît un entier
? Le tri fusion est optimal mais pas le tri rapide !
1 2 3 4 5 6
2
1
0 0 2
0
1 3
0
1
2 0 1
0
1 1 3 3 4 4 4 6
Récapitulatif Expérimentations:
Comparaisons pour 10 valeurs
Pire Meilleur
Algorithme des cas des cas Principe
Le tableau est croissant Le tableau est aléatoire Le tableau est décroissant
O ?
Prendre un élément non encore
?
trié
Insertion O(n2) (n) L’insérer à sa place dans
l’ensemble des éléments triés
Choisir le plus petit élément de
la partie non triée
Sélection O(n2) Mettre cet élément à la fin de la
partie triée
Si 2 éléments voisins ne sont
Tri Bulle O(n2) pas ordonnés on les échange