Chapitre 3 - Les Tas
Chapitre 3 - Les Tas
Chapitre 3 - Les Tas
92
www.kadjo-lambert.c4.fr
Chapitre III : Tas
III.1 Notion de tas
Définition et caractéristiques
Un tas (ou monceau) est un arbre binaire partiellement complet (arbre parfait)
étiquetté par des objets comparables tel que
tout nœud interne possède une clé supérieure ou égale aux clés de ses fils
pour un tas max (binary maxheap)
tout nœud interne possède une clé inférieure ou égale aux clés de ses fils pour
un tas min (binary minheap)
NB: Généralement, le tas max est appelé simplement tas
On a donc la propriété suivante pour les tas :
Pour tous les nœuds de l'arbre autre que la racine,
étiquette(père) ≥ étiquette(fils).
La hauteur d'un tas est O(lg n)
Quelques procédures
– La procédure Percoler() qui s’exécute en O(lg n), permet de la conservation de la propriété
de tas max. Si la valeur du nœud est augmentée et qu'elle devient de ce fait supérieure à
celle de son père, il suffit de l'échanger avec celle-ci, puis de continuer ce processus vers le
haut jusqu'au rétablissement de la propriété du tas. On dit que la valeur modifiée a été
percolée jusqu'à sa nouvelle position,
95
Chapitre III : Tas
III.2 Conservation de la structure de tas
Condition :
les arbres binaires Gauche(i) et Droite(i) sont des tas max
A[i] peut être plus petit que ses enfants (et donc un tri est nécessaire)
La procédure EntasserMax va faire évoluer l'arbre afin d'obtenir un tas max en i
1
18
2 3
11 16
4 5 6 7
14 15 10 8
8 9 10 11
7 9 13 12 97
Chapitre III : Tas
III.2 Conservation de la structure de tas
101
Chapitre III : Tas
III.3 Construction d’un tas
Exemple
E3 30
7
7
30 0 15
20
E1
E4
0 30 15 20 -2 4
7 Ok2
E2
15 0 Ok3
Ok1
102
Chapitre III : Tas
III.4 Algorithme de tri par tas
Algorithme
Procedure TrisTAS T([1..n] )
Nb : entier
Début
ConstruireTaxMAX (T[1..n])
Permute (t[1], T[n])
Nb n – 1
Tant que Nb > 1 faire
TransformeEnTasMAX (T[1..Nb])
Permute (T[1], T [Nb])
Nb Nb – 1
Fin Tant que
Fin ;
103
Chapitre III : Tas
III.5 Files de priorité
Définition et caractéristiques
Structure de données permettant de gérer un ensemble S d'éléments auxquels on associe
une "clé"
Cette clé permet la définition des priorités
La file de priorité gère les tâches en attente selon leur priorité
Quand une tâche est terminée, on exécute la tâche de priorité la plus élevée suivante
Il est possible d'insérer dans la file une tâche, éventuellement prioritaire
104
Chapitre III : Tas
III.5 Files de priorité
Procédures et fonctions
Retourner l'élément ayant la clé maximale
Procédures et fonctions
Insérer un élément dans un Tas
Augmenter la valeur d'une clé
Procedure InsererTasMAX(T, clé )
Début
taille[T] taille[T]+1
Procedure AugmenterCleTAS (T,i,clé )
T[taille[T] ] clé
Début
AugmenterCleTAS (T, taille[T] ,clé )
Si clé < T[i]
Fin
alors ERREUR
sinon
T[i] clé
TantQue i> 1 et T[Parent(i)]<T[i] faire
permute(T[i], T[Parent(i)])
i T[Parent(i)]
Fin Tanque
FinSI
Fin
106