Algorithmique et Programmation Impérative 2 Les arbres binaires de recherche N.E. Oussous oussous@lifl.fr FIL USTL SDC - Licence p.1/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si SDC - Licence p.2/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si Soit T est vide. SDC - Licence p.2/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si Soit T est vide. Soit T contient au moins un nœud (on note v la valeur associée au nœud racine) et SDC - Licence p.2/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si Soit T est vide. Soit T contient au moins un nœud (on note v la valeur associée au nœud racine) et Toute valeur associée à un nœud de son sous-arbre principal gauche est v SDC - Licence p.2/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si Soit T est vide. Soit T contient au moins un nœud (on note v la valeur associée au nœud racine) et Toute valeur associée à un nœud de son sous-arbre principal gauche est v Toute valeur associée à un nœud de son sous-arbre principal droit est > v SDC - Licence p.2/16
Arbres binaires de recherche Un arbre binaire T est un arbre binaire de recherche (ABR) si et seulement si Soit T est vide. Soit T contient au moins un nœud (on note v la valeur associée au nœud racine) et Toute valeur associée à un nœud de son sous-arbre principal gauche est v Toute valeur associée à un nœud de son sous-arbre principal droit est > v Tout sous-arbre de T est lui-même un ABR SDC - Licence p.2/16
Arbres binaires de recherche v v ABR > v ABR SDC - Licence p.3/16
Arbres binaires de recherche v Exemples : 7 v > v ABR ABR Des ABR 7 3 9 3 9 2 5 2 5 8 SDC - Licence p.3/16
Arbres binaires de recherche v Exemples : v ABR > v ABR Des ABR 7 7 3 9 3 9 2 5 7 Des arbres non ABR 2 5 8 7 3 9 3 9 2 8 5 2 5 6 8 SDC - Licence p.3/16
Arbres binaires de recherche La recherche en table peut être traitée avec des arbres binaires de recherche. SDC - Licence p.4/16
Arbres binaires de recherche La recherche en table peut être traitée avec des arbres binaires de recherche. Les ABR ont un intérêt quand la table évolue très rapidement. Ils permettent de gérer de gros volumes d informations. Contraintes de mémoire : il faut connaître la taille maxi a priori SDC - Licence p.4/16
Arbres binaires de recherche La recherche en table peut être traitée avec des arbres binaires de recherche. Les ABR ont un intérêt quand la table évolue très rapidement. Ils permettent de gérer de gros volumes d informations. Les ABR réalisent de manière efficace les opérations de recherche, insertion et suppression. SDC - Licence p.4/16
Arbres binaires de recherche La recherche en table peut être traitée avec des arbres binaires de recherche. Les ABR ont un intérêt quand la table évolue très rapidement. Ils permettent de gérer de gros volumes d informations. Les ABR réalisent de manière efficace les opérations de recherche, insertion et suppression. Lorsque l arbre est «équilibré», (selon certains critères) on peut éviter qu il dégénère en une structure proche d une liste. On obtient des temps logarithmiques en fonction du nombre de nœuds. SDC - Licence p.4/16
Arbres binaires de recherche La recherche en table peut être traitée avec des arbres binaires de recherche. Les ABR ont un intérêt quand la table évolue très rapidement. Ils permettent de gérer de gros volumes d informations. Les ABR réalisent de manière efficace les opérations de recherche, insertion et suppression. Lorsque l arbre est «équilibré», on peut éviter qu il dégénère en une structure proche d une liste. L insertion et la suppression peuvent déséquilibrer l arbre. Il faut le rééquilibrer (avec soin). SDC - Licence p.4/16
ABR : recherche Present(x,A) C:Curseur ; begin if estvide(a) then Present := false else begin C := Racine(A) ; if Valeur(C)=x then Present:=true else if Valeur(C) < x then Present:=Present(x,sag(C)) else Present:=Present(x,sad(C)); end; // if end; SDC - Licence p.5/16
ABR : insertion Ajouter(x,A) C:Curseur ; begin C := Racine(A) ; if estvide(c) then begin arbrevide(g) ; arbrevide(d) ; Cons(x, g, d) ; end else if Valeur(C) <= x then Ajouter:=Ajouter(x,sad(C)) else Ajouter:=Ajouter(x,sag(C)); end; SDC - Licence p.6/16
Insertion : exemple 20 3 25 3 12 21 28 8 13 6 On insère le 9 SDC - Licence p.7/16
Insertion : exemple 20 3 25 3 12 21 28 8 13 6 9 SDC - Licence p.8/16
ABR : analyse Le nombre d opérations de la recherche ou de l insertion dépend de la hauteur de l arbre. SDC - Licence p.9/16
ABR : analyse Le nombre d opérations de la recherche ou de l insertion dépend de la hauteur de l arbre. si l arbre est bien équilibré, pour un ABR de n nœuds, on effectuera O(log 2 n) opérations SDC - Licence p.9/16
ABR : analyse Le nombre d opérations de la recherche ou de l insertion dépend de la hauteur de l arbre. si l arbre est bien équilibré, pour un ABR de n nœuds, on effectuera O(log 2 n) opérations si l arbre est un peigne, (complètement filiforme à gauche ou à droite) la hauteur vaudra n et le nombre d opérations sera O(n). SDC - Licence p.9/16
ABR : analyse Le nombre d opérations de la recherche ou de l insertion dépend de la hauteur de l arbre. si l arbre est bien équilibré, pour un ABR de n nœuds, on effectuera O(log 2 n) opérations si l arbre est un peigne, la hauteur vaudra n et le nombre d opérations sera O(n). Il est donc souhaitable d équilibrer les arbres au fur et à mesure des opérations d insertion (ou de suppression). SDC - Licence p.9/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer SDC - Licence p.10/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer si N a un seul fils, on le remplace par son fils unique SDC - Licence p.10/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer si N a un seul fils, on le remplace par son fils unique si N a deux fils (cas général) On se ramène à un des deux cas simples précédents. SDC - Licence p.10/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer si N a un seul fils, on le remplace par son fils unique si N a deux fils (cas général) on cherche son descendant M dont le contenu précède x dans l ordre infixe : c est le nœud le plus à droite dans sag(n) SDC - Licence p.10/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer si N a un seul fils, on le remplace par son fils unique si N a deux fils (cas général) on cherche son descendant M dont le contenu précède x dans l ordre infixe : c est le nœud le plus à droite dans sag(n) on remplace x par le contenu de M SDC - Licence p.10/16
ABR : suppression Soit x la clé à supprimer et soit N le nœud qui la contient. si N est une feuille, il suffit de la supprimer si N a un seul fils, on le remplace par son fils unique si N a deux fils (cas général) on cherche son descendant M dont le contenu précède x dans l ordre infixe : c est le nœud le plus à droite dans sag(n) on remplace x par le contenu de M on supprime M qui n a pas de fils droit. SDC - Licence p.10/16
ABR : suppression Retirer(x,A) C:Curseur ; begin C := Racine(A) ; if x < Valeur(C) then Retirer(x,sag(C)) else if x > Valeur(C) then Retirer(x,sad(C)) else if estvide(sag(c)) then C:=sad(C) else if estvide(sad(c)) then C:=sag(C) else Fixer_Valeur(Supprimer_Max(sag(C)),C); end; SDC - Licence p.11/16
ABR : suppression L appel à la fonction Supprimer_Max se fait si l arbre a deux sous-arbres non vides. SDC - Licence p.12/16
ABR : suppression L appel à la fonction Supprimer_Max se fait si l arbre a deux sous-arbres non vides. Supprimer_Max(C:Curseur):Objet supprime le nœud de plus grande valeur parmi les descendants de l arbre dont la racine est désignée par C. Elle retourne le contenu de ce nœud. SDC - Licence p.12/16
ABR : suppression L appel à la fonction Supprimer_Max se fait si l arbre a deux sous-arbres non vides. Supprimer_Max(C:Curseur):Objet supprime le nœud de plus grande valeur parmi les descendants de l arbre dont la racine est désignée par C. Elle retourne le contenu de ce nœud. Supprimer_Max(C) begin if estvide(sad(c)) then begin Supprimer_Max:=Valeur(C) ; C:=sag(C) ; end else end; Supprimer_Max:=Supprimer_Max(sad(C)); SDC - Licence p.12/16
Suppression : exemple 20 3 25 3 12 21 28 8 13 6 9 On supprime le 13 SDC - Licence p.13/16
Suppression : exemple 20 3 25 3 12 21 28 8 6 9 SDC - Licence p.13/16
Suppression : exemple 20 3 25 3 12 21 28 8 13 6 9 On supprime le 12 SDC - Licence p.14/16
Suppression : exemple 20 3 25 3 12 21 28 8 13 6 9 SDC - Licence p.14/16
Suppression : exemple 20 3 25 3 9 21 28 8 13 6 SDC - Licence p.14/16
Suppression : exemple 16 8 18 4 10 24 2 6 9 12 11 On supprime le 16 SDC - Licence p.15/16
Suppression : exemple 16 8 18 4 10 24 2 6 9 12 11 SDC - Licence p.15/16
Suppression : exemple 16 8 18 4 10 24 2 6 9 12 11 SDC - Licence p.15/16
Suppression : exemple 16 8 18 4 10 24 2 6 9 12 11 SDC - Licence p.15/16
Suppression : exemple 12 8 18 4 10 24 2 6 9 11 SDC - Licence p.15/16
Suppression : coût Une suppression comporte donc un parcours d une unique branche, un éventuel échange de valeur, puis la suppression d un nœud possédant au maximum 1 successeur. SDC - Licence p.16/16
Suppression : coût Une suppression comporte donc un parcours d une unique branche, un éventuel échange de valeur, puis la suppression d un nœud possédant au maximum 1 successeur. Les deux dernières opérations peuvent être implémentées en Θ(1). SDC - Licence p.16/16
Suppression : coût Une suppression comporte donc un parcours d une unique branche, un éventuel échange de valeur, puis la suppression d un nœud possédant au maximum 1 successeur. Les deux dernières opérations peuvent être implémentées en Θ(1). La suppression a donc, comme les autres opérations, un coût maximal en Θ(log 2 n) si l arbre est équilibré. SDC - Licence p.16/16