Documente Academic
Documente Profesional
Documente Cultură
Données
Wurtz Jean-Marie
Les tas
• Une structure de donnée abstraite
• Utilisée pour implémenter des queues de priorité
• Dans un tas les clefs sont stockées dans un tableau
• Ces clefs vérifient les 2 propriétés suivantes :
– la clef en position i est plus grande que la clef en position 2i
L’algorithme de Heap Sort – la clef en position i est plus grande que la clef en position 2i+1
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris
1
class PQ { // Priority Queue
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris
2
Rétablir l’ordre d’un tas (2) : •
•
Exemple : ASORTINGE EXAMPLE
Rajout en queue de tableau
du haut vers le bas • Puis positionnement correct de l’élément par « swim() »
• La remonté de l’élément : un coût proportionnel à lgN
• L’élément « O » n’est pas à la bonne place •
1
Insertion de l’élément « I »
2 3 4 5 6 7 8 9 comparer
Construction
• Restitution du tas par propagation du haut
vers le bas
A
A S 2,1
d’un tas
S A
private void sink(int k, int N) { S A O 3,1
while (2*k <= N) { S A O R 4,2
int j = 2*k; S R O A 2,1
if (j < N && less(j, j+1)) j++; S R O A T 5,2
S T O A R 2,1
if (!less(k, j)) break; 1 2 3 4 5 6 7 8 9 10 11 12 13 T S O A R
exch(k, j); k = j; O T X G S P N A E R A I M T S O A R I 6,3
} T S O A R I N 7,3
X T O G S P N A E R A I M
} T S O A R I N G 8,4
X T P G S O N A E R A I M T S O G R I N A 4,2
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
• lg1+lg2+...+lgN
X
• borné par N*lgN
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
X T P G S O N A E R A I M L E avant
E T P G S O N A E R A I M L X apres
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
3
Suppressions successives
Propagation de « E » ? 1
4
11
E
5 8
2 12
X
6 13
9
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 3
X T P G S O N A E R A I M L E avant 14
7 10
E T P G S O N A E R A I M L X apres
15
Coût ?
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
4
12 3 4 5 6 7 8 901 2 34 5
• Une amélioration de l’algorithme consiste à ne pas
utiliser d’espace de stockage supplémentaire et de faire
HeapSort •
le tri dans le tableau directement
Chaque position en partant de la droite est considérée HeapSort
comme un tas
• Démarre en N/2 car les feuilles n’ont pas d’enfant •Première étape construction du tas
La construction est linéaire : •Deuxième étape :
N = 2n-1, n=8 •on place le maximum à la fin
pour N = 127 •en gris les éléments à la bonne
on décompte : position
32 tas de taille 3
16 tas de taille 7
8 tas de taille 15 for (int k = N/2; k >= 1; k--)
4 tas de taile 31 sink(k, N);
2 tas de taille 63 while (N > 1) {
exch(1, N);
1 tas de taill 127
sink(1, --N);
Le nombre de promotion est < N }
k*2n-k-1
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
• A droite : le tri
Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley " Copyright " 'Algorithms in Java'; Robert Sedgewick & Michael Shildlowsky; Third edition, Parts 1-4; Addison-Wesley "
Reproduction ULP Strasbourg. Autorisation CFC - Paris Reproduction ULP Strasbourg. Autorisation CFC - Paris
5
Intérêt des tas
• Queue de priorité
• Méthodes :
– construction à partir de N éléments
– supprimer le max
– suppression d’un élément quelconque
– changer la priorité, utiliser :
• swim si la priorité est augmentée
• sink si la priorité est diminuée
– fusion de deux tas