inf1101 cours11 monceaux inf1101 – algorithmes et structures de données

65
INF1101 Cours11 Cours11 Monceaux Monceaux INF1101 – Algorithmes et INF1101 – Algorithmes et structures de données structures de données

Upload: foulques-levasseur

Post on 04-Apr-2015

112 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Cours11Cours11MonceauxMonceaux

INF1101 – Algorithmes et structures de INF1101 – Algorithmes et structures de donnéesdonnées

Page 2: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Plan

• Définition de monceau

• Implémentation

• Insertion et retrait d’éléments

• Construction d’un monceux

• Monceaux dans la STL

• Tri par monceau

Page 3: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - définition

• Un arbre complet tel que pour chaque noeud N dont le parent est P, la clé de P est plus petite que celle de N

• Normalement implémenté dans un tableau

• Insertion et retrait sont O(lg N) dans le pire cas

• Insertion est O(1) en moyenne

• Recherche du plus petit élément est O(1) dans le pire cas

Page 4: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau – implémentation

• On utilise un tableau pour implémenter l’arbre• On met la racine de l’arbre à la position 1, plutôt

que la position 0, ce qui facilite les opérations

Page 5: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - exemple

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 6: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau – insertion de 14

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 7: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - insertion de 14

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

14 ?

Page 8: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - insertion de 14

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 19 68 65 26 32 31

14 ?

Page 9: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - insertion de 14

13

2124

31

16

65

19

26 32

68

0 1 2 3 4 5 6 7 8 9 10 11

13 16 24 21 19 68 65 26 32 31

14 ?

Page 10: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - insertion de 14

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 11: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

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: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

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 13: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

2124

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: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

2124

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 15: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

21

24

16

65

19

26 32

68

14

0 1 2 3 4 5 6 7 8 9 10 11

14 21 16 24 19 68 65 26 32

31 ?

Page 16: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - retrait

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 17: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

45

17 55

63

92

12

37 25 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 45 63 61 17 55 37 25 64 83 73

Page 18: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

45

17 55

63

92

12

37 25 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 45 63 61 17 55 37 25 64 83 73

Page 19: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

45

17 55

63

92

12

37 25 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 45 63 61 17 55 37 25 64 83 73

Page 20: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

25

17 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 25 63 61 17 55 37 45 64 83 73

Page 21: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

25

17 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 25 63 61 17 55 37 45 64 83 73

Page 22: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

20

21

61

25

17 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 20 12 25 63 61 17 55 37 45 64 83 73

Page 23: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

17

21

61

25

20 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 17 12 25 63 61 20 55 37 45 64 83 73

Page 24: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

17

21

61

25

20 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 17 12 25 63 61 20 55 37 45 64 83 73

Page 25: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

47

17

21

61

25

20 55

63

92

12

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 47 21 17 12 25 63 61 20 55 37 45 64 83 73

Page 26: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

12

17

21

61

25

20 55

63

92

47

37 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 12 21 17 47 25 63 61 20 55 37 45 64 83 73

Page 27: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

12

17

21

61

25

20 55

63

92

37

47 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 12 21 17 37 25 63 61 20 55 47 45 64 83 73

Page 28: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

12

17

21

61

25

20 55

63

92

37

47 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

92 12 21 17 37 25 63 61 20 55 47 45 64 83 73

Page 29: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

92

17

21

61

25

20 55

63

12

37

47 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

12 92 21 17 37 25 63 61 20 55 47 45 64 83 73

Page 30: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

17

92

21

61

25

20 55

63

12

37

47 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

12 17 21 92 37 25 63 61 20 55 47 45 64 83 73

Page 31: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceau - construction

17

20

21

61

25

92 55

63

12

37

47 45 64 83 73

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

12 17 21 20 37 25 63 61 92 55 47 45 64 83 73

Page 32: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceaux dans la STL • 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)

• 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 33: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Monceaux dans la STL

• Il existe aussi un adaptateur priority_queue• On peut choisir le type de conteneur et de

fonction de comparaison• Offre les fonctions suivantes:

– push()– top()– pop()

• Voir les exemples fournis en annexe (à exécuter dans .NET)

Page 34: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Principe• On applique les modifications suivantes au

monceau:– chaque noeud a une valeur plus grande ou égale à

celle de tous ses descendants– dans le tableau qui implémente le monceau, la racine

se trouve à l’index 0 (au lieu de 1)– pour chaque noeud i, les index sont donc 2*i+1 pour le

fils gauche et 2*i+2 pour le fils droit

Page 35: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Principe• La procédure est la suivante:

– On met dans le tableau les valeurs à trier– On 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 monceau

– On fait percoler la racine, s’il y a lieu– On répète le processus avec le monceau obtenu qui

contient maintenant un élément de moins

Page 36: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

37

20

2

65 36

12

57

0 1 2 3 4 5 6 7

12 37 2 20 57 65 36

MONCEAU

Page 37: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

37

20

2

65 36

12

57

0 1 2 3 4 5 6 7

12 37 2 20 57 65 36

Création du monceau

MONCEAU

Page 38: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

37

20

65

2 36

12

57

