Objectifs Objectifs du cours Algorithmes et Structures de Données Chapitre 9 – Les arbres Présentation et définition des arbres Terminologie – Utilisation Les arbres binaires TAD, algorithmes de service Implémentation Capocchi Laurent [email protected] http://spe.univ-corse.fr/capocchiweb Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Structure récursive non-linéaire Les arbres ? Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Structure récursive non-linéaire Les arbres ? Arbre : ensemble de points : les nœuds, connectés par Collection hiérarchique d'objets un ensemble de lignes : les arcs Structure homogène dont chaque élément (noeud) Arbre : Très utilisé en informatique quand l’information contient de l'information et plusieurs liens (pointeurs) possède une structure hiérarchique ou imbriquée vers des éléments du même type arcs nœuds Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Structure récursive non-linéaire Structure récursive non-linéaire On peut définir récursivement un arbre Racine Nœud arc Il existe un nœud distingué appelé « racine » Nœud Nœud Les autres nœuds sont partitionnés en un nombre fini de sous-ensembles disjoints constituant eux-mêmes des arbres : sous-arbres Nœud Nœud Un arbre est un ensemble de nœuds organisés de façon hiérarchique à partir d'un nœud particulier appelé racine Nœud Si en se déplaçant à partir d’un nœud père, vers son père, etc. , et que l'on arrive à la racine de l’arbre: l'arbre est dit connexe sous-arbre Une liste est un cas particulier d’arbre : arbre dégénéré Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Structure récursive non-linéaire Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Implémentations Il s’agit de hiérarchies strictes : Représentation séquentielle : par tableaux Il n’y a pas de boucles Il n’y a pas de partage des descendants C a c b a a c b d a B A a g c b e e e Représentation chaînée : par pointeurs g 1 2 g 5 f g Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données 2 ... 6 9 1 3 4 7 8 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres Utilisation des arbres 1/ Représentation et manipulation d’expressions arithmétiques : Arbres Syntaxiques Une des structures les plus importantes et des plus spécifiques de l’informatique Organisation des fichiers dans les SE (a+b) / (c*(a+b) + (a*b)) Représentation des programmes traités par un ordinateur / Représentation d’une table des matières Évaluation Simplification Dérivation … Représentation d’un dictionnaire Représentation d’un arbre généalogique … + + a b * c * + a Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données a b b Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Utilisation des arbres Utilisation des arbres 2/ Représentation d'un dictionnaire: Arbres lexicographiques 3/ Modélisaion des situtions liées à la généalogie Ensemble de mots représentés avec un minimum de lettres {alors, faire, fin, sinon} o l a a f i s i r i s e r n n o n Temps de calcul est proportionnel à la longueur du mot et est indépendant de la taille du dictionnaire Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Utilisation des arbres 4/ Classements Utilisation des arbres 5/ Grammaire Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Terminologie Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Terminologie Arbre : Une structure d'arbre d'un type de base T est : soit la structure vide soit un nœud de type T associé à un nombre fini de structures d'arbre disjointes du type de base T appelées sous-arbres Taille d’un arbre : nombre de ses nœuds Un nœud est caractérisé par : Une étiquette : valeur associée au nœud 2 branche chemin 5 6 9 1 racine 3 4 7 8 10 nœud interne feuille Ses fils ou descendants immédiats Son degré : nombre de ses fils. Le degré d'un arbre est le plus grand degré de ses nœuds Nœuds particuliers Racine : n’est le fils d’aucun nœud Feuille : ne possède pas de fils Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données 1 2,3,4 3,4 1,3 9,10 père de 2,3,4 enfants de 1 frères de 2 ancêtres de 7 descendants de 7 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Terminologie Les arbres: Terminologie Donnez le degré et la taille de ces arbres A arbre et x nœud de A niveauA(x) = distance(nombre d’arcs) de x à la racine niveauA(x) = Degré = 2 Taille = 10 0 si x = racine(A) 1 + niveau (parent (x) ) 0 1 1 2 2 Degré = 3 Taille = 16 5 6 3 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Terminologie 3 4 7 8 9 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Sous-arbres A arbre et x nœud de A A arbre et x nœud de A hA(x) = distance de x à son plus lointain descendant qui est un nœud externe (feuille) hA(x) = 0 si x nœud externe ArbreA(x) = sous-arbre de A qui a racine x hA(x) = h(ArbreA(x) ) A = ArbreA( racine(A) ) 1 + max { hA(e) | e enfant de x } sinon h(A) = hA(racine(A)) 1 1 hA (8) = 0 hA (7) = 1 hA (3) = 2 h(A) = hA (1) = 3 sinon 2 5 6 9 3 4 7 8 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données 2 ArbreA (2) ArbreA (7) ArbreA (8) 5 6 9 3 4 7 8 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Longueur de cheminement Les arbres: N-aires Arbre N-aire : tout nœud possède N sous-arbres (vides ou non), N fixé La longueur de chemin (ou de cheminement) d'un arbre Somme des longueurs de chemin de ses nœuds Une liste est donc un arbre unaire La longueur de cheminement interne Somme des longueurs de cheminement de ses nœuds non terminaux Arbre N-aire complet : tout nœud interne possède N enfants La longueur de cheminement externe 1 Somme des longueurs de cheminement de ses feuilles 2 Arbre dégénéré ou filiforme Arbre dont chaque nœud a au plus un fils 5 6 9 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: N-aires 1 3 4 7 8 3 2 4 5 11 6 12 7 13 14 8 15 10 9 16 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Binarisation 1 Arbre binaire: tout nœud possède deux sous-arbres (vides ou non) Arbre binaire complet : tout nœud interne possède deux enfants 2 5 6 9 1 1 2 2 3 4 1 3 4 7 8 10 5 6 9 Implémentation des arbres planaires : on défini un ordre sur l’ensemble des fils 3 2 3 4 7 8 10 Lien premier enfant Lien frère droit 5 4 5 7 8 9 13 1 11 6 6 12 10 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données 2 5 Un seul type de pointeur 3 ... Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres: Binarisation Tout arbre général est représentable sous la forme d’un arbre binaire La binarisation transforme le 1er fils d’un arbre général en fils gauche et tout n ième fils (n>1) en fils droit du n-1 ième fils Les arbres binaires Définition récursive Un arbre vide Un nœud racine uniquement Un nœud racine qui possède une valeur et qui est lié à 0, 1 ou 2 sous-arbres éventuellement vides Arbre binaire complet = arbre binaire dont tout nœud a 0 ou 2 fils racine Sous arbre g Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres binaires Nombre total de nœud pour un arbre complet de hauteur h Sous arbre d Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres binaires Cas particuliers Chaque nœud a au maximum 2 fils 1 élément au niveau 0 2 éléments au niveau 1 … 2h éléments au niveau h (hauteur de l’arbre) Un arbre binaire de hauteur h a donc : 1+2+22+..+2h = 2h+1-1 éléments Un arbre binaire de hauteur h est dit complet si chaque niveau 0, 1, ... h est rempli : il a donc exactement 2h+1 –1 éléments Un arbre binaire de hauteur h est dit parfait si tous les niveaux 0, ..., h-1 sont remplis mais dans le niveau h, tous les éléments sont regroupés à gauche Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres binaires Arbre localement complet Arbre A dont les nœuds non terminaux ont degré(A) fils Tous les nœuds qui ne sont pas feuilles ont deux fils Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres binaires Type arbre volet sémantique axiomes: lien entre les fonctions, défini le comportement de chaque fonction de base (primitives) Variable o : nœud ; a1,a2 : arbre; racine (créerArbre(o,a1,a2)) : o filsGauche (créerArbre(o,a1,a2 )) : a1 filsDroit (créerArbre(o,a1,a2)) : a2 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les arbres binaires Type arbre volet spécification Utilise booléen,nœud Opérations de création arbreVide : → Arbre créerArbre : Nœud x Arbre x Arbre → Arbre filsGauche : Arbre → Arbre //retourne le sous arbre gauche filsDroit : Arbre → Arbre //retourne le sous arbre droit Opération d’extraction racine : Arbre → Nœud //retourne le nœud racine de l’arbre contenu : Nœud → Élément //retourne le contenu du nœud Opération de Test estVide : Arbre → Booléen Pré-conditions racine(a) est défini ssi estVide(a) = FAUX filsGauche(a) est défini ssi estVide(a) = FAUX filsDroit (a) est défini ssi estVide(a) =FAUX Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Implémentation Trois types type des informations stockées aux nœuds : Élément type des nœuds : Nœud type des arbres binaires : t_Arbre Implémentation Les fils d’un nœud sont des arbres Définition récursive des arbres et des méthodes sur les arbres On pourrait identifier un arbre avec l’adresse de sa racine (Type TarbreBinaire = Noeud) Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Implémentation Représentation d’un arbre Type t_Arbre = Nœud unArbre Le nœud racine On peut définir une représentation des arbres en utilisant les pointeurs. Dans ce cas un arbre binaire peut être vide (pointeur égal à NIL) une phrase type Nœud Type Nœud = Structure cinq valeur : Élément NIL NIL filsGauche : t_Arbre de NIL NIL mots NIL NIL Une feuille filsDroit : t_Arbre finStructure Nœud Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Arbre binaire Opérations de création (i) Fonction arbreVide (): Arbre Retourner NIL finFonction arbreVide Opérations de création (ii) Fonction créerArbre ( n : Nœud, fg : t_Arbre, fd : t_Arbre) : t_Arbre variable nouveauArbre : t_Arbre nouvauArbre <- @n nouvauArbre filsGauche <- fg nouvauArbre filsDroit <- fd retourner nouveauArbre finFonction créerArbre Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Exercices Écrire le reste des opérations du TAD arbre : Opérations de création arbreVide : → t_Arbre créerArbre : Nœud x t_Arbre x t_Arbre → t_Arbre filsGauche : t_Arbre → t_Arbre //retourne le sous arbre gauche filsDroit : t_Arbre → t_Arbre //retourne le sous arbre droit Opération d’extraction racine : t_Arbre → Nœud //retourne le nœud racine de l’arbre contenu : Nœud → Élément //retourne le contenu du nœud Opération de Test estVide : t_Arbre → Booléen Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Caractéristique des arbres Une des caractéristiques des listes est de permettre un traitement une fois et une seule des éléments L'ordre des traitements est l'ordre dans lequel sont rangés les éléments Parcours facile : structure linéaire ! Parcours d’arbre Parcourir un arbre c’est examiner tous ses nœuds selon une certaine règle pour effectuer un certain traitement Rechercher la présence d’une information particulière Afficher le champ de chaque nœud … Dans le cas des arbres on n'a plus cet ordre naturel : Il existe plusieurs choix : structure non linéaire ! On parle de parcours d’arbre Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours d’arbre Représentation naturelle d’un arbre binaire Récursivement et par chaînage On peut parcourir un arbre en profondeur d’abord: parcours branche après branche en largeur d’abord: parcours niveau après niveau Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours d’arbre Il existe trois règles de parcours Parcours infixe Parcours préfixe Parcours postfixe Ces différents parcours sont un bon outil pour convertir les expressions arithmétiques infixes en préfixe ou postfixe Exemple : a = (b+(c*d)) Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours Infixe Parcours Infixe La règle de parcours est la suivante = Parcourir le sous-arbre gauche + a Traiter la racine * b Parcourir le sous-arbre droit c d Procedure parcoursInfixe (entrée a:Arbre) si ( estVide(a)=FAUX ) alors parcoursInfixe (filsGauche(a)) exploiter(racine(a)) parcoursInfixe (filsDroit(a)) FinProcedure parcoursInfixe a = (b + (c * d)) Notation infixée et ambiguë : gestion des parenthèse 2ème passage Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours Préfixe Parcours Préfixe Procedure parcoursPrefixe (a:Arbre) si ( estVide(a)=FAUX ) alors exploiter(racine(a)) parcoursPrefixe (filsGauche(a)) parcoursPrefixe (filsDroit(a)) finSi Fin Procedure La règle de parcours est la suivante Traiter la racine Parcourir le sous-arbre gauche Parcourir le sous-arbre droit = + a =a+b*cd 1er passage Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données * b c d Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Notation préfixée : notation polonaise Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours Postfixe Parcours Postfixe Procedure parcoursPostfixe (a: Arbre) si ( estVide(a)=FAUX ) alors parcoursPostfixe (filsGauche(a)) parcoursPostfixe (filsDroit(a)) exploiter(racine(a)) FinProcedure parcoursPostfixe La règle de parcours est la suivante Parcourir le sous-arbre gauche Parcourir le sous-arbre droit Traiter la racine = + a abcd*+= * b Notation postfixée : notation polonaise inversée d c 3ème passage Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Parcours en largeur Arbre Binaire de Recherche : ABR On part de la racine et on énumère l'ensemble de ses descendants directs Puis on réitère le processus sur les descendants euxmêmes On effectue ainsi un parcours « de gauche à droite et de haut en bas » 1 2 Arbre non vide A = (r, A1, A2, …, Ak) nœuds de niveau 0, 1, 2, ... 5 6 9 3 4 7 8 10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Un ABR est une structure de donnée offrant une recherche en O(log n) permettant de faire des ajouts et des suppressions en O(log n) Un ABR est un arbre binaire tel que pour tout nœud les éléments de tous les nœuds du sous-arbre gauche sont inférieurs à l'élément du nœud, les éléments de tous les nœuds du sous-arbre droit sont supérieurs à l'élément du nœud Supposition : un ABR ne peut pas contenir deux éléments ayant la même valeur Remarque: Pour une suite d'éléments, il existe plusieurs arbres binaires de recherche Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Arbre Binaire de Recherche : ABR Recherche d'un élément Arbre Binaire de Recherche : ABR AjouterRacine : Élément x Arbre → Arbre Recherche : Élément x Arbre -> Booléen Ajout d'un élément : 2 étapes Recherche de la place de l'élément à insérer Insertion de l'élément Ajout aux feuilles AjouterFeuille : Élément x Arbre -> Arbre Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Arbre Binaire de Recherche : ABR Suppression d'un élément Chercher l'élément Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Arbre Binaire de Recherche : ABR Suppression d'un élément Réorganiser l'arbre Supprimer l'élément pour un nœud sans fils, suppression immédiate. Réorganiser l'arbre pour un nœud avec un seul fils, il suffit de le remplacer par ce fils Spécification de la suppression Max rend l'élément maximal d'un arbre Dmax rend l'arbre privé de cet élément Supprimer : Élément x Arbre -> Arbre Max : Arbre -> Élément Dmax : Arbre -> Arbre Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Arbre Binaire de Recherche : ABR Réorganiser l'arbre pour un nœud qui a deux fils remplacer le nœud contenant l'élément à supprimer par celui qui lui est immédiatement soit inférieur, soit supérieur Conclusion Arbre binaire de recherche = bon compromis entre tableaux et listes chaînées Tableaux Accès direct à partir de l’indice Insertion et suppression sont des opérations coûteuses Listes chaînées Accès direct impossible Insertion et suppression facile Arbre binaire de recherche Accès "relativement" rapide Ajout et suppression "relativement" rapides. Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Bibliographie et Webographie C. PAOLI, Cours d'algorithmes et structures de données, Université de Corse, 2005 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données