Vous êtes sur la page 1sur 13

Cours Algorithmique, 2ème partie AS IUT

Cours 6 : Arbres Binaires. Extensions : Tas

Anne Vilnat
http://www.limsi.fr/Individu/anne/coursAlgo
Plan

1 Tas
Tas : définition

Définition :

Un tas est un arbre binaire complet tel que tous les chemins
issus de la racine soient non croissants

Exemple
Tableau associé à un tas

Définition :

tableau associé à un tas = tableau ayant la propriété de tas


Caractérisation d’un tableau t ayant la propriété de tas : tout
sous-tableau de chemin non-croissant
Sous-tableau de chemin = chaque indice est la moitié de son
successeur

Exemples

1,3,6,12
1,2,5,11
1 2 3 4 5 6 7 8 9 10 11 12
7 66 55 44 60 33 55 22 41 58 25 29
Tas = tableau particulier

Définition :

Tout tableau peut être considéré comme un arbre binaire


complet
Les tas sont des cas particuliers de tableaux : ceux qui
respectent la propriété de tas :
pour tout indice i, tab[i] ≥ tab[2i] et tab[i] ≥ tab[2i + 1]
Tas : insertion et suppression

Insertion :

placer le nouvel élément au dernier niveau à droite


percolation jusqu’à ce que la propriété de tas soit rétablie, par
permutation de père et fils

Suppression :

suppression de la racine, remplacée par l’élément du dernier


niveau le plus à droite
percolation pour rétablir un tas, par permutation de père et fils
Insertion dans un tas
Insertion dans un tas
Retrait d’un tas
Retrait d’un tas
Application : tri par tas

Principe :

Tri non récursif


efficace en O(nlog (n))
Principe :
Le tableau est considéré comme un arbre binaire complet
l’arbre est transformé en tas
Le plus grand élément est à la racine
en partant du bas à droite, on répète le placement de la racine
en fin de sous-tableau et remine en tas du sous-arbre précédent
Procédure enTas

procédure enTas(tab, k, n) entre k et n


paramètres tab: tableau[1, MAX] d’entiers (E/S)
k, n: entiers (E)
variables tmp, j :entiers
début
tmp := tab[k]
tant que (k ≤n/2) faire sous-arbre en k non trivial
j := 2k // fils gauche de k
si (j+1 <=n et tab[j] <tab[j+1])
alors j := j+1 fils droit plus grand des deux
si (tmp > tab[j])
alors break le père plus grand que ses fils
tab[k] := tab[j] le fils à la place du père
k := j au tour du sous-arbre du fils
ftq
tab[k] := tmp la racine à l’endroit voulu
fin
Procédure triTas

procédure triTas(tab, n)
paramètres tab: tableau[1, MAX] d’entiers (E/S)
n: entiers (E)
variables i :entier
début
pour i := n/2 à 1 pas -1 faire sous-arbres mis en tas
enTas(tab, i, n)
fpour le résultat est un tas : la racine est le max
pour i := n à 2 pas -1 faire
échanger(tab[1], tab[i]) la racine va à sa place
enTas(tab, 1, i) on rétablit tas entre 1 et i
fpour
fin

Vous aimerez peut-être aussi