Download Guide de compréhension Tri recursif and more Study Guides, Projects, Research Advanced Algorithms in PDF only on Docsity!
as
Architecture des Systèmes d’Information
Tris r´ecursifs
I3 - Algorithmique et programmation
Nicolas Delestre
as
Architecture des Systèmes d’Information
Plan...
1 Introduction
2 Le tris rapide (Quick sort)
3 Tri par fusion
4 Conclusion
as
Architecture des Systèmes d’Information
Principe des tris r´ecursifs
Principe
L’algorithme des tris r´ecursifs est bas´e sur le principe :
Diviser : On divise le tableau en deux
R´egner : On trie ces deux tableaux
Combiner : On combine ces deux tableaux
Il existe deux tris r´ecursifs
Le tri rapide : “l’intelligence” du tri se trouve au niveau de la
division du tableau (partitionnement)
Le tri par fusion : “l’intelligence” du tri se trouve au niveau la
combinaison des deux tableaux
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 1 / 9
Principe
1 Partitionner le tableau afin que tous les ´el´ements du sous-tableau gauche soient
plus petits ou ´egaux `a un ´el´ement (le pivot)
2 Trier le sous-tableau gauche et le sous-tableau droit
algorithme
proc´edure triRapide (E/S t :Tableau[1..MAX] d’Entier,E nb :Naturel)
debut
triRapideRecursif(t,1,nb)
fin
proc´edure triRapideRecursif (E/S t :Tableau[1..MAX] d’Entier,E d,f :Naturel)
D´eclaration indicePivot : Naturel
debut
si d<f alors
partionner(t,d,f,indicePivot)
triRapideRecursif(t,d,indicePivot-1)
triRapideRecursif(t,indicePivot+1,f)
finsi
fin
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 3 / 9
Arbre des appels de proc´edures
5 3 7 6 9 1 3 7 9 8
1 3 3 5 9 6 7 7 9 8
1 3 3 9 6 7 7 9 8
1 3 3
3 3
3 3
3
8 6 7 7 9 9
8 6 7 7
7 6 7 8
7 6 7
7 6 7
7 6
6 7
6
partitionner
trier
9
9
9
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 4 / 9
Exemple de fonctionnement du partitionnement
d f
i j
d f
i j
d f
i j
d f
i j
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 6 / 9
Exemple de fonctionnement du partitionnement
d f
i j
d f
j i
d f
Ip
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 7 / 9
proc´edure partitionner (premi`ere version)
proc´edure partitionner (E/S t : Tableau[1..MAX] d’Entier ; E debut,fin : Naturel ; S
indicePivot : Naturel)
D´eclaration i,j,pivot : Naturel
debut
pivot ← t[debut]
i ← debut
j ← fin
tant que i≤j faire
tant que t[i]≤pivot et i≤j faire
i ← i+
fintantque
tant que t[j]>pivot et i≤j faire
j ← j-
fintantque
si i≤j alors
echanger(t[i],t[j])
finsi
fintantque
indicePivot ← j
echanger(t[debut],t[j])
fin
as
Architecture des Systèmes d’Information
Le tri rapide (Quick sort) 9 / 9
Calcul de la complexit´e
La proc´edure de partionnement a une complexit´e en n. La complexit´e du
tri rapide d´epend donc du nombre d’appels r´ecursifs (hauteur h de l’arbre
de r´ecursion)
Dans le meilleur des cas, le partitionnement coupe le tableau en deux parties de
mˆeme longueur (a plus ou moins 1 pres)
On a : n = 2
h
, donc h = log 2 n
Donc on a Ω(nlog 2 n)
Dans le pire des cas, le partionnement coupe le tableau en deux sous tableaux,
l’un de longueur 1 et l’autre n − 1
Dans ce cas h = n
Et donc on a O(n
En moyenne on a Θ(nlog 2 n)
Complexit´e
Ω(nlog 2 n) Θ(nlog 2 n) O(n^2 )
as
Architecture des Systèmes d’Information
Le tri par fusion 1 / 6
Principe
1 Diviser le tableau en deux sous-tableaux de mˆeme longueur (`a plus
ou moins 1 pr`es)
2 Trier le sous-tableau gauche et le sous-tableau droit
3 Fusionner les deux sous-tableaux
algorithme
proc´edure triFusion (E/S t :Tableau[1..MAX] d’Entier,E nb :Naturel)
debut
triFusionRecursif(t,1,nb)
fin
proc´edure triFusionRecursif (E/S t :Tableau[1..MAX] d’Entier,E d,f :Naturel)
debut
si d<f alors
triFusionRecursif(t,d,(d+f) div 2)
triFusionRecursif(t,((d+f) div 2)+1,f)
fusionnner(t,d,(d+f) div 2,f)
finsi
fin
as
Architecture des Systèmes d’Information
Le tri par fusion 3 / 6
Arbre des appels de proc´edures
5 3 7 6 9 1 3 7 9 8
fusionner
trier
5 3 7 6 9 1 3 7 9 8
5 3 7 6 9 1 3 7 9 8
5 3 7 6 9
5 3 7 6 9
5 3 7
5 3 7
5 3
5 3
3 5
3 5 7
3 5 6 7 9
1 3 7 9 8
1 3 7 9 8
1 3
1 3
6 9
6 9
6 9
1 3
1 3 7 9 8
1 3 7 9 8
8 9
1 3 7
1 3 7 8 9
1 3 3 5 6 7 7 8 9 9
diviser
as
Architecture des Systèmes d’Information
Le tri par fusion 4 / 6
Exemple de fonctionnement de fusionner
d f
Le tableau interm´ediaire :
as
Architecture des Systèmes d’Information
Le tri par fusion 6 / 6
Calcul de la complexit´e
Soit h La hauteur de l’arbre de r´ecursion
Ici on a toujours n = 2
h
, donc h = log 2 n
Donc en temps on a Ω(nlog 2 n), O(nlog 2 n) et Θ(nlog 2 n)
Mais on a besoin d’un tableau interm´ediaire pour fusionner
Complexit´e
Ω(nlog 2 n) Θ(nlog 2 n) O(nlog 2 n)
as
Architecture des Systèmes d’Information
Conclusion
Il existe plusieurs algorithmes de tri que l’on peut classer suivant :
les m´ethodes utilis´ees (it´eratifs ou r´ecursifs)
les performances
Ces cours ne pr´esentent pas toutes les m´ethodes de tri, entre autres :
le shellsort
le heapsort (ou tri par tas)
L’un des meilleurs car en O(nlog 2 n) et it´eratif
le radixsort
etc.