Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parFoulques Levasseur Modifié depuis plus de 10 années
1
INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données
2
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
3
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
4
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
5
INF1101 Monceau - exemple 13212431166519263268 01234567891011 13211624311968652632
6
INF1101 Monceau – insertion de 14 13212431166519263268 14 ? 01234567891011 13211624311968652632
7
INF1101 Monceau - insertion de 14 13212431166519263268 01234567891011 13211624311968652632 14 ?
8
INF1101 Monceau - insertion de 14 13212431166519263268 01234567891011 13211624196865263231 14 ?
9
INF1101 Monceau - insertion de 14 13212431166519263268 01234567891011 13162421196865263231 14 ?
10
INF1101 Monceau - insertion de 14 13212431166519263268 14 01234567891011 1314162421196865263231
11
INF1101 Monceau - retrait 13212431166519263268 14 01234567891011 1314162421196865263231
12
INF1101 Monceau - retrait 212431166519263268 14 01234567891011 14162421196865263231
13
INF1101 Monceau - retrait 2124166519263268 14 01234567891011 141624211968652632 31 ?
14
INF1101 Monceau - retrait 212416651926326814 01234567891011 141624211968652632 31 ?
15
INF1101 Monceau - retrait 212416651926326814 01234567891011 142116241968652632 31 ?
16
INF1101 Monceau - retrait 212416651926326814 31 01234567891011 14211624311968652632
17
INF1101 Monceau - construction 472021614517556392 12 3725648373 0123456789101112131415 924721201245636117553725648373
18
INF1101 Monceau - construction 472021614517556392 12 3725648373 0123456789101112131415 924721201245636117553725648373
19
INF1101 Monceau - construction 472021614517556392 12 3725648373 0123456789101112131415 924721201245636117553725648373
20
INF1101 Monceau - construction 472021612517556392 12 3745648373 0123456789101112131415 924721201225636117553745648373
21
INF1101 Monceau - construction 472021612517556392 12 3745648373 0123456789101112131415 924721201225636117553745648373
22
INF1101 Monceau - construction 472021612517556392 12 3745648373 0123456789101112131415 924721201225636117553745648373
23
INF1101 Monceau - construction 471721612520556392 12 3745648373 0123456789101112131415 924721171225636120553745648373
24
INF1101 Monceau - construction 471721612520556392 12 3745648373 0123456789101112131415 924721171225636120553745648373
25
INF1101 Monceau - construction 471721612520556392 12 3745648373 0123456789101112131415 924721171225636120553745648373
26
INF1101 Monceau - construction 121721612520556392 47 3745648373 0123456789101112131415 921221174725636120553745648373
27
INF1101 Monceau - construction 121721612520556392 37 4745648373 0123456789101112131415 921221173725636120554745648373
28
INF1101 Monceau - construction 121721612520556392 37 4745648373 0123456789101112131415 921221173725636120554745648373
29
INF1101 Monceau - construction 921721612520556312 37 4745648373 0123456789101112131415 129221173725636120554745648373
30
INF1101 Monceau - construction 179221612520556312 37 4745648373 0123456789101112131415 121721923725636120554745648373
31
INF1101 Monceau - construction 172021612592556312 37 4745648373 0123456789101112131415 121721203725636192554745648373
32
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ément push_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)
33
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)
34
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
35
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
36
INF1101 Tri par monceau - Exemple 37 20 2 6536 12 57 01234567 1237220576536 MONCEAU
37
INF1101 Tri par monceau - Exemple 37 20 2 6536 12 57 01234567 1237220576536 Création du monceau MONCEAU
38
INF1101 Tri par monceau - Exemple 37 20 65 236 12 57 01234567 1237652057236 Création du monceau MONCEAU
39
INF1101 Tri par monceau - Exemple 57 20 65 236 12 37 01234567 1257652037236 Création du monceau MONCEAU
40
INF1101 Tri par monceau - Exemple 57 20 12 236 65 37 01234567 6557122037236 Création du monceau MONCEAU
41
INF1101 Tri par monceau - Exemple 57 20 36 212 65 37 01234567 6557362037212 Création du monceau (fin) MONCEAU
42
INF1101 Tri par monceau - Exemple 5720 36 212 37 01234567 1257362037265 Retrait du premier élément MONCEAU
43
INF1101 Tri par monceau - Exemple 1220 36 257 37 01234567 5712362037265 Percoler MONCEAU
44
INF1101 Tri par monceau - Exemple 3720 36 257 12 01234567 5737362012265 Percoler MONCEAU
45
INF1101 Tri par monceau - Exemple 3720 36 2 12 01234567 2373620125765 Retrait du premier élément MONCEAU
46
INF1101 Tri par monceau - Exemple 220 36 37 12 01234567 3723620125765 Percoler MONCEAU
47
INF1101 Tri par monceau - Exemple 202 36 37 12 01234567 3720362125765 Percoler MONCEAU
48
INF1101 Tri par monceau - Exemple 202 36 12 01234567 20362375765 Retrait du premier élément MONCEAU
49
INF1101 Tri par monceau - Exemple 202 12 36 01234567 20122375765 Percoler MONCEAU
50
INF1101 Tri par monceau - Exemple 20 12 2 01234567 2201236375765 Retrait du premier élément MONCEAU
51
INF1101 Tri par monceau - Exemple 2 12 20 01234567 21236375765 Percoler MONCEAU
52
INF1101 Tri par monceau - Exemple 212 01234567 22036375765 Retrait du premier élément MONCEAU
53
INF1101 Tri par monceau - Exemple 212 01234567 22036375765 Percoler MONCEAU
54
INF1101 Tri par monceau - Exemple 2 01234567 2122036375765 Retrait du premier élément Le tableau est maintenant trié
55
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)
56
INF1101 Tri partiel - exemple 37 20 2 6536 12 57 01234567 1237220576536 MONCEAU
57
INF1101 Tri partiel - exemple 20 37 12 6536 2 57 01234567 2201237576536 MONCEAU Création du monceau
58
INF1101 Tri partiel - exemple 2037 12 6536 57 01234567 3620123757652 MONCEAU Retrait du premier élément
59
INF1101 Tri partiel - exemple 2037 36 6512 57 01234567 1220363757652 MONCEAU Percoler
60
INF1101 Tri partiel - exemple 2037 36 65 57 01234567 6520363757122 MONCEAU Retrait du premier élément
61
INF1101 Tri partiel - exemple 3765 36 20 57 01234567 2037366557122 MONCEAU Percoler
62
INF1101 Tri partiel - exemple 3765 36 57 01234567 37366520122 MONCEAU Retrait du premier élément
63
INF1101 Tri partiel - exemple 3765 57 36 01234567 37576520122 MONCEAU Percoler
64
INF1101 Tri partiel - exemple 01234567 3637576520122 MONCEAU Si on arrête ici, on voit qu’on a bien obtenu les 3 plus petits éléments, qui sont en ordre croissant si on parcourt le tableau à partir de la fin
65
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.