• Aucun résultat trouvé

File de priorit´e

N/A
N/A
Protected

Academic year: 2022

Partager "File de priorit´e"

Copied!
9
0
0

Texte intégral

(1)

F ILES DE PRIORIT E ´

(2)

File de priorit´e

Type abstrait d’une file de priorit´e ou tas ou monceau (priority queue & heap)

Objets : ensembles de valeurs naturelles (abstraction de cl´es comparables) Op´erations :

insert(x, H) : insertion de l’´el´ement x dans H

deleteMin(H) : enlever l’´el´ement de valeur minimale dans H Op´erations parfois support´ees :

merge(H1, H2) : fusionner deux files

findMin(H) : retourne (mais ne supprime pas) l’´el´ement minimal delete(x, H) : supprimer ´el´ement x

(3)

Monceau

on va implanter la file de priorit´e par une arborescence dont les nœuds sont dans l’ordre de monceau :

si x n’est pas la racine, alors valparent(x) ≤ val(x).

1

3 11

4 7 12 15

14

9 6 19

Op´eration findMin en O(1) : retourner val(racine)

(4)

Monceau (cont)

Les valeurs ne sont pas stock´ees avec les nœuds mais plut ˆot un pointeur vers les donn´ees associ´ees (en Java, il n’y a pas de grande diff´erence : val est un objet Comparable)

clé=1 champ 1 champ 2

...

clé=11 champ 1 champ 2

...

clé=4 champ 1 champ 2

...

clé=3 champ 1 champ 2

...

clé=7 champ 1 champ 2

...

Comment ins´erer et supprimer ?

Id´ee de base : on ne change pas la structure de l’arbre

(5)

Monceau — insertion

ajouter une feuille vide («bulle») + monter la bulle vers la racine jusqu’`a ce qu’on trouve la place pour la nouvelle valeur

1

3 11

4 7 12 15

14

9 6 19

23 insertion de 2

1

3 11

4 7 12 15

14

9 6 23 19

1

11

4 7 12 15

14

9 6 19

3

23 1

2 11

4 7 12 15

14

9 6 19

3

23

23>2

3>2

1≤2 (bulle)

(6)

Monceau — suppression

remplacer le nœud par une «bulle», enlever une feuille et pousser la bulle vers les feuilles jusqu’`a ce qu’on trouve la place pour la nouvelle valeur

1

2 11

4 7 12 15

14

9 6 19

3

23 suppression de 1

bulle

2

4 7

9 6

3

23 feuille 14

détachée

2

4 7

9 6

3

23 14 2

3

4 7

9 6 23

14 2

3

7 14

23

(7)

Monceau — efficacit´e

Temps pour insertion : d´epend de la profondeur o `u on cr´ee la bulle

Temps pour suppression : d´epend du nombre des enfants des nœuds ´echang´es avec la bulle

Une solution simple : utiliser un arbre binaire complet de hauteur h :

il y a 2i nœuds de chaque profondeur i = 0, . . . , h−1; les niveuax sont «remplis»

de gauche `a droit

profondeur 0 profondeur 1

profondeur 2 profondeur 3

(8)

Tas binaire

Arbre binaire complet → pas de pointeurs parent, left, gauche! Les n cl´es sont stock´es dans un tableau H[1..n].

Parent de nœud i est `a d(i − 1)/2e, enfant gauche est `a 2i, enfant droit est `a 2i + 1.

1

3 11

4 18 12 15

9 6

1 3 11 4 18 12 15 9 6

1 2 3 4 5 6 7 8 9

indice dans le tableau:

(9)

Tas binaire — insertion

INSERT(v, H) // tas binaire dans H[1..|H|]

I1 NAGER(v,|H| + 1, H)

NAGER(v, i, H) // tas binaire dans H[1..|H|] N1 p ← d(i − 1)/2e

N2 while p 6= 0 et H[p] > v do N3 H[i] ← H[p]

N4 i ← p

N5 p ← d(i − 1)/2e N6 H[i] ← v

(NAGER est «percolate up» dans le livre)

en N1 et N5, on peut juste faire un d´ecalage binaire (p=i>>1 en Java) — tr`es rapide

Références

Documents relatifs

c) En s’appuyant sur ce qui précède, indiquer une construction géométrique du point w, a et θ étant connus.. Baccalauréat 1990 Page 2 sur 2 Adama Traoré

Faire une figure en prenant BC= 3cm, BP = 1cm et en plaçant (BC) horizontalement sur la feuille. c) Quelle est la nature des triangles RAQ et PAS ?.. b) Quel est le lieu

On note ( C ) la courbe de f dans le plan muni d’un repère orthonormé d’unité graphique 3cm.. EXERCICE II

Soit n, un entier naturel et x un réel quelconque.. Soit x un

( C ) est la courbe représentative de f dans un repère orthonormal d’unité graphique 2 cm. I- 1°) Prouver que la courbe ( C ) admet deux asymptotes dont on donnera

Prouver que toutes courbes (C n ) passent par un même point fixe A dont on déterminera les coordonnées. a) Étudier le sens de variation de φ en précisant ses limites aux bornes

´ Ecrivez un algorithme qui attribue une salle ` a chaque cours sachant que l’on veut minimiser le nombre de salles occup´ ees et que l’on ne veut pas que deux cours aient lieu en

SpaceHeader: TYPE = RECORD [ link: POINTER TO SpaceHeader, segment: DataSegmentHandle];. InitSpace: