Méthodologie de la programmation –E2I.1

publicité
Vue d
d'ensemble
ensemble
Introduction aux algorithmes de tri
Les tris séquentiels
Méthodologie de la programmation –E2I.1Les algorithmes de tri
Les tris récursifs
C ill CHAVET
Cyrille
2
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Plan
Généralités
Vérifier la correction
Notions de complexité
Objectifs
‰ Tri:
¾ Ordonner un ensemble d’éléments selon un ensemble de clés sur lesquelles
Introduction aux algorithmes de tri
est définie une relation d’ordre
¾ Gé
Généralités
é lité
¾ Vérifier la correction
¾ Notions de complexité
‰ Algorithmes fondamentaux en informatique:
¾ Base de données, ordonnancement...
Les tris séquentiels
‰ Illustration de concepts vus précédemment:
Les tris récursifs
¾ Boucles, Récursivité
‰ Introduction de concepts clefs en informatique:
¾ Complexité
C
l ié
¾ Stratégie «Diviser pour régner»
3
4
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Généralités
Vérifier la correction
Notions de complexité
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Procédure d
d’échange
échange
Généralités
Vérifier la correction
Notions de complexité
Concept d’invariant
d invariant de boucle
‰ Les algorithmes de tri utilisent une procédure permettant
‰ Prouver la validité d’un algorithme
d’échanger (de permuter) deux variables.
‰ Définition:
¾ Un invariant de boucle est une propriété qui reste vraie à
Procédure Echanger (a,b : Entier)
Déclaration Temp : Entier
Début
Temp ←a
a←b
b ← Temp
Fin
chaque passage dans la boucle (en un point précis)
‰ Il faut donc:
¾ Définir un invariant qui assure qu’à la fin la propriété voulue
est satisfaite
¾ S’assurer qu’il est vrai avant d’entrer dans la boucle
¾ Vérifier
é
par récurrence
é
qu’il reste vrai après
è chaque exécution
é
de la boucle
5
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Généralités
Vérifier la correction
Notions de complexité
6
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Exemple d
d’invariant
invariant de boucle
Généralités
Vérifier la correction
Notions de complexité
Exemple d
d’invariant
invariant de boucle
‰ Produit des chiffres d
d’un
un nombre
‰ Produit des chiffres d
d’un
un nombre
Fonction ProduitsChiffres(n : Entier) : Entier
Déclaration x : Entier
Début
x←1
Répéter
x ← x*(n mod 10)
n ← n / 10
Jusqu’à (n < 1)
Fi
Fin
Fonction ProduitsChiffres(n : Entier) : Entier
Déclaration x : Entier
Début
x←1
Répéter
x ← x*(n mod 10)
n ← n / 10
Jusqu’à (n < 1)
Fin
Fi
Exemple:
ProduitChiffres(1234) = 1*2*3*4
= 24
7
Précondition: n>0, x=1
8
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Généralités
Vérifier la correction
Notions de complexité
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Exemple d
d’invariant
invariant de boucle
Généralités
Vérifier la correction
Notions de complexité
Exemple d
d’invariant
invariant de boucle
‰ Produit des chiffres d
d’un
un nombre
Fonction ProduitsChiffres(n : Entier) : Entier
Déclaration x : Entier
Début
x←1
Répéter
x ← x*(n mod 10)
n ← n / 10
Jusqu’à (n < 1)
Fin
Fi
‰ Produit des chiffres d
d’un
un nombre
Précondition: n>0, x=1
Fonction ProduitsChiffres(n : Entier) : Entier
Déclaration x : Entier
Début
x←1
Répéter
x ← x*(n mod 10)
n ← n / 10
Jusqu’à (n < 1)
Fi
Fin
Invariant:
- ni = n/10i
- xi = produit des chiffres de (n-10i*ni)
Précondition: n>0, x=1
Invariant:
- ni = n/10i
- xi = produit des chiffres de (n-10i*ni)
Terminaison:
i > log10(n),
(n) ni = 0
Correction:
xi = produit des chiffres de (n)
9
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
10
Généralités
Vérifier la correction
Notions de complexité
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Exemple d
d’invariant
invariant de boucle
Généralités
Vérifier la correction
Notions de complexité
Evaluer la complexité d
d’un
un algorithme
‰ Produit des chiffres d
d’un
un nombre
‰ Idée:
¾ Compter le nombre de permutations, le nombre de tours dans une boucle…
Fonction ProduitsChiffres(n : Entier) : Entier
Déclaration x : Entier
Début
x←1
Répéter
x ← x*(n mod 10)
n ← n / 10
Jusqu’à (n < 1)
Fi
Fin
Précondition: n>0, x=1
Invariant:
- ni = n/10i
- xi = produit des chiffres de (n-10i*ni)
Terminaison:
i > log10(n),
(n) ni = 0
Correction:
xi = produit des chiffres de (n)
Fonction Exemple(n : Entier) : Entier
Déclaration i, j : Entier
Déb t
Début
…
pour i de 0 à n-1
pour j de
d 0 à n-1
1
…
fin pour
fin pour
…
Fin
11
12
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Généralités
Vérifier la correction
Notions de complexité
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Evaluer la complexité d
d’un
un algorithme
Généralités
Vérifier la correction
Notions de complexité
Evaluer la complexité d
d’un
un algorithme
‰ Idée:
‰ Idée:
¾ Compter le nombre de permutations, le nombre de tours dans les boucles…
Fonction Exemple(n : Entier) : Entier
Déclaration i, j : Entier
Déb t
Début
…
pour i de 0 à n-1
pour j dde 0 à n-1
1
…
fin pour
fin pour
…
¾ Compter le nombre de permutations, le nombre de tours dans une boucle…
‰ Définition:
¾ Déterminer une fonction f:
+
q ,
qui,
à un paramètre n dépendant de la donnée soumise à l'algorithme (n est la
taille de cette donnée, e.g. la taille du tableau a trier),
associe le coût f(n) (exprimé en unités arbitraires de temps ou d'espace)
de ll'exécution
exécution de algorithme pour la donnée
n tours
Fin
n tours
⇒ Soient n*n = n2 tours,
La complexité de cet algorithme peut
ss’exprimer
exprimer en O(n2)
13
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
14
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Plan
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Algorithme
de Tri à bulles
‰ Idée de M.
M De Lapalisse :
¾ Un tableau trié en ordre croissant, c’est un tableau dans lequel tout
élément est plus petit que celui qui le suit…
Introduction aux algorithmes de tri
‰ Principe de la méthode :
¾ Sélectionner le minimum du tableau en parcourant le tableau de la
g
tout couple
p d'éléments consécutifs
fin au début,, et en échangeant
non ordonnés
Les tris séquentiels
¾ Tri à bulles
¾ Tri par sélection
¾ Tri par insertion
Les tris récursifs
Cet algorithme sera vu en TD …
15
16
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par sélection
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Algorithme
de Tri par sélection
‰ Idée:
‰ Idée:
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
pour i de 1 à N-1:
N 1:
min = i
pour j de i+1 à N:
si Tj < Tmin
i alors min = j
1
N
Echanger(Ti, Tmin)
17
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Déroulement
de ll’algorithme
algorithme
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Déroulement
de ll’algorithme
algorithme
‰ Idée:
‰ Idée:
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
pour i de 1 à N
N-1:
1:
min = i
pour j de i+1 à N:
si Tj < Tmin alors min = j
18
Min = 1
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
pour i de 1 à N
N-1:
1:
min = i
pour j de i+1 à N:
si Tj < Tmin alors min = j
5 8 3 4 6 0 7 9 1 10 2
Echanger(Ti, Tmin)
min
min
5 8 3 4 6 0 7 9 1 10 2
Echanger(Ti, Tmin)
19
20
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Déroulement
de ll’algorithme
algorithme
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Déroulement
de ll’algorithme
algorithme
‰ Idée:
‰ Idée:
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
min
pour i de 1 à N
N-1:
1:
min = i
pour j de i+1 à N:
si Tj < Tmin alors min = j
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
min
pour i de 1 à N
N-1:
1:
min = i
pour j de i+1 à N:
si Tj < Tmin alors min = j
5 8 3 4 6 0 7 9 1 10 2
0 8 3 4 6 5 7 9 1 10 2
Echanger(Ti, Tmin)
0 8 3 4 6 5 7 9 1 10 2
Echanger(Ti, Tmin)
21
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
22
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Invariants
de boucles
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Complexité
de ll’algorithme
algorithme
‰ Idée:
‰ Idée:
¾ A partir du 1er élément, on recherche le plus petit éléments dans le reste du
tableau et on place ce dernier dans la première case. On poursuit ensuite
avec le 2ième élément…
pour i de 1 à N-1:
{∀x, y ∈ [1..i − 1], ∀z ∈ [i..N ] : (x < y ⇒ Tx ≤ Ty ) et (Tx ≤ Tz ) }
1
n(n − 1)
⇔ Ο n2
2
( )
N
i
Définitivement trié
min = i
pour j de i+1 à N:
{∀x ∈ [i.. j − 1], T
min
≤ Tx
}
si Tj < Tmin alors min = j
Echanger(Ti, Tmin)
1
i
j
¾ Compter le nombre de test : Tj < Tmin
¾ Complexité du pire cas
N
Tmin = Min(T[i..j-1])
23
24
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par insertion
Tri a bulles
Tri par sélection
Tri par insertion
Tri par sélection
Invariants
de boucles
‰ Idée:
‰ Idée:
¾ A la nième itération, le nième élément est inséré à la bonne place dans le
¾ A la nième itération, le nième élément est inséré à la bonne place dans le
tableau trié…
tableau trié…
pour i de 2 à N:
{∀x, y ∈ [1..i − 1]: (x < y ⇒ T
pour i de 2 à N:
val = Ti
j = i-1
x
1
N
≤ Ty )
}
1
val = Ti
j = i-1
tant que j≠0 etpuis Tj>val
Tj+1 = Tj
j = j-1
N
i
Tri(pg)
tant que j≠0 etpuis Tj>val
{(T [1.. j ]& T [ j + 2] = T [1..i − 1]) et ( j + 2 ≤ i ⇒ T
0
Tj+1 = val
1
j
> val )}
j +2
i
N
Tj+1 = Tj
j = j-1
Tj+1 = val
25
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
26
Tri a bulles
Tri par sélection
Tri par insertion
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Complexité
de ll’algorithme
algorithme
Plan
‰ Idée:
¾ Compter le nombre de transfert : Tj+1 < Tj
¾ Complexité du pire cas
Introduction aux algorithmes de tri
Les tris séquentiels
n(n − 1)
⇔ Ο n2
2
( )
Les tris récursifs
¾ Tri par fusion
¾ Tri par segmentation
27
28
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par fusion
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par fusion
‰ Diviser pour régner
‰ Diviser pour régner
‰ Idée :
¾ On divise le tableau en deux,
deux les sous tableaux sont triés puis
fusionnés
‰ Idée :
¾ On divise le tableau en deux,
deux les sous tableaux sont triés puis
fusionnés
‰ Procédure de fusion de sous tableaux:
¾ Interclasser(T: tableau de [1..N]; i,m,s: entiers dans [1..N])
¾ Sous tableaux:T[i,m]
T[i m] et T[m+1,s]
T[m+1 s]
¾ Résultat: T[i,s]
29
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
30
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par fusion
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par fusion
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
TRI:
TriFusion(1,N)
TRI:
TriFusion(1,N)
TriFusion (Inf, Sup : Entiers):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
TriFusion (Inf, Sup : Entiers):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
31
32
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par fusion
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par fusion
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
TRI:
TriFusion(1,N)
TRI:
TriFusion(1,N)
TriFusion (Inf, Sup : Entiers):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
TriFusion (Inf, Sup: Entiers):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
33
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
34
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par fusion
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par fusion
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
TRI:
TriFusion(1,N)
TRI:
TriFusion(1,N)
TriFusion (Inf, Sup):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
TriFusion (Inf, Sup):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
35
36
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par fusion
Tri par fusion
Tri par segmentation
Tri par sélection
Complexité
de ll’algorithme
algorithme
‰ Sous fonction: TriFusion
¾ Tri du tableau T entre inf et sup
‰ Idée:
ComplexInterClass (N )
¾ Complexité du pire cas
¾ Traitement d’un niveau en O(N)
¾ Log(N)
g( ) niveaux différents
C ( N ) = ComplexInterCl
C ( N ) = Ο( N log( N ) )
TRI:
TriFusion(1,N)
TriFusion (Inf, Sup):
mil = (inf + sup) div 2
TriFusion(inf mil)
TriFusion(inf,
TriFusion(mil+1, sup)
Interclasser(T, inf, mil, sup)
37
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
38
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Comparaison
de deux algorithmes de tri
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
‰ Idée :
¾ Choisir un élément du tableau : pivot
‰ Tri
T i par sélection:
él
i
¾ Lors du parcours de k éléments pour recherche du minimum, on ne
mémorise que le minimum alors que k comparaisons ont étés
effectuées
¾ Ordonner les éléments du tableau par rapport au pivot
¾ Appeler récursivement le tri sur les sous tableaux à gauche et à
droite du pivot
‰ Tri par fusion:
¾ Toutes les comparaisons sont mémorisées en ordonnant les éléments
comparés
Pivot
1
N
< Pivot
39
> Pivot
40
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
répéter
tantque Tj < p
i++
tantque Ts < p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
répéter
tantque Ti < p
i++
tantque Ts < p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
i
P=3
s
5 8 3 4 6
41
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
42
TriSegmentation (inf, sup: entiers dans [1..N]):
i
P=3
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
s
5 8 3 4 6
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
43
i
P=3
s
5 8 3 4 6
i
P=3
s
5 8 3 4 6
44
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
i
P=3
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
s
5 8 3 4 6
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
i
P=3
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
s
5 8 3 4 6
i
P=3
i
P=3
s
5 8 3 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
s
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
45
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
46
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
P=3
is
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
P=3
is
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
47
48
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
P=3
s i
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
P=3
s i
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
49
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
Tri par fusion
Tri par segmentation
Tri par sélection
Algorithme
de Tri par segmentation (Quick sort)
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
50
TriSegmentation (inf, sup: entiers dans [1..N]):
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
P=3
s i
répéter
tantque Ti < p
i++
tantque Ts > p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
P=3
s i
3 8 5 4 6
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
51
52
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Invariant
de boucle
Tri par fusion
Tri par segmentation
Tri par sélection
Complexité
TriSegmentation (inf, sup: entiers dans [1..N]):
ComplexInterClass (N )
‰ Algorithme
Al
ih
lle plus
l
efficace
ffi
pour d
des d
données
é réparties
é
i
P = ChoixPivot(T, inf, sup)
i = inf
s = sup
aléatoirement
{
répéter
inf
tantque Tj < p
i++
tantque Ts < p
s-si i ≤ s alors
Echanger(Ti, Ts)
i++
s-j
jusqu’à
’à i > s
≤ k < i ⇒ Tk ≤ p et
s < k ≤ sup ⇒ Tk ≥ p}
‰ Complexité moyenne
C ( N ) = ComplexInterCl
C ( N ) = Ο( N log( N ) )
‰ Complexité du pire cas: O(N²)
‰ Problème : choix d’un bon pivot
si s > inf alors TriSegmentation(inf, s)
si i < sup alors TriSegmentation(i, sup)
53
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
54
Tri par fusion
Tri par segmentation
Introduction aux algorithmes de tri
Les tris séquentiels
Les tris récursifs
Tri par sélection
Conclusion
Tri par fusion
Tri par segmentation
Références
‰ Site
‰ Nombreux autres algorithmes de tri: tri par tas, tri de shell…
¾ http://deptinfo.cnam.fr/Enseignement/CycleA/SD/demonstration/Tri.html
‰ Les meilleurs algorithmes de tris sont en: O(N.log
O(N log N)
‰ Livres
¾ N.Wirth (Algorithmes et structures de données, Prentice Hall 86 ou Eyrolles
‰ Choisir un algorithme
g
de tri différents selon la taille de
87)
l'ensemble à ordonner
¾ R.Sedgewick (Algorithmes en langage C, Addison-Wesley 90 ou InterEditions
91)
¾ D.E.Kunth (The art of the computer programming, Vol.3, Addison-Wesley
Addison Wesley
74)
55
56
Téléchargement