de recherche Alain Giorgetti giorgetti@univ-fcomte.fr http://lifc.univ-fcomte.fr/~giorgett/ Laboratoire d'Informatique de lUniversit de Franche-Comt Arbres binaires de recherche - A. Giorgetti 2 Structures collectives tudies ici Structures linaires Table accs index : t[i] traitement itratif : FOR, WHILE, REPEAT Liste chane un seul suivant, accs squentiel : l.suivant traitement rcursif : IF NOT l.estVide THEN ... Structures arborescentes Arbre binaire : 2 suivants maximum Arbre gnral : nombre quelconque de suivants Traitement rcursif : les suivants sont aussi des arbres Un arbre n'a pas de cycle (moins gnral qu'un graphe) Arbres binaires de recherche - A. Giorgetti 3 Arbre : structure de donnes Un arbre est une collection (finie) de nuds de mme type Un arbre est dfini (rcursivement) par : un premier nud (appel racine de larbre) 0, 1, 2 ou plusieurs sous-arbres disjoints (appels descendants de la racine) Vocabulaire feuille : nud sans descendant fils d'un nud : racine d'un descendant de ce nud Sur l'exemple Le nud de valeur t est un fils du nud Les feuilles sont les nuds h o t y a s c Exemple avec des nuds stockant une valeur de type char Arbres binaires de recherche - A. Giorgetti 4 Cas tudi : arbre binaire Un arbre binaire est un arbre dans lequel chaque nud possde 0, 1 ou 2 fils Chaque nud a un descendant gauche et un descendant droit (ventuellement vides) Un arbre binaire peut tre vide Vocabulaire : Chaque nud stocke une information appele valeur du nud Chaque nud est le pre de ses fils Deux nuds qui ont le mme pre sont frres b a n i r e t r y gauche droit e gauche droit Arbres binaires de recherche - A. Giorgetti 5 Implanter un arbre binaire 3 types type des donnes stockes aux nuds : TValeur type des nuds : TNoeud type des arbres binaires : TArbre Relations entre types Structure rcursive Un arbre binaire a une racine qui est un nud Les descendants dun nud sont des arbres binaires Les types TNoeud et TArbre s'utilisent l'un l'autre Solution : les descendants d'un nud sont des pointeurs On identifie un arbre avec ladresse de sa racine TYPE TArbre = ^TNoeud; Arbres binaires de recherche - A. Giorgetti 6 Extrait de l'interface Pascal TYPE TValeur = char; {changer ici pour un autre type} TArbre = ^TNoeud; TNoeud = OBJECT val : TValeur; gauche : TArbre; droite : TArbre; {} CONSTRUCTOR init; {Self est construit, Self.gauche = Self.droite = nil} END; Remarque : le type TArbre nest pas un type objet. On peut aussi le noter TPtNoeud. Arbres binaires de recherche - A. Giorgetti 7 Arbre vide : pointeur sur nil Exemple : arbre 5 nuds (dont la valeur est un mot) Reprsentation dun arbre binaire le nud racine unArbre une phrase cinq de mots nil nil nil nil nil nil un nud une feuille objet de type TNoeud Arbres binaires de recherche - A. Giorgetti 8 Toutes les mthodes lies aux arbres sont dans le type TNoeud, car TYPE TArbre = ^TNoeud; Primitives d'encapsulation des champs FUNCTION arbreGauche : TArbre; FUNCTION arbreDroit : TArbre; Traitement rcursif Condition d'arrt : un nud est-il une feuille ? FUNCTION estFeuille : boolean; Conditions d'accs aux descendants (gauche et droit) Transformations d'arbres Ajout de feuilles, de sous-arbres Suppression d'une feuille, d'un sous-arbre gauche ou droit Mthodes du type TNoeud Arbres binaires de recherche - A. Giorgetti 9 Motivations des ABR ABR : Arbre binaire de recherche Atout algorithmique : recherche et tri efficaces Comparaison avec d'autres structures collectives Les tableaux et tables recherche dichotomique si le tableau est tri : efficace (log 2 n) tri : peu efficace (n 2 ) Les listes chanes recherche : peu efficace (n) tri rcursif par fusion : efficace (n log 2 n) Le secret des ABR tri efficace car les donnes sont maintenues ordonnes recherche efficace, inspire par la dichotomie Arbres binaires de recherche - A. Giorgetti 10 Arbre binaire de recherche Un arbre binaire de recherche (ABR) ordonne totalement les informations quil stocke : Toutes les valeurs infrieures ou gales celle de la racine sont stockes dans le descendant gauche de la racine Toutes les valeurs strictement suprieures celle de la racine sont stockes dans le descendant droit Spcification de cette proprit d'ordre Pour chaque nud n de larbre, on sassure que : n.gauche.maxVal <= n.val < n.droite.minVal (1) Conditions dfinir les mthodes maxVal et minVal le type TValeur doit disposer dune fonction de comparaison tout ajout, toute suppression de nud doit maintenir (1) vraie Arbres binaires de recherche - A. Giorgetti 11 Exemple d'ABR Exercices Vrifier que la proprit d'ordre est vrifie Insrer des entiers en conservant cette proprit Remarques Une insertion peut toujours se faire aux feuilles de larbre On peut supprimer des feuilles Pour la suppression dun nud 2 fils, voir plus loin 6 3 1 2 9 7 4 3 gauche droite 8 Arbres binaires de recherche - A. Giorgetti 12 Un arbre binaire de recherche est un arbre binaire particulier stocke une collection ordonne de valeurs Dfinir un type objet TNoeudAbr avec les mthodes FUNCTION minVal : TValeur; {retourne la plus petite valeur des noeuds de Self} FUNCTION maxVal : TValeur; {retourne la plus grande valeur des noeuds de Self} La pr-condition est toujours { Self est construit et nest pas vide } Parcours complet dans lordre parcours infix des nuds de larbre (exercice) Types Pascal pour les ABR Arbres binaires de recherche - A. Giorgetti 13 Ajout et suppression dans un ABR La structure dordre doit tre conserve prcondition et postcondition commune toutes les mthodes { tout noeud n de Self verifie n.gauche^.maxVal <= n.val < n.droite^.minVal } Insrer une valeur au bon endroit PROCEDURE inserer(v : TValeur); { Self contient un noeud supplmentaire de valeur gale v et la structure dordre est conserve } programmer en exercice Supprimer une valeur { v est la valeur dun nud n de Self } PROCEDURE supprimer(v : TValeur); { Le nud n de Self est supprim et la structure dordre est conserve } Arbres binaires de recherche - A. Giorgetti 14 Recherche dans un ABR Un ABR permet une recherche efficace { Self est construit } FUNCTION rechercher(v : TValeur) : TPtNoeud; { retourne un pointeur sur le premier noeud de Self dont la valeur est v, ou nil sil nexiste pas de tel noeud } Algorithme de recherche rcursif cas darrt avec chec : larbre est vide sinon, cas darrt avec succs : v est la valeur du nud racine sinon, poursuite de la recherche dans le sous-arbre gauche ou dans le sous-arbre droit, selon ... Arrt de l algorithme ? Oui, car la taille des arbres explors est un entier naturel qui dcrot strictement. algorithme efficace : ~ log 2 (n) nuds parcourus Arbres binaires de recherche - A. Giorgetti 15 Algorithme de suppression 4 cas de nud supprimer une feuille : immdiat un nud avec un seul fils : on le remplace par son fils un nud avec 2 fils : on lui donne la valeur minimale de son sous-arbre droit, et on supprime le nud qui a cette valeur (rcursif) Remarques Lalgorithme sarrte car Il n'est pas quivalent de prendre la valeur maximale du sous-arbre gauche (pourquoi ?) On peut viter lappel rcursif de suppression (comment ?) Arbres binaires de recherche - A. Giorgetti 16 Equilibrer les ABR Une mauvaise succession dinsertions et de suppressions peut dsquilibrer larbre et rendre les recherches moins efficaces Arbre binaire quilibr intuitivement : branches de taille voisine dfinition : pour tout nud n de larbre, | hauteur(n.gauche) - hauteur(n.droite) | <= 1 On dispose dalgorithmes qui r-quilibrent larbre, assez coteux, utiliser de temps en temps Exercices spcifier puis implanter une mthode hauteur tester si un arbre est quilibr ...