Algorithmique P2 - Montefiore Institute ULgdumont/pdf/ac6.pdf · ÉtapeÉtapes sss 1 a b d e h c f...

Post on 20-Oct-2019

4 views 0 download

Transcript of Algorithmique P2 - Montefiore Institute ULgdumont/pdf/ac6.pdf · ÉtapeÉtapes sss 1 a b d e h c f...

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.