530 likes | 902 Views
LES ARBRES. IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier. LES ARBRES. Définitions et généralités sur les arbres Arbre binaire Arbre binaire de recherche (ABR) Arbre rouge noir Arbre 2-3. : nœud. b. b. racine. i. r. z. i. r. z. n. a. e.
E N D
LES ARBRES IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Françoise Greffier - IUP GMI - Besançon
LES ARBRES • Définitions et généralités sur les arbres • Arbre binaire • Arbre binaire de recherche (ABR) • Arbre rouge noir • Arbre 2-3 Françoise Greffier - IUP GMI - Besançon
: nœud b b racine i r z i r z n a e n a e EXEMPLES un graphe un arbre Un arbre est un graphe - non orienté - connexe : mise à part la racine de l ’arbre, tout nœud possède un père - acyclique : ne comporte pas de cycle Françoise Greffier - IUP GMI - Besançon
livre C1 C2 C3 C1.1 C1.2 C1.3 C3.1 C3.2 EXEMPLES • arbre généalogique d ’une famille • table des matières d ’un livre (livre(C1((C1.1),(C1.2),(C1.3))),(C2),(C3 ((C3.1),(C3.2)))) Arbre non vide :: (racine (fils1, fils2, …,filsN)) Françoise Greffier - IUP GMI - Besançon
: nœud b racine i r z n a e Arbres : propriétés Un arbre comprend un nombre fini de sommets (appelés aussi nœud). Un des nœuds de l’arbre est particulier il n ’a pas de père : c’est la racine de l’arbre Il existe un chemin unique entre la racine de l ’arbre et chaque sommet. Françoise Greffier - IUP GMI - Besançon
: nœud b racine i r z n a e Arbres : définitions i est le père de n et de a n est un descendant de i i est un ascendant de a Le sous-arbre de racine i est l’arbre composé des descendants de i, enraciné en i On appelle aussi ce sous-arbre : fils de b ==> algorithmes récursifs Françoise Greffier - IUP GMI - Besançon
: nœud b racine i r z n a e Arbres : définitions Un nœud sans fils est un nœud externe ou une feuille. Exemples : n,a,e Un nœud qui n ’est pas une feuille est un nœud interne. Exemples : b,i,r Le nombre de fils d ’un nœud x est appelé degré de x. Lorsque chaque nœud doit avoir au plus n fils (n fixé) alors l ’arbre est n-aire. Exemple : si n=2, l’arbre est binaire. Françoise Greffier - IUP GMI - Besançon
: nœud b Profondeur 0 i r z Profondeur 1 n a e Profondeur 2 Arbres : profondeur Deux nœuds frères ont la même profondeur. La profondeur ou niveau d ’un nœud est le nombre de liens sur l ’unique chemin qui conduit de la racine à ce nœud. N étant un nœud de l’arbre : - ou N est racine => niveau=0 - ou niveau (N)= niveau (père(N))+1 Françoise Greffier - IUP GMI - Besançon
: nœud b i r z n a e Arbres : hauteur La hauteur d ’un arbre est égale au niveau maximum de ses feuilles +1. Hauteur = 3 Un arbre est équilibré si pour tout nœud, la valeur absolue de son facteur d ’équilibre est inférieure ou égale à 1. Facteur d’équilibre d’un nœud dans un arbre binaire = hauteur (sous-arbre droit) - hauteur (sous-arbre gauche) Françoise Greffier - IUP GMI - Besançon
b i r z n a e Arbres : facteur d’équilibre Hauteur = 3 Un arbre est équilibré si pour tout nœud, la valeur absolue de son facteur d ’équilibre est inférieure ou égale à 1. Facteur d ’équilibre d’un nœud dans un arbre de degré deux : hauteur (sous-arbre droit) - hauteur (sous-arbre gauche) Un arbre est dégénéré si tous les nœuds de cet arbre ont au plus un descendant. Un arbre dégénéré est équivalent à une liste linéaire Françoise Greffier - IUP GMI - Besançon
b i r n a e z Arbre complet Un arbre complet Nombre de nœuds (taille) dans un arbre binaire complet : N = 2H-1 Hauteur H d ’un arbre binaire complet ayant N nœuds : H = Log2(N)+1 Un arbre complet est un arbre d’arité k pour lequel toutes les feuilles ont même profondeur (h) et tous les nœuds ont pour degré k. Exemple : k=2 et h = 3. => nombre de feuilles d ’un arbre complet = kh-1 / k-1 Françoise Greffier - IUP GMI - Besançon
b gauche droit i r n a e + + r f gauche droit gauche droit - 4 - 4 y t a b b a == Arbre binaire Dans un arbre binaire chaque nœud a un degré inférieur ou égal à deux. L ’information de position : gauche, droit caractérise un arbre binaire. (a-b)+4 (b-a)+4 Françoise Greffier - IUP GMI - Besançon
b gauche droit r i e n a r f y t Arbre binaire : définition Définition récursive d’un arbre binaire : Un arbre binaire est : - soit vide - soit (sous-arbre gauche, racine, sous-arbre droit) Un arbre binaire est un arbre dans lequel chaque nœud a un sous-arbre droit (fils droit) et un sous-arbre gauche (fils gauche). (Un sous-arbres peut-être éventuellement vide) Un ABR est défini par : nœud<X>* Ptr Un nœud est défini par : nœud<X>* gauche; nœud<X>* droit; X valeur; Françoise Greffier - IUP GMI - Besançon
34 gauche droit 5O 23 45 20 30 48 29 Arbre binaire de recherche (ABR) Un arbre binaire de recherche (ABR) ordonne totalement les informations qu’il stocke(par clé) : • Toutes les clés des valeurs inférieures ou égales à celle de la racine sont stockées dans le descendant gauche de la racine • Toutes les clés des valeurs strictement supérieures à celle de la racine sont stockées dans le descendant droit de la racine Propriété caractéristique des ABR: Pour chaque nœud n de l’arbre :(1)n.arbreGauche.maxVal<=n.val<n.arbreDroit.minVal Françoise Greffier - IUP GMI - Besançon
34 gauche droit 5O 23 45 20 30 48 29 24 49 Arbre binaire de recherche Conditions • La classe Valeur doit disposer d’une fonction de comparaison sur les clés • Tout ajout, toute suppression de nœud doit maintenir la propriété (1) vraie Exemple : ajouter la valeur 49 : 49 Exemple : ajouter la valeur 24 24 Remarque : Tout ajout se fait par une feuille. Françoise Greffier - IUP GMI - Besançon
34 gauche droit 23 23 5O 34 20 20 30 30 45 5O 29 48 45 29 ABR : suppression Analyse : l ’algorithme de suppression d ’un nœud présente 3 cas : une feuille : trivial 48 48 Françoise Greffier - IUP GMI - Besançon
34 gauche droit 23 23 5O 34 20 20 30 30 45 45 29 48 48 29 ABR : suppression Deuxième cas de nœud à supprimer un nœud simple : on le remplace par son unique fils 50 50 Françoise Greffier - IUP GMI - Besançon
34 gauche droit 23 5O 34 20 30 45 29 29 48 20 30 45 48 ABR : suppression Troisième cas de nœud à supprimer • un nœud double : on lui donne la valeur minimale de son sous-arbre droit • (ex: 29), et on • supprime le nœud • qui a cette valeur 23 23 5O Françoise Greffier - IUP GMI - Besançon
Parcours dans un ABR template <class X>class ABR { ... void infixe (void); // les valeurs de IC sont éditées par ordre // croissant sur les clés... } si (non vide) alors infixe du sous-arbre gauche cout << valeur de la racine infixe du sous-arbre droit fsi Parcours infixé: Gauche Racine Droit Françoise Greffier - IUP GMI - Besançon
34 gauche droit 23 5O 20 30 45 29 48 Parcours dans un ABR • 3 types de parcours : • infixés Gauche, Racine, Droite Droite, Racine, Gauche • préfixé Racine, Gauche, Droite Racine, Droite, Gauche • postfixés Gauche, Droite, Racine, Droite, Gauche, Racine Françoise Greffier - IUP GMI - Besançon
ABR et algorithmique • Les arbres binaires de recherche présentent deux avantages : • tri efficace car les valeurs sont maintenues ordonnées • recherche efficace par dichotomie template <class X>class ABR { ... bool rechercher (const X& E); // est retourné : vrai si E est dans ABR, faux sinon ... } Françoise Greffier - IUP GMI - Besançon
ABR : recherche dichotomique bool rechercher (const X& E); // est retourné : vrai si E est dans ABR, faux sinon si vide => retourner faux sinon si (E = valeur racine) => retourner vrai sinon si (E<valeur racine) => retourner rechercher dans sous-arbre gauche sinonretourner rechercher dans sous-arbre droit fsi fsi fsi Si N est le nombre de nœuds et si l ’ABR est équilibré alors la complexité de l ’algorithme de recherche dichotomique est de l ’ordre de Log 2 (N). Exemple : N=1024 => complexité ~ 10 Françoise Greffier - IUP GMI - Besançon
Conclusions ABR (algorithmique) • Les arbres binaires de recherche sont des structures de données • efficaces pour implanter des suites ordonnées dynamiques.Les opérations associées sont:RECHERCHER, MINIMUM,MAXIMUM,SUCCESSEUR, PREDECESSEUR , INSERER et SUPPRIMER . • Pour un ABR complet, les opérations de base sur les arbres binaires de recherche ont une complexité de l ’ordre de Log2(N), N étant le nombre de nœuds. • Cependant, quand l’arbre est dégénéré : s ’il se réduit par exemple • à une liste linéaire chaînée alors les opérations ont une complexité • de l ’ordre de (N). • Pour garantir de bonnes performances, il existe une variante des ABR : les arbres rouge et noir. Françoise Greffier - IUP GMI - Besançon
Arbre rouge et noir Un arbre rougeet noir est un arbre binaire de recherche comprenant une donnée supplémentaire par nœud définissant sa couleur : rouge ou noir. En contrôlant les manières dont sont colorés les nœuds on garantit que tout chemin menant de la racine à une feuille n ’est pas plus de deux fois plus long qu’un autre. Ainsi, un arbre rouge et noir est un arbre binaire de recherche approximativement équilibré. Françoise Greffier - IUP GMI - Besançon
26 17 41 14 21 30 47 11 16 19 26 28 38 Arbre rouge et noir : propriétés • Dans un arbre rougeet noir : • Chaque nœud est soit rouge, soit noir • Si un nœud est rouge alors ses deux nœuds fils sont noirs • Chaque chemin reliant un nœud à une feuille descendante a le même nombre de nœuds noirs. Françoise Greffier - IUP GMI - Besançon
Arbre rouge et noir : complexité En contrôlant les manières dont les nœuds sont colorés on garantit que tout chemin menant de la racine à une feuille n’est pas plus de deux fois plus long qu’un autre. Un arbre rougeet noir comportant N nœuds a une hauteur au plus égale à : 2 Log2(N+1). H <= 2 Log2(N+1). On montre que dans un arbre rougeet noir comportant N nœuds, les opérations rechercher, minimum, maximum ont une complexité de l’ordre de Log2(N). Françoise Greffier - IUP GMI - Besançon
Arbre rouge et noir : opérations Par rapport aux ABR, les opérations : RECHERCHER, MINIMUM, MAXIMUM,SUCCESSEUR et PREDECESSEUR sont inchangées dans un arbre rougeet noir Par rapport aux ABR, les opérations : INSERER et SUPPRIMER ne sont pas directement supportées dans un arbre rougeet noir Françoise Greffier - IUP GMI - Besançon
Arbre rouge et noir : insérer/sup • Dans un arbre rougeet noir : • Les opérations INSERER et SUPPRIMER modifient l ’arbre. Aussi, pour garantir les propriétés des arbres rougeet noir, il faut changer les couleurs de certains nœuds et changer aussi les chaînages par pointeurs. • On modifie ces chaînages par rotations. Françoise Greffier - IUP GMI - Besançon
11 2 14 1 7 15 5 8 7 x 5 8 4 4 Arbre rouge et noir : INSERER - cas 1(père de x et oncle de x sont rouges) 4 On insère un nœud 4 que l ’on colore au départ en rouge Couleur (x) <- rouge Tant que (x<>racine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] si (couleur (y) = rouge) alors //cas 1 couleur (p[x] )<- noir couleur (y) <- noir couleur (p[p[x]] )<- rouge 5 8 7 x<- p[p[x]] //on itère le traitement … // traitement symétrique à droite Fin tant que couleur (racine) <- noir Françoise Greffier - IUP GMI - Besançon
14 11 2 2 1 1 7 14 x 8 15 7 5 5 8 4 4 Arbre rouge et noir : INSERER - cas 2(x est fils droit et oncle droit noir) Couleur (x) <- rouge Tant que (x<>racine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] //oncle droit si (couleur (y) = rouge) alors // cas 1 (diapo précédente) sinon // cas 2 si (x=droit(p[x] )) alors x 14 x x <- p[x] // x =2 2 Rotation gauche (x) On fait une rotation pour amener la situation au cas 3 Françoise Greffier - IUP GMI - Besançon
11 2 2 1 1 7 14 x 8 15 7 5 5 8 4 4 Arbre rouge et noir : INSERER - cas 2(x est fils droit et oncle droit noir) Couleur (x) <- rouge Tant que (x<>racine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] //oncle droit si (couleur (y) = rouge) alors // cas 1 (avant dernière diapo) sinon // cas 2 si (x=droit(p[x] )) alors 7 x Cas 2 : frère du père de x est noir et x est un fils droit On fait une rotation pour amener la situation au cas 3 et nouveau x Françoise Greffier - IUP GMI - Besançon
11 7 7 14 8 15 2 2 1 1 7 5 11 5 8 14 4 4 15 Arbre rouge et noir : INSERER - cas 3(x est un fils gauche et oncle droit noir) 11 Couleur (x) <- rouge Tant que ... faire ... sinon si (x=droit(p[x] )) alors // cas 2 ... Sinon // cas 3 couleur (p[x] ) <- noir couleur (p[p[x]]) <- rouge Rotation droite (p[p[x]])) fsi x Cas 3 : frère du père de x est noir et x est un fils gauche On a bien un arbre rougenoir Françoise Greffier - IUP GMI - Besançon
ARBRE 2-3 • Quand un ABR est déséquilibré : s’il se réduit par exemple à une liste linéaire chaînée alors les opérations ont une complexité de l ’ordre de (N). • Pour garantir de bonnes performances une deuxième variante des ABR est les arbres 2-3 Françoise Greffier - IUP GMI - Besançon
ARBRE 2-3 : propriétés Dans un arbre 2-3 : • Chaque nœud interne a exactement 2 ou 3 fils • Tout chemin de la racine à une feuille a une longueur fixe Françoise Greffier - IUP GMI - Besançon
ARBRE 2-3 : propriétés Un arbre binaire de recherche (ABR) ordonne totalement les informations qu’il stocke(par clé) : A gauched ’un nœud : valeurs de clés inférieures ou égales à la clé du nœud. A droite : valeurs de clés supérieures strictement. • Représentation d ’une suite ordonnée dans un arbre 2-3 : • Les nœuds internes ont pour valeur les clés • les feuilles ont pour valeur les éléments de la suite ordonnée Françoise Greffier - IUP GMI - Besançon
7 16 5 - 8 12 19 - 2 5 7 8 12 16 19 ARBRE 2-3 : exemple Relation d ’ordre R : a R b <=> clé(a) R clé(b) • Représentation d ’une suite ordonnée dans un arbre 2-3 : • Un nœud interne a pour valeur : la clé de l ’élément minimal du deuxième fils la clé de l ’élément minimal du troisième fils • Feuille ont pour valeur les éléments de la suite Françoise Greffier - IUP GMI - Besançon
ARBRE 2-3 : complexité • Un arbre 2-3 de profondeur k a un nombre de feuilles compris entre 2 k-1 et 3 k-1 • La profondeur d ’un arbre 2-3 comprenant N éléments est comprise entre 1+Log 3 (N) et 1+Log 2 (N) • Par rapport aux ABR, • les opérations : RECHERCHER, MINIMUM, MAXIMUM,SUCCESSEUR et PREDECESSEUR sont triviales dans un arbre 2-3 • Par rapport aux ABR, • les opérations : INSERER et SUPPRIMER ne sont pas • directement supportées dans un arbre 2-3 Françoise Greffier - IUP GMI - Besançon
7 16 5 - 8 12 19 - 2 5 7 8 12 16 19 7 16 5 - 8 12 18 19 2 5 7 8 12 16 18 19 ARBRE 2-3 : insertion - cas 1 Cas 1 : insérer x=18 Cas où le nœud père de x n ’a que deux feuilles. Françoise Greffier - IUP GMI - Besançon
7 16 5 - 8 12 18 19 2 5 7 8 12 16 18 19 7 16 5 - 18 19 2 5 16 18 19 ARBRE 2-3 : insertion - cas 2 Cas 2 : insérer x=10La feuille x est un 4ème fils x=10 Lorsqu’on insère un 4ème fils dans un nœud N , alors on scinde N en deux. 8 - 12 - 7 8 10 12 Françoise Greffier - IUP GMI - Besançon
7 16 5 - 8 - 12 - 18 19 2 5 7 8 10 12 16 18 19 ARBRE 2-3 : insertion - cas 2 N N1 • Lorsqu’on insère un 4ème fils dans un nœud N alors • on scinde N en deux, • Les deux éléments les plus petits restent avec N • Les deux plus grands ont pour père un nouveau nœud N1 • N1 est inséré parmi les pères de N (on itère l ’insertion) Françoise Greffier - IUP GMI - Besançon
7 16 5 - 8 - 12 - 18 19 2 5 7 8 16 18 19 10 12 10 - 7 - 16 - 5 - 8 - 12 - 18 19 2 5 7 8 10 12 16 18 19 ARBRE 2-3 : insertion - cas 2 • (12 -) est un 4ème fils • de (7 16). • on scinde(7 16) • en deux nœuds • Nouvelle racine 10 Françoise Greffier - IUP GMI - Besançon