A Rappels algorithmiques
441
Dans les algorithmes qui suivent, nous supposons que la taille maximale NMAX
de l’arbre est fixée, 5 la taille du tas sera dénoté par un entier n ∈ {0, . . . , NMAX}.
En prenant comme structure de données un tableau de la taille maximale NMAX, un
arbre parfait non vide de taille n se trouve donc dans le sous-tableau T[1 . . n] : le
i-ième nœud a pour marque la clé contenue dans T[i]. Dans la suite, nous parlons
indifféremment d’un arbre parfait de taille n, ou d’un (sous-)tableau T[1 . . n].
Construction du tas : algorithme de Floyd
Si nous connaissons à l’avance toutes les clés à ajouter, nous pouvons construire le
tas à partir de ces clés, avec un algorithme dû à Floyd. Supposons que nous ayons un
algorithme générerTas qui, à partir de deux tas de tailles « compatibles » et d’une
clé, construit un nouveau tas. Alors nous pouvons transformer un arbre parfait en
tas « de bas en haut » (des feuilles vers la racine), par l’algorithme suivant.
Fonction Construire(tableau T, entier n)
// Précondition : T[1 . . n] est un tableau de clés (n ≤ NMAX).
// Postcondition : Retourne le tableau T où les n clés ont été réordonnées en
un tas de taille n, contenu en T[1 . . . n].
// Utilise : générerTas
// Variable locale : entier i
pour i de
n
2
à 1 faire
T = générerTas(T, i)
retourner T
L’algorithme générerTas fusionne en un nouveau tas un parent T[i] et ses deux
tas « fils » T[2i] et T[2i + 1].
5 La valeur NMAX est alors une constante, que nous n’avons pas besoin de passer en paramètre des
algorithmes de manipulation de tas.
Précédent

- 464/533

Suivant