Question 3 Écrire une méthode permettant d’insérer un objet dans un arbre. Quelle est la complexité
de cette méthode ?
Question 4 Que se passe-t-il si on insère les entiers 3,4,1,2,5,6.
Extraire le plus petit objet d’un arbre de Braun est plus délicat qu’il peut y paraître au premier abord.
Nous allons procéder en plusieurs étapes.
Question 5 Écrire une méthode efficace permettant d’extraire un objet d’un arbre (n’importe lequel).
L’idée est :
– d’extraire l’objet porté par la racine si l’arbre est constitué d’un nœud unique.
– d’extraire un objet du sous-arbre gauche et de permuter les sous-arbres dans le cas contraire.
Donner la complexité de cette méthode.
Question 6 Écrire une méthode efficace permettant de remplacer le plus petit objet d’un arbre par un
objet donné. Donner la complexité de cette méthode.
Question 7 Écrire une méthode efficace permettant de fusionner deux arbres A et B tels que la taille
de A est égale à la taille de B, ou à la taille de B plus 1. On supposera que ces deux arbres sont des
sous-arbres d’un même arbre et qu’on peut donc les modifier. On utilisera de plus les deux méthodes
précédentes. Donner la complexité de cette méthode.
On a maintenant toutes les briques algorithmiques nécéssaires pour extraire le plus petit objet de
notre file de priorité.
Question 8 Écrire une méthode efficace permettant d’extraire le plus petit élément d’un arbre. Donner
la complexité de cette méthode.
2 Skew Heaps
On a essentiellement la même structure de données d’arbres binaires que précédemment. Un arbre
est soit une feuille <>, soit un nœud < T1, a, T2>ou T1et T2sont des arbres et aun entier. La notion
de tas (être partiellement ordonné) reste la même. On va utiliser une notion d’équilibrage plus lâche
mais efficace. Prouver son efficacité demandera d’utiliser une complexité amortie.
Le but de cette exercice est de voir encore des invariants récursifs astucieux, et aussi la complexité
amortie.
Les algorithmes d’insertion d’un élément et d’extraction du plus petit élément du tas sont décrits par
les équations récursives suivantes :
(< T1, a, T2>)=(a, (T1, T2))
(a, T ) = (T, <<>, a, <>>)
(T, <>) = T
(<>, T ) = T
(T, U) = (T, U)si la racine de Test plus petite que la racine de U
(T, U) = (U, T )sinon
(< T1, a, T2>, U) = < T2, a, (T1, U)>
Question 9 Montrer que ces algorithmes sont corrects.
Question 10 On insère successivement dans l’arbre vide les entiers 1,2,3,4. Quel est l’arbre obtenu ?
Est-il équilibré ? Que se passe-t-il quand on insère successivement 4,3,2,1?
2