IFT 436 - Algorithmes et structures de données Algorithme de Tri

publicité
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
IFT 436 - Algorithmes et structures de données
Algorithme de Tri
Rachid Kadouche
Université de Sherbrooke
11 juillet 2013
1
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Le problème
Soit une séquence (a1 , a2 , . . . , an ). On veut une permutation
(a10 , a20 , . . . , an0 ) tel que a10 ≤ a20 ≤ · · · ≤ an0 .
2
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Pourquoi trier ?
Opération très souvent utilisée.
Le tri est la tâche la plus fréquente effectuée par les
ordinateurs
Tri = préliminaire à la résolution efficace de beaucoup de
problèmes une fois que les objets sont triés, ces problèmes
deviennent simples
3
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Pourquoi trier ?
Les ordinateurs font majoritairement du tri parce qu’ils font
majoritairement de la recherche
Exemples :
Recherche d’un élément dans un tableau trié :
recherche dichotomique complexité =Θ(lgn)
Trouver parmi n nombres, les paires les plus proches.
Si les n nombres sont triés, les nombres formant ces paires
sont l’un à coté de l’autre.
4
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Pourquoi trier ?
Exemples : (suite)
Est-ce que n objets sont distincts ?
Trier les n nombres, il suffit ensuite de parcourir la liste
triée !
Base de données : suppression des dupliqués
Calculer la fréquence d’occurrence d’un élément (de tous
les éléments) parmi n
Le kème plus grand élément
Le traitement de données à large échelle serait
impossible sans le tri !
5
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Algorithme de tri
Nous avons déjà vue :
Tri-Insertion
Meilleur cas : Θ(n)
Pire cas : Θ(n2 )
Tri sur place
Bon pour trier un petit nombre de valeur
Tri-Fusion
Tous les cas : Θ(n lg n)
Ne tri pas sur place
6
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Le Tri par Tas (Heapsort)
Proposé par Williams, J. W. J en 1964
O(n lg n) comme le Tri-Fusion
Tri sur place comme le Tri-Insertion
Particularité : utilise un Tas.
7
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Un Tas
8
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Un Tas
9
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Un Tas
10
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Procédures pour le Tri par Tas
Entasser-Max :
Maintient la propriété max d’un Tas.
Construire-Tas-Max :
Produit un Tas à partir d’un tableau.
Tri-Par-Tas :
Tri un tableau sur place.
11
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Entasser-Max
Algorithme : Entasser-Max(A,i)
l ← gauche(i);
r ← droite(i);
if l ≤ taille[A] and A[l] > A[i] then
max ← l;
else
max ← i;
if r ≤ taille[A] and A[r ] > A[max] then
max ← r ;
if max 6= i then
échanger A[i] ↔ A[max];
Entasser-Max(A,max) ;
12
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Entasser-Max
13
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Construire-Tas-Max
Algorithme : Construire-Tas-Max(A)
n = taille[A];
for i ← bn/2c to 1 do
Entasser-Max(A, i);
Les éléments du sous tableau A [(bn/2c+1),...n]sont tous des
feuilles de l’arbre.
14
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Construire-Tas-Max
15
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Construire-Tas-Max
16
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Analyse de Construire-Tas-Max
Observons que :
Un Tas de n éléments est de hauteur h = blg nc. La
hauteur d’un noeud dans un tas est définie par le nombre
d’arcs sur le chemin simple le plus long reliant le noeud à
une feuille.
Le nombre de noeuds ayant la hauteur h est au plus
dn/2h+1 e.
Le temps requis par Entasser-Max lorsqu’appelé sur un
noeud de hauteur h est O(h).
17
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Analyse de Construire-Tas-Max
Le temps d’exécution de Construire-Tas-Max peut donc
être décrit par la formule suivante :
T (n)Construire−Tas−Max =
blg nc l
X
h=0
n m
2h+1
O(h)
Cette formule s’interprète de la manière suivante : Pour
chaque niveau, on multiplie le nombre de noeud à ce niveau
par le coût d’un appel à Entasser-Max pour un noeud de ce
niveau.
18
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Analyse de Construire-Tas-Max
Le temps d’exécution de Construire-Tas-Max peut donc
être décrit par la formule suivante :
T (n)Construire−Tas−Max =
blg nc l
X
h=0
n m
2h+1
O(h)
Cette formule s’interprète de la manière suivante : Pour
chaque niveau, on multiplie le nombre de noeud à ce niveau
par le coût d’un appel à Entasser-Max pour un noeud de ce
niveau.
T
(n)Construire−Tas−Max = O(n) (en utilisant la formule suivante :
P
∞
i=0
19
i · xi =
x
(1−x)2
(si |x| < 1))
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Algorithme du Tri par Tas
20
1
Construire un Tas-max.
2
Échanger la racine avec le dernier élément.
3
Décrémenter la taille du Tas de 1.
4
Appeler Entasser-Max sur la nouvelle racine.
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri par Tas
Algorithme : Tri par Tas(A, n)
Construire-Tas-Max(A,n);
for i ← n to 2 do
échanger A[1] ↔ A[i];
taille[A] ← taille[A] − 1;
Entasser-Max(A,1) ;
21
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri par Tas
Algorithme : Tri par Tas(A, n)
Construire-Tas-Max(A,n);
for i ← n to 2 do
échanger A[1] ↔ A[i];
taille[A] ← taille[A] − 1;
Entasser-Max(A,1) ;
T (n) = O(nlgn)
22
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Rapide
Proposé par Tony Hoare 1962
Basé sur la stratégie de conception d’algorithmes diviser
pour régner
Cas moyen et meilleur cas Θ(n lg n)
Pire cas : Θ(n2 )
Tri sur place.
23
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Rapide
Algorithme : Tri-Rapide(A, p, r)
if p < r then
q ← Partition(A, p, r);
Tri-Rapide(A, p, q-1);
Tri-Rapide(A, q+1, r);
24
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
Algorithme : Partition(A, p, q)
x ← A[p];
i←p;
for j ← p+1 to q do
if A[j] ≤ x then
i ← i + 1;
swap(A[i], A[j]);
swap(A[i], A[p]);
return i;
25
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
Algorithme : Partition(A, p, q)
x ← A[p];
i←p;
for j ← p+1 to q do
if A[j] ≤ x then
i ← i + 1;
swap(A[i], A[j]);
swap(A[i], A[p]);
return i;
26
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
27
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
28
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
29
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
30
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
31
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
32
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
33
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
34
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
35
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
36
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
37
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partition
38
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Principe du Tri-Rapide
1
2
3
4
39
A[p..i] ≤ pivot
A[i + 1..j] > pivot
A[p] = pivot
A[j + 1..q] non-examinés
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Analyse du Tri-Rapide
Algorithme : Tri-Rapide(A, p, r)
if p < r then
q ← Partition(A, p, r);
Tri-Rapide(A, p, q-1);
Tri-Rapide(A, q+1, r);
L’appel initial est : Tri-Rapide(A, 1, n).
40
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Analyse du Tri-Rapide
Algorithme : Tri-Rapide(A, p, r)
if p < r then
q ← Partition(A, p, r);
Tri-Rapide(A, p, q-1);
Tri-Rapide(A, q+1, r);
L’appel initial est : Tri-Rapide(A, 1, n).
T(n) dépend de la fonction Partition
41
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Partitionnement
42
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Rapide aléatoire
Algorithme : Partition-Randomisé(A, p, r)
i ← random(p,r);
swap(A[p], A[i]);
return Partition(A, p, r);
Algorithme : Tri-Rapide-Randomisé(A, p, r)
if p < r then
q ← Partition-Randomisé(A, p, r);
Tri-Rapide-Randomisé(A, p, q-1);
Tri-Rapide-Randomisé(A, q+1, r);
43
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Limite des tris par comparaison
Tous les algo de tri vue à date sont des tris par
comparaisons.
Pour le pire cas ils sont Ω(n lg n).
44
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Insertion
Algorithme : Tri-Insertion(A)
for j ← 2 to n do
key ← A[j];
i ← j − 1;
while i > 0 and A[i] > key do
A[i + 1] ← A[i];
i ← i − 1;
A[i + 1] ← key ;
45
Soit [6, 8, 5], on compare les
éléments
1 : 2 (1 ≤ 2)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Insertion
Algorithme : Tri-Insertion(A)
for j ← 2 to n do
key ← A[j];
i ← j − 1;
while i > 0 and A[i] > key do
A[i + 1] ← A[i];
i ← i − 1;
A[i + 1] ← key ;
46
Soit [6, 8, 5], on compare les
éléments
1 : 2 (1 ≤ 2)
2 : 3 (2 > 3) échange 8 ↔ 5
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-Insertion
Algorithme : Tri-Insertion(A)
for j ← 2 to n do
key ← A[j];
i ← j − 1;
while i > 0 and A[i] > key do
A[i + 1] ← A[i];
i ← i − 1;
A[i + 1] ← key ;
47
Soit [6, 8, 5], on compare les
éléments
1 : 2 (1 ≤ 2)
2 : 3 (2 > 3) échange 8 ↔ 5
1 : 3 (1 > 3) échange 6 ↔ 5
Et on a [5, 6, 8]
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Arbre de décision
Tri-Insertion sur 3 éléments
[6, 8, 5] → [5, 6, 8]
48
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Arbre de décision
Tri-Insertion sur 3 éléments
[6, 8, 5] → [5, 6, 8]
Branche la plus courte (meilleur cas) : n − 1 comparaisons
Branche la plus longue (pire cas) :
49
n2 −n
2
comparaisons
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Preuve de la borne Ω(n lg n)
Tout arbre binaire de hauteur h a ≤ 2h feuilles.
Posons l = nombre de feuille.
Alors l ≤ 2h
Il y a au moins n! feuille dans un arbre de décision
Théorème : Tout arbre de décision qui tri n éléments a une
hauteur de Ω(n lg n)
50
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Tri-par dénombrement
Entrée : A[1..n], où A[j] ∈ {1, . . . , k} pour 1 ≤ j ≤ n. A,
n et k sont donnés en paramètres.
Sortie : B[1..n] trié.
Mémoire auxiliaire : C [1..k]
51
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Tri-par dénombrement
Algorithme : Counting-Sort(A, n, k)
52
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
53
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
54
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
55
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
56
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
57
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
58
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
59
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
60
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
61
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
62
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
63
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
64
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
65
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
66
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
67
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Tri-par dénombrement (Analyse)
68
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Tri-par dénombrement
Suppose que tous les éléments sont des entiers entre 1 et
k.
Lorsque k = O(n) alors T (n) = Θ(n)
Le Tri-par dénombrement est stable.
69
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par base
70
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par base
71
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par base
72
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Introduction
Tri par Tas (Monceau, Heap)
Tri-Rapide
Limite des tris par comparaisons
Tri en temps linéaire
Tri-par base
73
Tri-par dénombrement
Tri-par base (Herman Hollerith)
Téléchargement