Structure de tas
Arbres parfaits
Retrouver la définition des arbres binaires parfaits dans le cours et leur représentation sous forme de tableau. On commence par écrire du code pour faciliter la manipulation des arbres binaires parfaits.
On se sert de la fonction Fils pour écrire un parcours en profondeur récursif sur l'arbre binaire parfait. On écrira un parcours préfixe, c'est-à-dire : noeud, fils gauche, fils droit.
On rappelle qu'un tas est un arbre binaire parfait tel que la valeur de chaque noeud soit supérieure ou égale à la valeur de ses fils, ou autrement dit, que la valeur de chaque noeud soit inférieure ou égale à la valeur de son père.
Ecrire une fonction qui teste si un arbre binaire parfait est un tas (Remarque, il y a plusieurs façons de l'écrire)
Insertion
On va écrire une fonction d'insertion dans un tas.
On place le nouvel élément à la fin du tas
On teste la valeur du nouvel élément par rapport à celel de son père, si elle est supérieure, on les échange
Si un échange a eu lieu, on se place sur le père et on recommence
On continue tant que des échanges ont lieu ou que l'on a pas atteint la racine
Remarque : l'algorithme (avec exemples) a été vu en cours
Pour faciliter l'utilisation de la fonction par la suite, on supposera que l'élément à insérer est déjà dans le tableau. On considère que les premières cases du tableau représente le tas avant l'insertion. L'élément à insérer est , il peut y avoir d'autres valeurs après qui ne font pas partie du tas.
Tamiser (heapify)
L'opération de tamisage a la propriété suivante : si le sous-arbre issu d'un noeud a la propriété d'être un tas sauf en sa racine . Alors le tamisage de assure que le sous-arbre résultat sera un tas. L'algorithme est le suivant :
Si est plus petit qu'un de ses fils, l'échanger avec le maximum de ses fis.
Si un échange a eu lieu avec un noeud , relancer le tamisage sur
Exemple l'algorithme de suppression de la racine vu en cours revient à échanger la racine et la dernière valeur du tas puis à lancer un tamisage sur la nouvelle racine.
Tri par tas
Le principe du tri par tas est de d'abord former un tas avec les valeurs du tableau, puis d'extraires les éléments maximums successivement. Deux stratégies existent pour la première étape (création du tas). La première est celle que nous avons vu en cours d'insérer les éléments dans le tas un par insertion succesive.
La deuxième stratégie possible est considérer directement l'ensemble du tableau comme un arbre binaire parfait et d'utiliser le tamisage pour former un tas. Cependant, contrairement à la suppression de la racine, il faut effectuer plusieurs tamisage. Travaillez sur des exemples pour voir sur quels élements et dans quel ordre les tamisages doivent se faire pour obtenir un tas.
Comparaison
Reprenez les fonctions écrites précédemment (insertion, tamiser, supprimeRacine, ...) pour faire en sorte qu'elles retournent les nombres d'écritures et de comparaisons, comme nous l'avions fait pour les tris précédents.
Comparer les deux stratégies de tri par tas, laquelle est plus rapide ?
Comparar le tri par tas avec les tris précédents