0 1 2 3 4 5 6 7

12 37 65 20 57 2 36

Création du monceau

MONCEAU

Page 39: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

57

20

65

2 36

12

37

0 1 2 3 4 5 6 7

12 57 65 20 37 2 36

Création du monceau

MONCEAU

Page 40: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

57

20

12

2 36

65

37

0 1 2 3 4 5 6 7

65 57 12 20 37 2 36

Création du monceau

MONCEAU

Page 41: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

57

20

36

2 12

65

37

0 1 2 3 4 5 6 7

65 57 36 20 37 2 12

Création du monceau (fin)

MONCEAU

Page 42: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

57

20

36

2

12

37

0 1 2 3 4 5 6 7

12 57 36 20 37 2 65

Retrait du premier élément

MONCEAU

Page 43: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

12

20

36

2

57

37

0 1 2 3 4 5 6 7

57 12 36 20 37 2 65

Percoler

MONCEAU

Page 44: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

37

20

36

2

57

12

0 1 2 3 4 5 6 7

57 37 36 20 12 2 65

Percoler

MONCEAU

Page 45: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

37

20

36

2

12

0 1 2 3 4 5 6 7

2 37 36 20 12 57 65

Retrait du premier élément

MONCEAU

Page 46: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

2

20

36

37

12

0 1 2 3 4 5 6 7

37 2 36 20 12 57 65

Percoler

MONCEAU

Page 47: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

20

2

36

37

12

0 1 2 3 4 5 6 7

37 20 36 2 12 57 65

Percoler

MONCEAU

Page 48: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

20

2

36

12

0 1 2 3 4 5 6 7

12 20 36 2 37 57 65

Retrait du premier élément

MONCEAU

Page 49: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

20

2

12

36

0 1 2 3 4 5 6 7

36 20 12 2 37 57 65

Percoler

MONCEAU

Page 50: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

20 12

2

0 1 2 3 4 5 6 7

2 20 12 36 37 57 65

Retrait du premier élément

MONCEAU

Page 51: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

2 12

20

0 1 2 3 4 5 6 7

20 2 12 36 37 57 65

Percoler

MONCEAU

Page 52: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

2

12

0 1 2 3 4 5 6 7

12 2 20 36 37 57 65

Retrait du premier élément

MONCEAU

Page 53: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

2

12

0 1 2 3 4 5 6 7

12 2 20 36 37 57 65

Percoler

MONCEAU

Page 54: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri par monceau - Exemple

2

0 1 2 3 4 5 6 7

2 12 20 36 37 57 65

Retrait du premier élément

Le tableau est maintenant trié

Page 55: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel• Supposons maintenant un monceau dont la

racine est le plus petit élément (contrairement à l’exemple précédent)

• Supposons que le tableau contient n éléments, et une valeur m < n

• On remarquera que après m itérations, on obtient, à la fin du tableau, et en ordre inverse, les m plus petits éléments du tableau

• On peut donc, de manière efficace, trier les m plus petits éléments du tableau: O(m lg n)

• Avec le tri par sélection, c’est aussi possible, mais moins efficace: O(mn)

Page 56: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

37

20

2

65 36

12

57

0 1 2 3 4 5 6 7

12 37 2 20 57 65 36

MONCEAU

Page 57: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

20

37

12

65 36

2

57

0 1 2 3 4 5 6 7

2 20 12 37 57 65 36

MONCEAU

Création du monceau

Page 58: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

20

37

12

65

36

57

0 1 2 3 4 5 6 7

36 20 12 37 57 65 2

MONCEAU

Retrait du premier élément

Page 59: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

20

37

36

65

12

57

0 1 2 3 4 5 6 7

12 20 36 37 57 65 2

MONCEAU

Percoler

Page 60: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

20

37

36

65

57

0 1 2 3 4 5 6 7

65 20 36 37 57 12 2

MONCEAU

Retrait du premier élément

Page 61: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

37

65

36

20

57

0 1 2 3 4 5 6 7

20 37 36 65 57 12 2

MONCEAU

Percoler

Page 62: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

37

65

36

57

0 1 2 3 4 5 6 7

57 37 36 65 20 12 2

MONCEAU

Retrait du premier élément

Page 63: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

37

65

57

36

0 1 2 3 4 5 6 7

36 37 57 65 20 12 2

MONCEAU

Percoler

Page 64: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Tri partiel - exemple

0 1 2 3 4 5 6 7

36 37 57 65 20 12 2

MONCEAU

Si on arrête ici, on voit qu’on a bien obtenu les 3plus petits éléments, qui sont en ordre croissant sion parcourt le tableau à partir de la fin

Page 65: INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données

INF1101

Les tris dans la STL• sort():

– Doit garantir un temps moyen dans O(n lg n)– Le tri rapide (quicksort) répond à ce critère

• stable_sort():– Doit garantir O(n lg n) dans le pire cas– Peut utiliser de la mémoire supplémentaire– Le tri par fusion (mergesort) répond à ce critère

• partial_sort()– Doit garantir un temps moyen dans O(n lg n)– Doit permettre le tri partiel– Le tri par monceau (heapsort) répond à ce critère