Application Algorithmes de Tri
Application Algorithmes de Tri
Application Algorithmes de Tri
4
3. Tri par insertion binaire
Principe
• La séquence destination étant ordonnée, nous pouvons donc appliquer une recherche
binaire ce qui accélèrera la recherche.
Algorithme
For I := 2 To N Do
X := A(I)
k=Recherche_Binaire( A , I-1, X)
Decaler_Droite( A , k, I-1)
A (k) := X
Endfor
Algorithme
Repeat
No_permutation := True
For I := 1 To N-1 Do
If (A(I) > A (I+1)) Then
X :=A(I) ; A(I) := A(I+1) ; A(I+1) := X
No_Permutation := False
Endif
Endfor
Until ( No_permutation)
Quelle est la complexité de cet algorithme ?
6
5. Tri arborescent
Principe
• La méthode du tri arborescent veut mémoriser toute information obtenue à l’issu
des comparaisons pour l’exploiter dans l’établissement de l’ordre final. Pour ce
faire elle construit une arborescence qui traduit la relation qui existe entre tous
les éléments.
• Soit le tableau suivant à ordonner :
44 55 12 42 94 18 6 67
8
5. Tri par fusion
Algorithme
• La principale action de l’algorithme du tri par fusion est justement la fusion des
deux listes triées.
La fusion
• Le principe de cette fusion est simple: à chaque étape, on compare les éléments
minimaux des deux sous-listes triées, le plus petit des deux étant l’élément
minimal de l’ensemble on le met de côté et on recommence. On conçoit ainsi un
algorithme « Fusionner » qui prend en entrée un tableau A et trois entiers, p, q et
r, tels que p<=q < r et tels que les tableaux A[p..q] et A[q+1..r] sont triés.
9
5. Tri par fusion
Le tri
Fusionner (A, p, q, r) // Fusionner les 2 sous-tableaux While i<=q do
A(pq) et A(q+1r) C[k]=A[i] ; i=i+1 ; k=k+1
i=p // les 2 sous tableaux sont supposés triés Endwhile
j=q+1 ; k=1 While j<=r do
while (i<=q et j<=r ) do C[k]=A[j] ; j=j+1 ; k=k+1
if ( A[i] < A[ j] ) then Endwhile
C[k] = A[i] ; i=i+1 For k=1 to r-p+1 do // Recopier le tableau C
else dans le tableau original
C[k]=A[ j] ; j=j+1 A(p+k-1)= C(k)
endif Endfor
k=k+1 EndFusionner
Endwhile
10
5. Tri par fusion
Tri_Fusion(A, p, r)
If (p<r ) then
q= (p+r)/2
Tri_Fusion(A, p, q)
Tri_Fusion(A,q+1,r)
Fusionner(A,p,q,r)
Endif
End_Tri_Fusion
11
5. Tri par fusion
Quelle est la complexité de cet algorithme ?
Complexité de la fusion
Étudions les différentes étapes de l’algorithme :
– les initialisations ont un coût constant Q(1) ;
– la boucle While de fusion s’exécute au plus r-p fois, chacune de ses
itérations étant de coût constant, d’où un coût total en O(r-p) ;
– les deux boucles While complétant C ont une complexité respective au pire
de q-p+1 et de r-q, ces deux complexités étant en O(r-p) ;
– la recopie finale coûte Q(r-p+1).
Par conséquent, l’algorithme de fusion a une complexité en Q(r-p).
12
5. Tri par fusion
Complexité de l’algorithme de tri par fusion
l’algorithme Tri_Fusion est de type « diviser pour régner ». Il faut donc étudier ses trois
phases:
Diviser : cette étape se réduit au calcul du milieu de l’intervalle [p,r], sa complexité est
donc en Q(1).
Régner : l’algorithme résout récursivement deux sous-problèmes de tailles respectives
(n/2) , d’où une complexité en 2T(n/2).
Combiner : la complexité de cette étape est celle de l’algorithme de fusion qui est de Q(n)
pour la construction d’un tableau solution de taille n.
Par conséquent, la complexité du tri par fusion est donnée par la récurrence :
(1) si n 1
T ( n)
2T (n / 2) (n) sin on 13
5. Tri par fusion
• Pour déterminer la complexité du tri par fusion, nous utilisons le
théorème de résolution des récurrences avec : a = 2 et b = 2, donc
logb a = 1 et nous nous trouvons dans le deuxième cas du théorème :
f (n) = Q(nlogb a) = Q(n). Par conséquent :
• Pour des valeurs de n suffisamment grandes, le tri par fusion avec son
temps d’exécution en Q(nlogn) est nettement plus efficace que le tri
par insertion dont le temps d’exécution est en Q(n2).
14
6. Tri rapide (Quicksort)
Principe
• Le tri rapide est fondé sur le paradigme « diviser pour régner », tout comme le tri
fusion, il se décompose donc en trois étapes :
Diviser : Le tableau A[p..r] est partitionné (et réarrangé) en deux sous-tableaux non
vides, A[p..q] et A[q+1..r] tels que chaque élément de A[p..q] soit inférieur ou égal
à chaque élément de A[q+1..r].
L’indice q est calculé pendant la procédure de partitionnement.
Régner : Les deux sous-tableaux A[p..q] et A[q+1..r] sont triés par des appels
récursifs.
Combiner : Comme les sous-tableaux sont triés sur place, aucun travail n’est
nécessaire pour les recombiner, le tableau A[p..r] est déjà trié !
15
6. Tri rapide (Quicksort)
Algorithme
16
6. Tri rapide (Quicksort)
Complexité
Pire cas
Le cas pire intervient quand le partitionnement produit une région à
n-1 éléments et une à 1 élément.
T (n) 2T (n / 2) (n)
ce qui donne d’après le théorème de résolution des récurrences :
19