La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de...

41
8SIF109 Programmation, algorithmique et structures de donn 8SIF109 Programmation, algorithmique et structures de donn é é es es 1 Monceaux Monceaux

Transcript of La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de...

Page 1: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

8SIF109 Programmation, algorithmique et structures de donn8SIF109 Programmation, algorithmique et structures de donnééeses 1

MonceauxMonceaux

Page 2: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 3: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 4: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 5: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 6: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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)

Page 7: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 8: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 9: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 10: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 11: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 12: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 13: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 14: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 15: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 16: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 17: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 18: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 19: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 20: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 21: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 22: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 23: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 24: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 25: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 26: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 27: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 28: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 29: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 30: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 31: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 32: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 33: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 34: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 35: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 36: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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

Page 37: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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)

Page 38: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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());...

}

Page 39: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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());

}

Page 40: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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());

}

Page 41: La librairie STL - UQAC · 2008. 11. 4. · 8SIF109 Programmation, algorithmique et structures de données 2 Les Monceaux En anglais: « heap » Définition : Un monceau (tas) est

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)