450 likes | 777 Views
Structures hiérarchiques: Arbre. Chapitre 04. Introduction. La structure d'arbre est l'une des plus importantes et des plus spécifiques de l'informatique. Par exemple : représentation d'une table de matières, d'un questionnaire, d'un arbre généalogique,… .
E N D
Structures hiérarchiques: Arbre Chapitre 04
Introduction • La structure d'arbre est l'une des plus importantes et des plus spécifiques de l'informatique. Par exemple : • représentation • d'une table de matières, • d'un questionnaire, • d'un arbre généalogique,… . • Organisation des répertoires pour un système d’exploitation • Tri et recherche • Analyse des expressions arithmétiques • Arbre lexicographique • Arbre de raisonnement en Intelligence Artificielle • Arbre de programme utilisé en compilation • Arbre d’analyse syntaxique en compilation
Définition • On appelle arbre de type T, une structure formée d’une donnée particulière de type T appelée racine de l’arbre et d’un ensemble fini de taille variable, éventuellement vide, d’arbres de type T appelés sous-arbres de l’arbre. T étant le type de base des éléments de l’arbre.
Définition • Définition informelleun arbre est un ensemble de nœuds organisé de façon hiérarchique tel que : • il existe un nœud unique appelé racine de l'arbre qui n'a pas de supérieur • tous les autres nœuds sont atteints à partir de la racine par une unique voie hiérarchique (une branche, un chemin) • Définition récursive (et constructive)un arbre est la donnée d'une racine et d'une liste (éventuellement vide) d'arbres disjoints appelés sous-arbres A = < r > ou < r, (A1, …An) > , Ai arbres disjoints • un nœud de l'arbre est la racine d'un sous-arbre
Définition • Racine : C'est le nœud qui n'a pas de prédécesseur. La racine constitue la caractéristique d'un arbre. Dans l'exemple c'est a • Fils d'un noeud : ce sont ses successeurs. Dans l'exemple, c, d et e sont les fils du nœud b. • Feuille : c'est le nœud qui n'a pas de successeur. Une feuille est aussi appelée un nœud externe. Dans l'exemple, les feuilles sont : c, i, j, e, g et h. • Nœud interne:c'est tout nœud qui admet au moins un successeur. Dans l'exemple, les nœuds internes sont : a, b, f et d.
Définition • Frères:ce sont les successeurs issus d'un même nœud. Dans l'exemple, c, d et e sont des frères. • Père:c'est un nœud qui admet au moins un successeur. Dans l'exemple, b est le père des nœuds c, d et e. • Sous arbre:C'est une portion de l'arbre. Dans l'exemple, le noeud f avec ces deux fils g et h constituent un sous arbre. • Descendants d'un nœud:ce sont tous les nœuds du sous arbre de racine nœud. Dans l'exemple, les descendants de h sont c, d, e, i et j.
Définition • Ascendants d'un nœud: ce sont tous les noeuds se trouvant sur la branche de la racine vers ce noeud. Dans l'exemple, les ascendants de d sont b et a. Les ascendants de g sont f et a. • Branche : Les ascendants d'une feuille constituent une branche de l'arbre. Dans l'exemple, les branches de l'arbre sont a-b-c, a-b-d-i, a-b-d-j, a-b-e, a-f-g et a-f-h. • Degré d'un noeud : C'est le nombre de ses fils. Dans l'exemple, le degré de b est 3.
Définition • Niveau d'un noeud :On dit que la racine a le niveau 0, ses fils ont le niveau 1, les fils des fils ont le niveau 2. etc... Dans l'exemple, a est de niveau 0, d est de niveau 2 et j est de niveau 3. • Profondeur de l'arbre : C'est le niveau maximal des feuilles de l'arbre. L'arbre de l'exemple est de profondeur 3. • Forêt : C'est un ensemble d'arbres.
Définition • Taille d’un arbre: c’est le nombre de nœud de l’arbre. La taille de l’arbre en exemple est de 10. • Mot des feuilles: c’est la chaîne formée des valeurs des feuilles (nœuds terminaux) de l’arbre de gauche à droite. Dans l’exemple: « cijegh» est le mot feuille
Définition • Arbre n-aire: lorsqu’un arbre admet pour chaque nœud n descendants au plus, il est dit n-aire (ou général). Les arbres généraux sont , dans la plus part du temps représentés en machine par les arbres binaires. • Arbre binaire: c’est un arbre d’ordre 2; chaque nœud admet au plus zéro, un ou deux fils appelés respectivement fils gauche et fils droit.
Arbres Binaires • Dans ce qui suit, on s'intéresse dans un premier temps aux arbres binaires. Les arbres n-aires d'ordre n seront traités plus loin.
racine SAG SAD Arbres Binaires • définition informelle • dans un arbre binaire tout nœud a au plus deux fils • un arbre binaire non vide possède exactement deux sous-arbres (éventuellement vides) gauche et droit. • définition récursive (et constructive) • Un arbre binaire est • soit vide • soit composé d'une racine r et de deux arbres binaires SAG et SAD disjointsSAG : Sous-arbre binaire gaucheSAD : Sous-arbre binaire droit
Arbres Binaires(Description fonctionnelle) 1. Primitives d’accès à un arbre binaire 2. Primitives de Mise à jour 3. Parcours d’un arbre binaire
Arbres Binaires(Description fonctionnelle) 1. Primitives d’accès à un arbre binaire Dans un arbre binaire, un nœud est composé d’une valeur et de deux adresses repérant les sous-arbre gauche et le sous-arbre droit. Le nœud vide est représenté par « NIL». V : Ensemble des valeurs. P : Ensemble des positions (ou @ ) des nœuds de l’arbre)
Arbres Binaires(Description fonctionnelle) L’accès aux valeurs des nœuds s’effectue à l’aide de la primitive: Valeur : P-{Nil} V L’accès au sous-arbre gauche d’un nœud s’effectue à l’aide de la primitive: Gauche : P-{Nil} P L’accès au sous-arbre droit d’un nœud s’effectue à l’aide de la primitive: Droit : P-{Nil} P Ces primitives ne sont pas définies pour le nœud vide.
Arbres Binaires(Description fonctionnelle) 2. Primitives de Mise à jour: On définit en plus trois primitives qui permettent la modification dans un arbre binaire (suppression, insertion et modification d’une valeur d’un nœud ), ces primitives sont: AffValeur(position, valeur): affecte une valeur à un nœud d’@ position. AffDroit(nœud, position): permet d’affecter une référence (position) au fils droit d’un nœud. AffGauche(nœud, position): permet d’affecter une référence (position) au fils gauche d’un nœud.
Arbres Binaires(Description fonctionnelle) 3. Parcours d’un arbre binaire: parcours : examiner les nœuds d’un arbre pour effectuer un traitement. 2 types de parcours classiques sur les arbres binaires en profondeur (récursif par nature) et en largeur (itératif par nature) • parcours en profondeur • algorithme récursif général • parcours préfixe, infixe, postface • parcours en largeur (par niveaux, hiérarchique) :
A B D C E Arbres Binaires(Parcours Préfixe ) 1. Le Parcours Préfixé ou en préordre • Il consiste en : • l’énumération de la racine • l’énumération du sous-arbre gauche • l’énumération du sous-arbre droit. • RGD • Dans l’exemple: A B D C E
A B D C E Arbres Binaires(Parcours infixe ) 2. Le parcours infixé ou en inordre Il consiste en : • l’énumération du sous-arbre gauche • l’énumération de la racine • l’énumération du sous-arbre droit. • GRD • Dans l’exemple: B A C D E
A B D C E Arbres Binaires(Parcours postfixe ) 3. Le parcours postfixé ou en postordre Il consiste en : • l’énumération du sous-arbre gauche • l’énumération du sous-arbre droit. • l’énumération de la racine. • GDR • Dans l’exemple: B C E D A
Arbres Binaires(Description fonctionnelle) Procédure Préfixé( Entrée Racine:<type>); Début Si racine<>Nil AlorsEcrire (Valeur(racine)); Préfixé(Gauche(racine)); Préfixé(Droit(racine)); Fsi; Fin;
Arbres Binaires(Description fonctionnelle) Procédure Infixé( Entrée Racine:<type>); Début Si racine<>Nil AlorsInfixé(Gauche(racine)); Ecrire (Valeur(racine)); Infixé(Droit(racine)); Fsi; Fin;
Arbres Binaires(Description fonctionnelle) Procédure Postfixé( Entrée Racine:<type>); Début Si racine<>Nil Alors Postfixé(Gauche(racine)); Postfixé(Droit(racine)); Ecrire (Valeur(racine)); Fsi; Fin;
Arbres Binaires(Implémentation) • Par tableau (cases contiguës) • Par cases chaînées • Par faux pointeurs • Par pointeurs
Représentations contiguës (1) • un arbre est un tableau où sont mémorisés les nœuds • La racine est le nœud d’indice 1 • un nœud est une structure à 3 champs • l'étiquette ( Valeur) du nœud • les indices de ses fils gauche et droit (ou -1 si pas de fils) • inconvénients • définition non récursive (arbre sous-arbre) • utilisée uniquement si on traite un arbre unique
1 2 3 4 5 6 7 8 9 10 11 12 13 a b c e f g h i j Représentations contiguës (2) Un arbre est un tableau • L’étiquette de la racine est à l’indice 1 • Si l’étiquette d’un nœud est à l’indice i alors l’étiquette du fils gauche est à l’indice 2i et l’étiquette du fils droit est à l’indice 2i + 1
Représentation par curseurs (faux pointeurs) • utilisation d'une variable globale de type tableau pour simuler la mémoire où sont mémorisés les nœuds • un arbre est l'indice de sa racine dans le tableau (ou -1 s'il est vide) • un nœud (une case du tableau) est une structure à 3 champs • l'étiquette (valeur) du nœud • les indices de ses fils gauche et droit (ou -1 si pas de fils) • 2 stratégies de gestion des cellules disponibles • chaîner entre elles les cellules disponibles • marquer les cellules libres et parcourir le tableau pour trouver la 1re place libre • Inconvénient : connaître à l’avance le nombre de noeuds
a b c d e f g Exemples Mémoire Mémoire 5 A1 A2 2 A1 A2 O arbre 2 arbres
Représentation chaînée • un arbre binaire est • soit un pointeur sur le nœud racine (arbre non vide) • soit le pointeur NIL (arbre vide) • un nœud est une structure à trois champs • une étiquette (Valeur) • le sous-arbre gauche et le sous-arbre droit • avantages • définition récursive • simple à programmer • la plus utilisée
Représentation chaînée inconvénients : consomme de la mémoire dynamique et elle est plus coûteuse en temps d’accès qu’une représentation contiguë, mais elle permet plusieurs types de parcours sans modification algorithmique importante.
Exercices • Ecrire le corps de chacune des primitives pour la manipulation d’un arbre binaire pour les différentes implémentations données ci-dessus.
Quelques déf. • Niveau • Complet • Ordonnée • Dégénéré • Equilibré • N-aire • ……………..sur tableau…………………..
Arbre n-aire(Planaire général) • Le nombre de fils de chaque nœud n’est pas limité à deux. La notion du gauche et droit pour les fils et les sous-arbres n’existe plus. Dans ce type d’arbres, les fils et les sous-arbres des nœuds sont ordonnés et on parle du premier fils, 2ème fils,… . • Le parcours d’un arbre n-aire est une extension du parcours des arbres binaires: en profondeur et en largeur.
indice 1 2 3 4 5 6 7 8 Valeur a b c d e f g h père 0 1 1 1 1 2 5 5 Représentation d’un arbre n-aire • Il peut être représenter selon différentes représentations: • Représentation par tableau: • un arbre est un tableau qui contient la valeur d'un nœud et l‘indice de son père. • représentation économique en mémoire, utilisée si l'arbre n'est jamais modifié
Arbres par liste des fils • un arbre est la donnée • de la valeur de sa racine • de la liste de ses fils représentée • par tableau, • par pointeurs • par curseurs NIL
Arbres par listes des fils : tableau • un arbre est un pointeur sur une structure composée de 2 champs : • un tableau de nœuds • indice de la racine dans le tableau • un nœud est une structure à deux champs • l'étiquette de la racine • la liste de ses fils • la liste des fils est une liste simplement chaînée sans en-tête des indices dans le tableau des fils • la liste des fils est un pointeur sur une cellule à deux champs • un entier (l’ indice du nœud) dans le tableau • un pointeur sur la cellule suivante
Arbres par liste des fils (pointeurs) • un arbre est un pointeur sur une structure formée • de la valeur de la racine • et de la liste de ses fils • une listes d'arbres est un pointeur sur une cellule composée • d'un arbre • et d'un pointeur sur la cellule suivante.
Arbres par tableau de pointeurs • quand on connaît le nombre maximum de fils (n) • un arbre est un pointeur sur une structure à n + 1 champs • l' étiquette de la racine • le premier sous-arbre, le deuxième... le nième
Arbres généraux par arbre binaire • représentation par premier fils et frère droit • un arbre est représenté par une structure à trois champs • La valeur de la racine • le premier fils de la racine • le frère droit de la racine • tous les arbres n-aires peuvent être représentés par des arbres binaires
Arbres généraux par arbre binaire NIL NIL NIL NIL NIL
1 2 3 5 4 6 9 7 8 10 13 11 14 12 Équivalence arbre général/arbre binaire