Arbres Option informatique 2016-2017 Définitions • Définition (informelle) : Définitions • Définition (informelle) : • Un arbre est un graphe acyclique, connexe et orienté, i.e. Définitions • Définition (informelle) : • Un arbre est un graphe acyclique, connexe et orienté, i.e. • une collection de sommets et d’arêtes orientées, Définitions • Définition (informelle) : • Un arbre est un graphe acyclique, connexe et orienté, i.e. • une collection de sommets et d’arêtes orientées, • ne formant pas de cycle, Définitions • Définition (informelle) : • Un arbre est un graphe acyclique, connexe et orienté, i.e. • une collection de sommets et d’arêtes orientées, • ne formant pas de cycle, • possédant une unique racine Définitions • Définition (informelle) : • Un arbre est un graphe acyclique, connexe et orienté, i.e. • une collection de sommets et d’arêtes orientées, • ne formant pas de cycle, • possédant une unique racine • et dans lequel tous les sommets à l’exception de la racine ont un unique antécédent. Définitions • Un exemple au tableau d’arbre à 12 sommets. 1 2 5 6 9 10 3 4 7 8 11 12 Terminologie • Racine : 1. Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. • Un sommet est soit un noeud, soit une feuille Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. • Un sommet est soit un noeud, soit une feuille • Les feuilles sont les sommets sans fils = avec des fils vides Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. • Un sommet est soit un noeud, soit une feuille • Les feuilles sont les sommets sans fils = avec des fils vides • Ici : 5 7 9 10 11 12 Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. • Un sommet est soit un noeud, soit une feuille • Les feuilles sont les sommets sans fils = avec des fils vides • Ici : 5 7 9 10 11 12 • Les noeuds sont les sommets ayant au moins un fils non vide Terminologie • Racine : 1. • En informatique les arbres ont la racine en haut et les feuilles en bas... • Ce qui fait qu’il n’est plus nécessaire d’orienter les arêtes. • Quand un sommet a un antécédent, celui-ci est son père. • Dans l’autre sens c’est un fils. • Par exemple 2 est père de 6, 8 est fils de 4. • Un sommet est soit un noeud, soit une feuille • Les feuilles sont les sommets sans fils = avec des fils vides • Ici : 5 7 9 10 11 12 • Les noeuds sont les sommets ayant au moins un fils non vide • Ici : 1 2 3 4 6 8 Terminologie • Attention, terminologie mouvante suivant les auteurs... Terminologie • Attention, terminologie mouvante suivant les auteurs... • Pour certains nos sommets sont des noeuds, les noeuds sont des noeuds internes, et les feuilles des noeuds externes. Terminologie • Attention, terminologie mouvante suivant les auteurs... • Pour certains nos sommets sont des noeuds, les noeuds sont des noeuds internes, et les feuilles des noeuds externes. • Il faudra s’adapter, ce qui est assez facile. Terminologie • Attention, terminologie mouvante suivant les auteurs... • Pour certains nos sommets sont des noeuds, les noeuds sont des noeuds internes, et les feuilles des noeuds externes. • Il faudra s’adapter, ce qui est assez facile. • Profondeur d’un nœud ou d’une feuille : distance qui le/la sépare de la racine, Terminologie • Attention, terminologie mouvante suivant les auteurs... • Pour certains nos sommets sont des noeuds, les noeuds sont des noeuds internes, et les feuilles des noeuds externes. • Il faudra s’adapter, ce qui est assez facile. • Profondeur d’un nœud ou d’une feuille : distance qui le/la sépare de la racine, • Hauteur de l’arbre : profondeur maximale d’une feuille. Terminologie • L’arité d’un sommet est le nombre de branches qui en partent. Terminologie • L’arité d’un sommet est le nombre de branches qui en partent. • Dans l’exemple on a des sommets d’arité 0, 1, 2 et 3. Terminologie • L’arité d’un sommet est le nombre de branches qui en partent. • Dans l’exemple on a des sommets d’arité 0, 1, 2 et 3. • Nota Bene : chaque sommet est la racine d’un arbre constitué de lui-même et de l’ensemble de ses descendants. Terminologie • L’arité d’un sommet est le nombre de branches qui en partent. • Dans l’exemple on a des sommets d’arité 0, 1, 2 et 3. • Nota Bene : chaque sommet est la racine d’un arbre constitué de lui-même et de l’ensemble de ses descendants. • On parle de sous-arbre de l’arbre initial. Terminologie • L’arité d’un sommet est le nombre de branches qui en partent. • Dans l’exemple on a des sommets d’arité 0, 1, 2 et 3. • Nota Bene : chaque sommet est la racine d’un arbre constitué de lui-même et de l’ensemble de ses descendants. • On parle de sous-arbre de l’arbre initial. • Cela laisse entrevoir la possibilité d’une définition récursive d’un arbre. Arbre en tant que structure de données • Il n’y a pas une structure, mais des structures données associées aux arbres. Arbre en tant que structure de données • Il n’y a pas une structure, mais des structures données associées aux arbres. • Elles servent à organiser de l’information. Arbre en tant que structure de données • Il n’y a pas une structure, mais des structures données associées aux arbres. • Elles servent à organiser de l’information. • Cette information peut être stockée dans les nœuds, les feuilles ou les deux ! Arbre en tant que structure de données • Il n’y a pas une structure, mais des structures données associées aux arbres. • Elles servent à organiser de l’information. • Cette information peut être stockée dans les nœuds, les feuilles ou les deux ! • On appelle étiquette l’information attachée à un nœud ou à une feuille. Arbre en tant que structure de données • Il n’y a pas une structure, mais des structures données associées aux arbres. • Elles servent à organiser de l’information. • Cette information peut être stockée dans les nœuds, les feuilles ou les deux ! • On appelle étiquette l’information attachée à un nœud ou à une feuille. • Exemple au tableau. Arbres binaires • Conformément au programme on se limite aux arbre binaires Arbres binaires • Conformément au programme on se limite aux arbre binaires • c’est-à-dire tels que chaque nœud a une arité 1 ou 2. Arbres binaires • Conformément au programme on se limite aux arbre binaires • c’est-à-dire tels que chaque nœud a une arité 1 ou 2. • On rencontre aussi des arbres binaires stricts pour lesquels les nœuds ont tous exactement une arité 2. Arbres binaires. Quelques résultats • Un résultat (au programme) : si un arbre binaire comporte N nœuds, il compte au plus N + 1 feuilles (démo au tableau). Arbres binaires. Quelques résultats • Un résultat (au programme) : si un arbre binaire comporte N nœuds, il compte au plus N + 1 feuilles (démo au tableau). • Un arbre binaire strict à N nœuds compte exactement N + 1 feuilles. Arbres binaires. Quelques résultats • Un résultat (au programme) : si un arbre binaire comporte N nœuds, il compte au plus N + 1 feuilles (démo au tableau). • Un arbre binaire strict à N nœuds compte exactement N + 1 feuilles. • Un autre résultat : un arbre binaire (strict ou pas) de hauteur h compte au plus 2h feuilles (démo au tableau). Arbres binaires. Quelques résultats • Un résultat (au programme) : si un arbre binaire comporte N nœuds, il compte au plus N + 1 feuilles (démo au tableau). • Un arbre binaire strict à N nœuds compte exactement N + 1 feuilles. • Un autre résultat : un arbre binaire (strict ou pas) de hauteur h compte au plus 2h feuilles (démo au tableau). • Corollaire : un arbre binaire possédant N feuilles a pour hauteur minimale dlog2 Ne (partie entière supérieure) Arbres binaires. Quelques résultats • Un résultat (au programme) : si un arbre binaire comporte N nœuds, il compte au plus N + 1 feuilles (démo au tableau). • Un arbre binaire strict à N nœuds compte exactement N + 1 feuilles. • Un autre résultat : un arbre binaire (strict ou pas) de hauteur h compte au plus 2h feuilles (démo au tableau). • Corollaire : un arbre binaire possédant N feuilles a pour hauteur minimale dlog2 Ne (partie entière supérieure) • Remarque : un arbre binaire de hauteur h et qui compte 2h feuilles est un arbre binaire complet (il est alors nécessairement strict, et toutes les feuilles sont à la même profondeur h). Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : • soit vide Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : • soit vide • soit constitué d’un nœud portant une étiquette d’un certain type avec deux fils, Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : • soit vide • soit constitué d’un nœud portant une étiquette d’un certain type avec deux fils, • un gauche et un droit qui sont eux-mêmes des arbres (éventuellement vides) Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : • soit vide • soit constitué d’un nœud portant une étiquette d’un certain type avec deux fils, • un gauche et un droit qui sont eux-mêmes des arbres (éventuellement vides) • D’où le type récursif Caml (votre proposition ?) : Définitions abstraite d’un arbre • Un arbre binaire (avec étiquette sur les nœuds) est finalement : • soit vide • soit constitué d’un nœud portant une étiquette d’un certain type avec deux fils, • un gauche et un droit qui sont eux-mêmes des arbres (éventuellement vides) • D’où le type récursif Caml (votre proposition ?) : • 1 type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre ;; Définitions abstraite d’un arbre • Pour un arbre binaire strict on peut proposer 1 type ’a arbre = Feuille of ’a | Noeud of ’a * ’a arbre * ’a arbre ;; Définitions abstraite d’un arbre • Pour un arbre binaire strict on peut proposer 1 type ’a arbre = Feuille of ’a | Noeud of ’a * ’a arbre * ’a arbre ;; • Là on s’interdit d’avoir un arbre vide. Définitions abstraite d’un arbre • Pour un arbre binaire strict on peut proposer 1 type ’a arbre = Feuille of ’a | Noeud of ’a * ’a arbre * ’a arbre ;; • Là on s’interdit d’avoir un arbre vide. • Voyez-vous bien la différence induite par cette différence de définition ? Définitions abstraite d’un arbre • Pour un arbre binaire strict on peut proposer 1 type ’a arbre = Feuille of ’a | Noeud of ’a * ’a arbre * ’a arbre ;; • Là on s’interdit d’avoir un arbre vide. • Voyez-vous bien la différence induite par cette différence de définition ? • On peut imaginer des arbres avec des types différents pour les feuilles et les noeuds : 1 type ( ’a , ’b ) arbre = Feuille of ’a | Noeud of ’b * ( ’a , ’b ) arbre * ( ’a , ’ b ) arbre ;; Programmation sur les arbres • Définition récursive incite à utiliser le filtrage. Programmation sur les arbres • Définition récursive incite à utiliser le filtrage. • Prenons la définition d’un arbre binaire quelconque : 1 type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre ;; Programmation sur les arbres • Définition récursive incite à utiliser le filtrage. • Prenons la définition d’un arbre binaire quelconque : 1 type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre ;; • Fonction pour calculer le nombre de feuilles ? Programmation sur les arbres • Définition récursive incite à utiliser le filtrage. • Prenons la définition d’un arbre binaire quelconque : 1 type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre ;; • Fonction pour calculer le nombre de feuilles ? • Fonction pour calculer le nombre de nœuds ? Programmation sur les arbres • Définition récursive incite à utiliser le filtrage. • Prenons la définition d’un arbre binaire quelconque : 1 type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre ;; • Fonction pour calculer le nombre de feuilles ? • Fonction pour calculer le nombre de nœuds ? • D’autres fonctions de base en exercices (les gammes) Parcours • Parcourir l’arbre, c’est se donner un ordre de traitement des nœuds et des feuilles. Parcours • Parcourir l’arbre, c’est se donner un ordre de traitement des nœuds et des feuilles. • On distingue les parcours en profondeur et le parcours en largeur Parcours • Parcourir l’arbre, c’est se donner un ordre de traitement des nœuds et des feuilles. • On distingue les parcours en profondeur et le parcours en largeur • Dans le parcours en profondeur d’un arbre non vide, le sous-arbre gauche est exploré intégralement avant de traiter le sous-arbre droit. Parcours • Parcourir l’arbre, c’est se donner un ordre de traitement des nœuds et des feuilles. • On distingue les parcours en profondeur et le parcours en largeur • Dans le parcours en profondeur d’un arbre non vide, le sous-arbre gauche est exploré intégralement avant de traiter le sous-arbre droit. • Mais il reste à choisir quand est traitée la racine elle-même. Parcours • Cela amène trois parcours différents : préfixe, suffixe ou infixe 1 let rec parcours arbre = 2 match arbre with 3 | Vide -> () 4 | Noeud (a , arbre_gauche , arbre_droit ) 5 -> " traitement " a ; parcours arbre_gauche ; parcours arbre_droit (* parcours pr é fixe *) 6 ou -> parcours arbre_gauche ; parcours arbre_droit ; " traitement " a (* parcours suffixe *) 7 ou -> parcours arbre_gauche ; " traitement " a ; parcours arbre_droit (* parcours infixe *) Parcours • Exemple au tableau : traitement = print_int pour un arbre d’entiers. Parcours • Le parcours en largeur (ou parcours hiérarchique) consiste à traiter successivement tous les nœuds ou toutes les feuilles de même profondeur, par ordre croissant de profondeur. Parcours • Le parcours en largeur (ou parcours hiérarchique) consiste à traiter successivement tous les nœuds ou toutes les feuilles de même profondeur, par ordre croissant de profondeur. • Exemple au tableau. Parcours • Le parcours en largeur (ou parcours hiérarchique) consiste à traiter successivement tous les nœuds ou toutes les feuilles de même profondeur, par ordre croissant de profondeur. • Exemple au tableau. • Nécessite une file de données (ou équivalent). Parcours • Le parcours en largeur (ou parcours hiérarchique) consiste à traiter successivement tous les nœuds ou toutes les feuilles de même profondeur, par ordre croissant de profondeur. • Exemple au tableau. • Nécessite une file de données (ou équivalent). • Code ensemble au tableau.