Quick 2
3.1 Algorithme naïf
1. Écrire un algorithme de recherche du PBAC basé sur un parcours récursif de l’arbre.
Vous préciserez notamment de quel parcours il s’agit et vous justifierez ce choix.
Votre algorithme devra renvoyer un triplet bool ×bool ×noeud :
— le premier booléen détermine si xest présent ou non dans le sous-arbre parcouru
— le second booléen détermine si yest présent ou non dans le sous-arbre parcouru
— la clé renvoyée est le PBAC de xet de y, si celui-ci a été trouvé, sinon une valeur
spéciale ⊥.
2. Déterminer la complexité au pire de cet algorithme.
3.2 Cas particulier
On suppose pour ce paragraphe que l’arbre considéré est un ABR.
1. Écrire un algorithme de recherche du PBAC qui profite de cette particularité pour rendre
la recherche plus efficace.
2. Déterminer la complexité au pire de cet algorithme.
3.3 Bonus (uniquement si vous avez traité tout le reste) : précalcul
L’idée pour améliorer cet algorithme est d’effectuer un prétraitement : on exécute une fois
pour toutes un premier calcul (éventuellement coûteux) sur tout l’arbre, pour qu’ensuite chaque
appel à l’opération PBAC soit efficace.
Dans ce cas particulier, le prétraitement peut consister à calculer, pour chaque nœud de
l’arbre, quel est son nœud père (et à stocker cette information sous une forme accessible en
temps constant : tableau, pointeur...).
1. Écrire un algorithme permettant d’affecter à chaque nœud nl’information père(n).
2. Déterminer la complexité au pire de cet algorithme.
3. Écrire un algorithme de calcul du PBAC qui exploite cette nouvelle information, et dé-
terminer sa complexité au pire.
On suppose pour cette question que les nœuds xet ysont donnés, et qu’il n’y a donc
pas besoin de parcourir l’arbre pour les retrouver.
Algorithmique 25/11/2014 3/ 3