Arbres Option informatique 2016-2017

publicité
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.
Téléchargement