algorithmique p2 - montefiore institute ulgdumont/pdf/ac6.pdf · ÉtapeÉtapes sss 1 a b d e h c f...
TRANSCRIPT
Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Les Arbres
Renaud Dumont, Ulg2009-2010
� Ouvrages◦ Algorithmes et structures de données génériques, Divay M.,
2004, Dunod◦ Data Structures and Algorithm Analysis in C++, MA Weiss,
1998, Pearson Ed.
� Cours
Biblio. supplémentaireBiblio. supplémentaireBiblio. supplémentaireBiblio. supplémentaire
� Cours◦ Cours d'algorithmique en langage C, Jean-Eric Pin, LIAFA,
1998◦ Algorithmique 4, Dominique Seret, Univ. Paris Descartes,
2008◦ Programmation avancée, T. Lecroq, Univ. Rouen◦ Arbres de recherche, Sylvie Hamel, Université de Montréal,
2009
� Un graphe est un couple G = (S, A) ◦ S est l'ensemble des sommetssommetssommetssommets◦ A est un sous-ensemble de S x S, l'ensemble des
arêtesarêtesarêtesarêtes.
GraphesGraphesGraphesGraphes
◦ A = {(1, 2), (1, 4), (2, 4), (3, 3), (4, 3)}
� Deux arêtes (s, t) et (s', t') sont consécutivesconsécutivesconsécutivesconsécutivessi t = s'◦ Arêtes consécutives (1, 2) et (2, 4)
� Un cheminchemincheminchemin dans un graphe est une suite d'arêtes consécutives.◦ (1,2)(2,4)(4,3) est un chemin◦ (1,4)(4,3)(3,3)(3,3) est un autre chemin◦ …
GraphesGraphesGraphesGraphes
◦ …
� Graphe non dirigé (non orienté) non dirigé (non orienté) non dirigé (non orienté) non dirigé (non orienté) : ◦ si (s, t) est une arête, (t, s) est une arête
� Arbre (libre)◦ Graphe non-dirigé (non-orienté) non-vide, connexe
et sans circuit (acyclique)
� Arbre enraciné
ArbresArbresArbresArbres
� Arbre enraciné◦ Graphe non-dirigé muni d'un sommet distingué (la
racineracineracineracine) et tel qu'il existe un chemin unique de la racine à un sommet quelconque.
� Expression arithmétique ◦ ((a+b) * (c-d) – e)
Arbres Arbres Arbres Arbres –––– Exemples d'utilisationExemples d'utilisationExemples d'utilisationExemples d'utilisation
� Chaine de caractères◦ mais, mars, mer, mon� Permet de mémoriser les caractères déjà rencontrés
� Structure grammaticale
Structure d'un livre, classifications biologiques, …
Arbres Arbres Arbres Arbres –––– Exemples d'utilisationExemples d'utilisationExemples d'utilisationExemples d'utilisation
� Structure d'un livre, classifications biologiques, …� Système de répertoires/fichiers d'un OS, interface
fenêtrée d'un logiciel
� Un arbre, c'est une structure de données non linéaire permettant de hiérarchiser les données◦ Relation inter-éléments = "est parent de"
� Nœud, racine, fils ◦ éventuellement qualifiés "à gauche" ou "à droite"
pour les arbres binaires (voir suite)
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
Nœud Nœud –
Racine
Nœud-
Fils (à gauche)
Nœud-
Fils (à droite)
� Ancêtre, descendant, père, fils◦ x descendant (propre) et fils (à droite) de y◦ y ancêtre (propre) et père de x� "propre" : si x est différent de y, tel qu'ici
� Tous les nœuds d'un arbre ont un et un seul
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
� Tous les nœuds d'un arbre ont un et un seul parent, sauf la racine.◦ Propriété du chemin unique
� Frère, sœur ◦ Nœuds de même parent
r
a y
xh
b
� Feuille = nœud sans fils� Racine = le seul nœud sans père� Degré d'un nœud = nombre de ses enfants
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
Racine,Nœud interneinterne
-r
Feuille-a
Nœud interne
-y
Feuille-x
Feuille -h
Nœud interne
-b
Feuille-b
� Profondeur d'un nœud = longueur du chemin entre la racine et ce nœud
� Hauteur d'un arbre = profondeur maximale de ses nœuds/hauteur de sa racine
� Hauteur d'un nœud = longueur maximale du chemin entre ce nœud et une feuille
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
r-
Prof. = 0Prof. = 0Haut. = 2
a-
Prof. = 1Haut. = 0
y-
Prof. = 1Haut. = 1
x-
Prof. = 2Haut. = 0
h-
Prof. = 2Haut. = 0
H(Arbre) = 2
� Niveau L dans un arbre = ensemble des nœuds de profondeur L
� Taille d'un arbre = nombre de ses nœuds
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
r-
Prof. = 0Prof. = 0Niv. = 0
a-
Prof. = 1Niv. = 1
y-
Prof. = 1Niv. = 1
x-
Prof. = 2Niv. = 2
h-
Prof. = 2Niv. = 2
T(A) = 5Niveau 0 contient 1 nœud
Niveau 1 contient 2 nœudsNiveau 2 contient 2 nœuds
� Définition récursive◦ Un nœud seul est un arbre dont la racine est ce
nœud.◦ Etant donnés un nœud r et k arbres T0,T1,…,Tk-1
ayant des racines notées respectivement r0,r1, …, rk-1, on construit un nouvel arbre de racine r en posant
Arbre enracinéArbre enracinéArbre enracinéArbre enraciné
on construit un nouvel arbre de racine r en posant que r est le parent de r0,r1, …, rk-1. T0,T1,…,Tk-1 sont alors appelés les soussoussoussous----arbresarbresarbresarbres de r dont les racines r0,r1, …, rk-1 sont les enfants de r.
� Arbre vide = Arbre ne contenant aucun nœud◦ N'est pas considéré comme un arbre
� Quels sont les sous-arbres de l'arbre suivant ?
Arbres Arbres Arbres Arbres ---- VocabulaireVocabulaireVocabulaireVocabulaire
AB C
B C
GED F
D GE F
GED F
Le chemin C-E est-il sous-arbre de A ?
� Un arbre ordonné est un arbre enraciné dans lequel tous les fils de chaque nœud sont ordonnés
Arbres ordonnésArbres ordonnésArbres ordonnésArbres ordonnés
� Un arbre binaire est un ensemble fini de nœuds◦ Vide (noté ε, qui n'est pas un arbre), ou◦ Constitué d'une racine et de deux arbres disjoints� Sous-arbre à gauche et sous-arbre à droite� Dont l'un des deux est éventuellement vide
Arbres binairesArbres binairesArbres binairesArbres binaires
� Dont l'un des deux est éventuellement vide
� Le degré d'un nœud d'un arbre binaire ne peut prendre que les valeurs 0, 1 ou 2◦ Chaque nœud possède 0,1 ou 2 fils.
� On représente souvent un arbre binaire par le triplet A = (Ag, r, Ad)
Arbres binairesArbres binairesArbres binairesArbres binaires
� Pour l'arbre de gauche, il vient◦ (Ø, 1,((Ø,3, Ø),2, Ø))
� Et pour l'arbre de droite ?◦ Rép. : ((Ø,2,(Ø,3, Ø)),1, Ø)
Arbres binaires completsArbres binaires completsArbres binaires completsArbres binaires complets� Un arbre binaire est completcompletcompletcomplet si chaque niveau de
l'arbre est complètement rempli
� Pour un nœud numéroté i, 1� Pour un nœud numéroté i, ◦ Le fils à gauche est numéroté 2*i◦ Le fils à droite 2*i+1
� Propriétés :◦ Si H(A) = h, l'arbre possède n=2h+1-1 nœuds◦ Le nombre de feuilles est égal au nombre de nœuds
internes + 1
1
2
54
3
76
� Un arbre binaire est localement complet localement complet localement complet localement complet si tout nœud a 0 ou 2 fils
Arbres binairesArbres binairesArbres binairesArbres binaires
� Un arbre binaire est partiellement complet partiellement complet partiellement complet partiellement complet si toutes les feuilles sont placées sur la gauche de l'arbre
� Un arbre est dégénérédégénérédégénérédégénéré (filiforme) si tous ses nœuds ont exactement 0 ou 1 fils (à droite ou au gauche)◦ Un tel arbre de profondeur h possède h+1 noeuds
Arbres binairesArbres binairesArbres binairesArbres binaires
◦ Un tel arbre de profondeur h possède h+1 noeuds
� Arbres binaires de 1, 2, 3 et 4 nœuds
Arbres binairesArbres binairesArbres binairesArbres binaires
� Lesquels sont ◦ complets? ◦ localement complets ?
� Un arbre généalogique est-il un arbre binairebinairebinairebinaire ?
� Si ascendant, oui
Les arbres binairesLes arbres binairesLes arbres binairesLes arbres binaires
� Si descendant, non © JB Laurent
� Équilibré : Pour chaque nœud, les hauteurs des sous-arbres gauche et droit diffèrent d'au plus une unité
� Parfaitement équilibré : Pour chaque nœud,
Arbres binaires équilibrésArbres binaires équilibrésArbres binaires équilibrésArbres binaires équilibrés
� Parfaitement équilibré : Pour chaque nœud, les nombres de nœuds de chaque sous-arbre gauche et droit diffèrent d'au plus une unité
Parfaitement Eq.Equilibré
� Un parcours est une énumération des nœuds de l'arbre◦ De par cette énumération, chaque parcours définit un
ordre sur les nœuds
� On distingue ◦ les parcours de gauche à droite
Notions de parcours (∀arbres)Notions de parcours (∀arbres)Notions de parcours (∀arbres)Notions de parcours (∀arbres)
◦ les parcours de gauche à droite� Le fils à gauche précède le fils à droite dans l'énumération
◦ les parcours de droite à gauche� Le fils à droite précède le fils à gauche dans l'énumération
� Ensuite, on différencie◦ Les parcours en largeur◦ Les parcours en profondeur
� Dans un parcours en largeur, on énumère les nœuds par ordre croissant de profondeur des nœuds� Autrement dit, de haut en bas, niveau par niveau (et de
gauche à droite)
Parcours en largeurParcours en largeurParcours en largeurParcours en largeur
� Parcours préfixe, préfixe, préfixe, préfixe, préordrepréordrepréordrepréordre (NGD) :◦ tout Nœud est suivi des nœuds de son sous-arbre
Gauche puis des nœuds de son sous-arbre Droit
� Parcours infixe, symétriqueinfixe, symétriqueinfixe, symétriqueinfixe, symétrique (GND) : ◦ tout Nœud est précédé des nœuds de son sous-arbre
Gauche et suivi des nœuds de son sous-arbre Droit
Parcours en profondeurParcours en profondeurParcours en profondeurParcours en profondeur
Gauche et suivi des nœuds de son sous-arbre Droit
� Parcours suffixesuffixesuffixesuffixe, postfixepostfixepostfixepostfixe, , , , postordrepostordrepostordrepostordre (GDN) : ◦ tout Nœud est précédé des nœuds de son sous-arbre
Gauche et des nœuds de son sous-arbre Droit
� On parle aussi d'ordre préfixe, infixe et suffixe� On trouve aussi les parcours 'droite-gauche'
� Soit l'arbre binaire suivant
� Parcours préfixe ◦ Nœud, Gauche, Droite◦ a, b, d, e, h, c, f, i, g, k
Parcours en profondeurParcours en profondeurParcours en profondeurParcours en profondeur
◦ a, b, d, e, h, c, f, i, g, k
� Parcours infixe◦ Gauche, Nœud, Droite◦ d, b, h, e, a, f, i, c, k, g
� Parcours suffixe◦ Gauche, Droite, Nœud◦ d, h, e, b, i, f, k, g, c, a
� Chaque arête d'un arbre binaire A est étiqueté◦ Par 0 si f est un fils à gauche◦ Par 1 si f est un fils à droite
� L'étiquette du chemin reliant la racine à un nœud donné est le mot formé par les étiquettes des arêtes le composant.
Codage des arbres binairesCodage des arbres binairesCodage des arbres binairesCodage des arbres binaires
arêtes le composant.� Le code d'un arbre est l'ensemble des étiquettes
des chemins issus de la racine
� Le code de l'arbre ci-contre est◦ {ε, 0, 1, 00, 01, 10, 11, 010, 101, 110}◦ Fournit un ordre de parcours des noeuds
� Séquence : a,b,d,e,h,c,f,i,g,k� Codes : ε, 0, 00, 01, 010,
1, 10, 101, 11, 110
Codage de parcours préfixeCodage de parcours préfixeCodage de parcours préfixeCodage de parcours préfixe
� Ordre lexicographique◦ Soit un ordre sur un alphabet : 0<1, a<b<c<d…◦ L'ordre lexicographique est défini par u <lex v ssi� u est un préfixe de v, ou� U=pau' et v=pbv' ou p est un mot, et a et b sont des
lettres telles que a<b
� Séquence : d,h,e,b,i,f,k,g,c,a� Codes : 00,010,01,0,101,10,
110,11,1, ε
Ordre opposé de l'ordre lexicographique
Codage de parcours suffixeCodage de parcours suffixeCodage de parcours suffixeCodage de parcours suffixe
� Ordre opposé de l'ordre lexicographique obtenu en considérant 1<0
ÉtapeÉtapeÉtapeÉtape ssss
1 a b d e h c f i g k Ordre lexicographique
2 ε 0 00 01 010 1 10 101 11 110 Code
3 ε 1 11 10 101 0 01 010 00 001 Complément du code
4 ε 0 00 001 01 010 1 10 101 11 Complément, ordre lex.
5 a c g k f i b e h d Correspondance lignes 4-3-1
6 d h e b i f k g c a Ordre opposé
� Séquence :d,b,h,e,a,f,i,c,k,g� Codes : 00,0,010,01,ε,
10,101,1,110,11
� Ordre des nombres croissantsOn associe à chaque nœud
Codage de parcours infixeCodage de parcours infixeCodage de parcours infixeCodage de parcours infixe
� On associe à chaque nœud son code concaténé à 1
� Le code obtenu est considéré comme la partie fractionnaire d'un nombre entre 0 et 1 en binaire
NœudNœudNœudNœud Code Code Code Code C.FracC.FracC.FracC.Frac.... P.FracP.FracP.FracP.Frac.... Ordre Ordre Ordre Ordre
a ε .1 8/16 5
b 0 .01 4/16 2
c 1 .11 12/16 8
d 00 .001 2/16 1
e 01 .011 6/16 4
f 10 .101 10/16 6
g 11 .111 14/16 10
h 010 .0101 5/16 3
i 101 .1011 11/16 7
k 110 .1101 13/16 9
� Séquence : a,b,c,d,e,f,g,h,i,k� Codes : ε, 0, 1, 00, 01, 10,
11, 010, 101, 110
Codage de parcours en largeurCodage de parcours en largeurCodage de parcours en largeurCodage de parcours en largeur
� Ordre croissant des mots croisés (shortlex)� Défini par u<mc v ssi
� |u|<|v|, ou� |u|=|v| et u <lex v
� Exemple : (a+b)-(c*d)� Arbre d'expression :
Codage de parcoursCodage de parcoursCodage de parcoursCodage de parcours
� Préfixe : -+ab*cd� Infixe : a+b-c*d� Postfixe : ab+cd*-
� Soit un parcours préfixe◦ a, b, d, e, h, c, f, i, g, k
� Comment différencier les deux structures suivantes ?
Représentation Représentation Représentation Représentation paranthèséeparanthèséeparanthèséeparanthèsée
� Comment spécifier la structure de l'arbre ?1. Ecrire la paranthèse ouvrante puis l'étiquette du
noeud2. Descendre sur le premier fils et réappliquer 1.3. Quand on ne sait plus descendre, on ferme la
paranthèse, on remonte d'un niveau et on traite le fils
Représentation Représentation Représentation Représentation paranthèséeparanthèséeparanthèséeparanthèsée
paranthèse, on remonte d'un niveau et on traite le fils suivant en réappliquant 1.
4. Une fois tous les fils traités, on ferme la paranthèse du noeud parent
◦ Ici, (a(b(d)(e(h)))(c(f(i))(g(k))))◦ RemarqueRemarqueRemarqueRemarque : perte des distinctions
fg ou fd dans un arbre binaire
� Exercices
Représentation Représentation Représentation Représentation paranthèséeparanthèséeparanthèséeparanthèsée
a
b
fc
h
ig
� Réponses(a(b(d(e(h))))(c(f(i))(g(k))))
Et (a(b(c(d)(e))(f)(g))(h(i(j)(k)(l)(m))))
jed k l m
� Soit l'arbre généalogique simplifié suivant
Représentation par une liste de fils
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
� Représentation par une liste de fils◦ Difficulté pour ajouter des éléments (taille du
tableau)
� Allocation contiguë (mémoire ou fichier)◦ Espace mémoire réservé à la compilation � perte
de place si grand nombre de fils pour un nœud◦ Les pointeurs sont ici les indices des lignes du
tableau
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
� Représentation par allocation dynamique◦ Calcul nécessaire du nombre de pointeurs de
chaque nœud� Pour un arbre généalogique, nombre difficile à préciser � perte parfois importante d'espace mémoire
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
� perte parfois importante d'espace mémoire
◦ Optimal pour un arbre dont les nœuds ont un degré constant (ex : binaire complet)
� Solution : une liste de listes de nœuds
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
À partir de MA Weiss, voir Sources supp.
� Expression Tree◦ Pile de pointeurs vers des arbres◦ Exemple : ab+cde+**
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
MA Weiss, voir Sources supp.
o Exemple : ab+cde+**
Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en Représentation d'un arbre en mémoiremémoiremémoiremémoire
MA Weiss, voir Sources supp.