8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1
MonceauxMonceaux
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 22
Les Les MonceauxMonceaux
En anglais: « heap »Définition :
Un monceau (tas) est un arbre binaire complet dans lequel il existe un ordre entre un nœud et ses descendants
On parle d’un Max-heap si tout nœud a une valeur plus grande ou égale à celles de ses deux fils.On parle d’un Min-heap si tout nœud a une valeur plus petite ou égale à celles de ses deux fils
2
5 6
79
1
2 3
4 5
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 33
PropriPropriééttéé des des monceauxmonceaux
Arbre binaire complet : on ajoute les nœuds couche par coucheLe dernier nœud d’un monceau est le nœud le plus à droite du niveau hRécursivement, un père est plus petit (grand) ou égal à ses fils
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 44
ImplImpléémentationmentation
On peut stocker le monceau dans un tableau
13
21
24 31
16
65
19
26 32
68
0 1 2 3 4 5 6 7 8 9 10 11
13 21 16 24 31 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 55
implimpléémentationmentation
Aucun pointeur n’est nécessaireLes déplacement dans l’arbre sont rapidesIl faut connaître le nombre total d’élémentsquelquefois, on met la racine de l’arbre à la position 1, plutôt que la position 0, ce qui facilite les opérations
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 66
InsertionInsertiontemplate <class Comparable>
void BinaryHeap<Comparable>::insert( const Comparable & x )
{
array[ 0 ] = x; / / initialize sentinel
if( thesize + 1 == array.size( ) )
array.resize( array.size( ) * 2 + 1 ) ;
/ / Percolate up
int hole = ++thesize;
for( ; x < array[ hole i 2 I ; hole / = 2 )
array[ hole ] = array[ hole / 2 I ;
array[ hole ] = x;
}
Au plus O(log(n))en moyenne O(1)
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 77
Insertion : Insertion : exempleexemple(percolation (percolation versvers le haut)le haut)
13
21
24 31
16
65
19
26 32
68
14 ?
0 1 2 3 4 5 6 7 8 9 10 11
13 21 16 24 31 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 88
Insertion : Insertion : exempleexemple(percolation (percolation versvers le haut)le haut)
13
21
24 31
16
65
19
26 32
68
14 ?
0 1 2 3 4 5 6 7 8 9 10 11
13 21 16 24 31 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 99
Insertion : Insertion : exempleexemple(percolation (percolation versvers le haut)le haut)
13
21
24
31
16
65
19
26 32
68
14 ?
0 1 2 3 4 5 6 7 8 9 10 11
13 21 16 24 19 68 65 26 32 31
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1010
Insertion : Insertion : exempleexemple(percolation (percolation versvers le haut)le haut)
13
2124
31
16
65
19
26 32
68
14 ?
0 1 2 3 4 5 6 7 8 9 10 11
13 16 24 21 19 68 65 26 32 31
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1111
Insertion : Insertion : exempleexemple(percolation (percolation versvers le haut)le haut)
13
2124
31
16
65
19
26 32
68
14
0 1 2 3 4 5 6 7 8 9 10 11
13 14 16 24 21 19 68 65 26 32 31
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1212
Suppression Suppression Suppression du premier élément (maximum ou minimum) d’un tas
13
2124
31
16
65
19
26 32
68
14
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1313
Suppression (percolation Suppression (percolation versvers le bas)le bas)
2124
31
16
65
19
26 32
68
14
0 1 2 3 4 5 6 7 8 9 10 11
14 16 24 21 19 68 65 26 32 31
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1414
Suppression (percolation Suppression (percolation versvers le bas)le bas)
2124
16
65
19
26 32
68
14
31 ?
0 1 2 3 4 5 6 7 8 9 10 11
14 16 24 21 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1515
Suppression (percolation Suppression (percolation versvers le bas)le bas)
2124
16
65
19
26 32
68
14
31 ?
0 1 2 3 4 5 6 7 8 9 10 11
14 16 24 21 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1616
Suppression (percolation Suppression (percolation versvers le bas)le bas)
21
24
16
65
19
26 32
68
14
31 ?
0 1 2 3 4 5 6 7 8 9 10 11
14 21 16 24 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1717
Suppression (percolation Suppression (percolation versvers le bas)le bas)
21
24
16
65
19
26 32
68
14
31
0 1 2 3 4 5 6 7 8 9 10 11
14 21 16 24 31 19 68 65 26 32
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1818
Tri Tri monceauxmonceaux ((heapsortheapsort))un algorithme de tri ayant une complexité temporelle O(nlog(n))L’algorithme est le suivant :
On met dans le tableau les valeurs à trierOn crée le monceau initial (de type Parent > Fils)On retire la racine du monceau (qui est la plus grande valeur) et on la permute avec le dernier item du monceauOn fait percoler la racine, s’il y a lieuOn répète le processus avec le monceau obtenu qui contient maintenant un élément de moins
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1919
Tri Tri monceauxmonceaux: : exempleexemple
37
20
2
65 36
12
57
12 37 2 20 57 65 36
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2020
Tri Tri monceauxmonceaux: : exempleexemple
Création monceaux
37
20
2
65 36
12
57
12 37 2 20 57 65 36
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2121
Tri Tri monceauxmonceaux: : exempleexemple
Création monceaux
37
20
65
2 36
12
57
12 37 65 20 57 2 36
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2222
Tri Tri monceauxmonceauxCréation monceaux
57
20
65
2 36
12
37
12 57 65 20 37 2 36
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2323
Tri Tri monceauxmonceauxCréation monceaux
57
20
12
2 36
65
37
65 57 12 20 37 2 36
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2424
Tri Tri monceauxmonceauxCréation monceaux
57
20
36
2 12
65
37
MONCEAU
65 57 36 20 37 2 12
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2525
Tri Tri monceauxmonceaux
Retrait du premier élément
57
20
36
2
12
37
MONCEAU
12 57 36 20 37 2 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2626
Tri Tri monceauxmonceaux
percoler
12
20
36
2
57
37
MONCEAU
57 12 36 20 37 2 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2727
Tri Tri monceauxmonceaux
37
20
36
2
57
12
MONCEAU
57 37 36 20 12 2 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2828
Tri Tri monceauxmonceauxretrait
37
20
36
2
12
MONCEAU
2 37 36 20 12 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 2929
Tri Tri monceauxmonceaux
percoler
2
20
36
37
12
MONCEAU
37 2 36 20 12 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3030
Tri Tri monceauxmonceaux
20
2
36
37
12
MONCEAU
37 20 36 2 12 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3131
Tri Tri monceauxmonceauxretrait
20
2
36
12
MONCEAU
12 20 36 2 37 57 65
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3232
Tri Tri monceauxmonceaux
percoler
20
2
12
36
MONCEAU
36 20 12 2 37 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3333
Tri Tri monceauxmonceaux
retrait
20 12
2
MONCEAU
2 20 12 36 37 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3434
Tri Tri monceauxmonceauxPercoler
2 12
20
MONCEAU
20 2 12 36 37 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3535
Tri Tri monceauxmonceaux
retrait
2
12
MONCEAU
12 2 20 36 37 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3636
Tri Tri monceauxmonceaux
2
Le tableau est maintenant trié
2 12 20 36 37 57 65
0 1 2 3 4 5 6 7
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3737
MonceauxMonceaux dansdans la STLla STLMonceaux de type max par défaut#include <algorithms>Fonction pour créer un monceau:
make_heap(Iterator deb, Iterator fin)
Fonctions pour insérer et retirer un élémentpush_heap(Iterator deb, Iterator fin)pop_heap(Iterator deb, Iterator fin)
Fonction de trisort_heap(Iterator deb, Iterator fin)
Toutes ces fonctions ont une seconde version avec un troisième argument qui est un prédicat qui permet de redéfinir l’opérateur de comparaison utiliséNote: l’itérateur doit être un itérateur à accès direct, ce qui limite les possibilités de conteneurs (vector et deque)
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3838
Make_heapMake_heapint main(){
vector<int> lHeap;lHeap.push_back(9);lHeap.push_back(17);...make_heap(lHeap.begin(), lHeap.end());...
}
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 3939
pop_heappop_heap, , push_heappush_heap
int main(){
vector<int> lHeap;lHeap.push_back(9);lHeap.push_back(17);...make_heap(lHeap.begin(), lHeap.end());lHeap.push_back(58);push_heap(lHeap.begin(), lHeap.end());pop_heap(lHeap.begin(), lHeap.end());
}
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 4040
sort_heapsort_heapint main(){
vector<int> lHeap;lHeap.push_back(9);lHeap.push_back(17);make_heap(lHeap.begin(), lHeap.end());lHeap.push_back(58);push_heap(lHeap.begin(), lHeap.end());sort_heap(lHeap.begin(), lHeap.end());
}
8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 4141
RRééfféérencesrences
Notes de cours D. Rébaïne
Chapitre 6 du livre Data Structures and Algorithm Analysis in C++, Mark A. Weiss.
C.A. Shaffer (2001): A practical introduction to data structures and algorithms (chapitre5)