Algorithmes et Structures de Données Chapitre 9 + Les arbres

publicité
Objectifs
Objectifs du cours
Algorithmes et
Structures de Données
Chapitre 9 – Les arbres
Présentation et définition des arbres
Terminologie – Utilisation
Les arbres binaires
TAD, algorithmes de service
Implémentation
Capocchi Laurent
[email protected]
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Structure récursive non-linéaire
Les arbres ?
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Structure récursive non-linéaire
Les arbres ?
Arbre : ensemble de points : les nœuds, connectés par
Collection hiérarchique d'objets
un ensemble de lignes : les arcs
Structure homogène dont chaque élément (noeud)
Arbre : Très utilisé en informatique quand l’information
contient de l'information et plusieurs liens (pointeurs)
possède une structure hiérarchique ou imbriquée
vers des éléments du même type
arcs
nœuds
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Structure récursive non-linéaire
Structure récursive non-linéaire
On peut définir récursivement un arbre
Racine
Nœud
arc
Il existe un nœud distingué appelé « racine »
Nœud
Nœud
Les autres nœuds sont partitionnés en un nombre fini de
sous-ensembles disjoints constituant eux-mêmes des
arbres : sous-arbres
Nœud
Nœud
Un arbre est un ensemble de nœuds organisés de façon
hiérarchique à partir d'un nœud particulier appelé racine
Nœud
Si en se déplaçant à partir d’un nœud père, vers son
père, etc. , et que l'on arrive à la racine de l’arbre:
l'arbre est dit connexe
sous-arbre
Une liste est un cas particulier d’arbre :
arbre dégénéré
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Structure récursive non-linéaire
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Implémentations
Il s’agit de hiérarchies strictes :
Représentation séquentielle : par tableaux
Il n’y a pas de boucles
Il n’y a pas de partage des descendants
C
a
c
b
a
a
c
b
d
a
B
A
a
g
c
b
e
e
e
Représentation chaînée : par pointeurs
g
1
2
g
5
f
g
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
2
...
6
9
1
3
4
7
8
10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres
Utilisation des arbres
1/ Représentation et manipulation d’expressions
arithmétiques : Arbres Syntaxiques
Une des structures les plus importantes et des plus
spécifiques de l’informatique
Organisation des fichiers dans les SE
(a+b) / (c*(a+b) + (a*b))
Représentation des programmes traités par un
ordinateur
/
Représentation d’une table des matières
Évaluation
Simplification
Dérivation
…
Représentation d’un dictionnaire
Représentation d’un arbre généalogique
…
+
+
a
b
*
c
*
+
a
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
a
b
b
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Utilisation des arbres
Utilisation des arbres
2/ Représentation d'un dictionnaire: Arbres
lexicographiques
3/ Modélisaion des situtions liées à la généalogie
Ensemble de mots représentés avec un minimum de
lettres
{alors, faire, fin, sinon}
o
l
a
a
f
i
s
i
r
i
s
e
r
n
n
o
n
Temps de calcul est proportionnel à la longueur du mot et
est indépendant de la taille du dictionnaire
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Utilisation des arbres
4/ Classements
Utilisation des arbres
5/ Grammaire
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Terminologie
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Terminologie
Arbre : Une structure d'arbre d'un type de base T est :
soit la structure vide
soit un nœud de type T associé à un nombre fini de structures
d'arbre disjointes du type de base T appelées sous-arbres
Taille d’un arbre : nombre de ses nœuds
Un nœud est caractérisé par :
Une étiquette : valeur associée au nœud
2
branche
chemin
5
6
9
1
racine
3
4
7
8
10
nœud interne
feuille
Ses fils ou descendants immédiats
Son degré : nombre de ses fils. Le degré d'un arbre est le
plus grand degré de ses nœuds
Nœuds particuliers
Racine : n’est le fils d’aucun nœud
Feuille : ne possède pas de fils
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
1
2,3,4
3,4
1,3
9,10
père de 2,3,4
enfants de 1
frères de 2
ancêtres de 7
descendants de 7
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Terminologie
Les arbres: Terminologie
Donnez le degré et la taille de ces arbres
A arbre et x nœud de A
niveauA(x) = distance(nombre d’arcs) de x à la racine
niveauA(x) =
Degré = 2
Taille = 10
0
si x = racine(A)
1 + niveau (parent (x) )
0
1
1
2
2
Degré = 3
Taille = 16
5
6
3
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Terminologie
3
4
7
8
9
10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Sous-arbres
A arbre et x nœud de A
A arbre et x nœud de A
hA(x) = distance de x à son plus lointain descendant qui
est un nœud externe (feuille)
hA(x) = 0 si x nœud externe
ArbreA(x) = sous-arbre de A qui a racine x
hA(x) = h(ArbreA(x) )
A = ArbreA( racine(A) )
1 + max { hA(e) | e enfant de x } sinon
h(A) = hA(racine(A))
1
1
hA (8) = 0
hA (7) = 1
hA (3) = 2
h(A) = hA (1) = 3
sinon
2
5
6
9
3
4
7
8
10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
2
ArbreA (2)
ArbreA (7)
ArbreA (8)
5
6
9
3
4
7
8
10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Longueur de cheminement
Les arbres: N-aires
Arbre N-aire : tout nœud possède N sous-arbres (vides ou
non), N fixé
La longueur de chemin (ou de cheminement) d'un arbre
Somme des longueurs de chemin de ses nœuds
Une liste est donc un arbre unaire
La longueur de cheminement interne
Somme des longueurs de cheminement de ses nœuds
non terminaux
Arbre N-aire complet : tout nœud interne possède N
enfants
La longueur de cheminement externe
1
Somme des longueurs de cheminement de ses feuilles
2
Arbre dégénéré ou filiforme
Arbre dont chaque nœud a au plus un fils
5
6
9
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: N-aires
1
3
4
7
8
3
2
4
5 11 6 12 7 13 14 8 15
10
9 16 10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Binarisation
1
Arbre binaire: tout nœud possède deux sous-arbres
(vides ou non)
Arbre binaire complet : tout nœud interne possède
deux enfants
2
5
6
9
1
1
2
2
3
4
1
3
4
7
8
10
5
6
9
Implémentation des arbres planaires : on défini
un ordre sur l’ensemble des fils
3
2
3
4
7
8
10
Lien premier enfant
Lien frère droit
5
4
5
7
8
9
13
1
11
6
6
12
10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
2
5
Un seul type de pointeur
3
...
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Binarisation
Tout arbre général est représentable sous la forme d’un
arbre binaire
La binarisation transforme le 1er fils d’un arbre général
en fils gauche et tout n ième fils (n>1) en fils droit du n-1
ième
fils
Les arbres binaires
Définition récursive
Un arbre vide
Un nœud racine uniquement
Un nœud racine qui possède une valeur et qui est lié à 0,
1 ou 2 sous-arbres éventuellement vides
Arbre binaire complet =
arbre binaire dont tout
nœud a 0 ou 2 fils
racine
Sous
arbre g
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires
Nombre total de nœud pour un arbre complet de hauteur h
Sous
arbre d
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires
Cas particuliers
Chaque nœud a au maximum 2 fils
1 élément au niveau 0
2 éléments au niveau 1
…
2h éléments au niveau h (hauteur de l’arbre)
Un arbre binaire de hauteur h a donc : 1+2+22+..+2h = 2h+1-1
éléments
Un arbre binaire de hauteur h est dit complet si chaque
niveau 0, 1, ... h est rempli : il a donc exactement 2h+1 –1
éléments
Un arbre binaire de hauteur h est dit parfait si tous les
niveaux 0, ..., h-1 sont remplis mais dans le niveau h, tous
les éléments sont regroupés à gauche
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires
Arbre localement complet
Arbre A dont les nœuds non terminaux ont degré(A) fils
Tous les nœuds qui ne sont pas feuilles ont deux fils
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires
Type arbre volet sémantique axiomes: lien entre les
fonctions, défini le comportement de chaque fonction de
base (primitives)
Variable o : nœud ; a1,a2 : arbre;
racine (créerArbre(o,a1,a2)) : o
filsGauche (créerArbre(o,a1,a2 )) : a1
filsDroit (créerArbre(o,a1,a2)) : a2
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires
Type arbre volet spécification
Utilise booléen,nœud
Opérations de création
arbreVide : → Arbre
créerArbre : Nœud x Arbre x Arbre → Arbre
filsGauche : Arbre → Arbre //retourne le sous arbre gauche
filsDroit : Arbre → Arbre //retourne le sous arbre droit
Opération d’extraction
racine : Arbre → Nœud //retourne le nœud racine de l’arbre
contenu : Nœud → Élément //retourne le contenu du nœud
Opération de Test
estVide : Arbre → Booléen
Pré-conditions
racine(a) est défini ssi estVide(a) = FAUX
filsGauche(a) est défini ssi estVide(a) = FAUX
filsDroit (a) est défini ssi estVide(a) =FAUX
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Implémentation
Trois types
type des informations stockées aux nœuds : Élément
type des nœuds : Nœud
type des arbres binaires : t_Arbre
Implémentation
Les fils d’un nœud sont des arbres
Définition récursive des arbres et des méthodes sur
les arbres
On pourrait identifier un arbre avec l’adresse de sa
racine (Type TarbreBinaire = Noeud)
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Implémentation
Représentation d’un arbre
Type t_Arbre =
Nœud
unArbre
Le nœud racine
On peut définir une représentation des arbres en utilisant
les pointeurs. Dans ce cas un arbre binaire peut être vide
(pointeur égal à NIL)
une
phrase
type
Nœud
Type Nœud = Structure
cinq
valeur : Élément
NIL NIL
filsGauche : t_Arbre
de
NIL
NIL
mots
NIL NIL
Une feuille
filsDroit : t_Arbre
finStructure Nœud
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre binaire
Opérations de création (i)
Fonction arbreVide (): Arbre
Retourner NIL
finFonction arbreVide
Opérations de création (ii)
Fonction créerArbre ( n : Nœud, fg : t_Arbre,
fd : t_Arbre) : t_Arbre
variable nouveauArbre : t_Arbre
nouvauArbre <- @n
nouvauArbre filsGauche <- fg
nouvauArbre filsDroit <- fd
retourner nouveauArbre
finFonction créerArbre
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Exercices
Écrire le reste des opérations du TAD arbre :
Opérations de création
arbreVide : → t_Arbre
créerArbre : Nœud x t_Arbre x t_Arbre → t_Arbre
filsGauche : t_Arbre → t_Arbre //retourne le sous arbre gauche
filsDroit : t_Arbre → t_Arbre //retourne le sous arbre droit
Opération d’extraction
racine : t_Arbre → Nœud //retourne le nœud racine de l’arbre
contenu : Nœud → Élément //retourne le contenu du nœud
Opération de Test
estVide : t_Arbre → Booléen
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Caractéristique des arbres
Une des caractéristiques des listes est de permettre un
traitement une fois et une seule des éléments
L'ordre des traitements est l'ordre dans lequel sont
rangés les éléments
Parcours facile : structure linéaire !
Parcours d’arbre
Parcourir un arbre c’est examiner tous ses nœuds selon
une certaine règle pour effectuer un certain traitement
Rechercher la présence d’une information particulière
Afficher le champ de chaque nœud
…
Dans le cas des arbres on n'a plus cet ordre naturel :
Il existe plusieurs choix : structure non linéaire !
On parle de parcours d’arbre
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours d’arbre
Représentation naturelle d’un arbre binaire
Récursivement et par chaînage
On peut parcourir un arbre
en profondeur d’abord: parcours branche après branche
en largeur d’abord: parcours niveau après niveau
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours d’arbre
Il existe trois règles de parcours
Parcours infixe
Parcours préfixe
Parcours postfixe
Ces différents parcours sont un bon outil pour convertir les
expressions arithmétiques infixes en préfixe ou postfixe
Exemple : a = (b+(c*d))
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours Infixe
Parcours Infixe
La règle de parcours est la suivante
=
Parcourir le sous-arbre gauche
+
a
Traiter la racine
*
b
Parcourir le sous-arbre droit
c
d
Procedure parcoursInfixe (entrée a:Arbre)
si ( estVide(a)=FAUX ) alors
parcoursInfixe (filsGauche(a))
exploiter(racine(a))
parcoursInfixe (filsDroit(a))
FinProcedure parcoursInfixe
a = (b + (c * d))
Notation infixée et ambiguë : gestion des parenthèse
2ème passage
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours Préfixe
Parcours Préfixe
Procedure parcoursPrefixe (a:Arbre)
si ( estVide(a)=FAUX ) alors
exploiter(racine(a))
parcoursPrefixe (filsGauche(a))
parcoursPrefixe (filsDroit(a))
finSi
Fin Procedure
La règle de parcours est la suivante
Traiter la racine
Parcourir le sous-arbre gauche
Parcourir le sous-arbre droit
=
+
a
=a+b*cd
1er passage
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
*
b
c
d
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Notation préfixée : notation polonaise
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours Postfixe
Parcours Postfixe
Procedure parcoursPostfixe (a: Arbre)
si ( estVide(a)=FAUX ) alors
parcoursPostfixe (filsGauche(a))
parcoursPostfixe (filsDroit(a))
exploiter(racine(a))
FinProcedure parcoursPostfixe
La règle de parcours est la suivante
Parcourir le sous-arbre gauche
Parcourir le sous-arbre droit
Traiter la racine
=
+
a
abcd*+=
*
b
Notation postfixée : notation polonaise inversée
d
c
3ème passage
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours en largeur
Arbre Binaire de Recherche : ABR
On part de la racine et on énumère l'ensemble de ses
descendants directs
Puis on réitère le processus sur les descendants euxmêmes
On effectue ainsi un parcours « de gauche à droite et de
haut en bas »
1
2
Arbre non vide A = (r, A1, A2, …, Ak)
nœuds de niveau 0,
1,
2, ...
5
6
9
3
4
7
8
10
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Un ABR est une structure de donnée
offrant une recherche en O(log n)
permettant de faire des ajouts et des suppressions en
O(log n)
Un ABR est un arbre binaire tel que pour tout nœud
les éléments de tous les nœuds du sous-arbre gauche
sont inférieurs à l'élément du nœud,
les éléments de tous les nœuds du sous-arbre droit sont
supérieurs à l'élément du nœud
Supposition : un ABR ne peut pas contenir deux éléments
ayant la même valeur
Remarque: Pour une suite d'éléments, il existe plusieurs
arbres binaires de recherche
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR
Recherche d'un élément
Arbre Binaire de Recherche : ABR
AjouterRacine : Élément x Arbre → Arbre
Recherche : Élément x Arbre -> Booléen
Ajout d'un élément : 2 étapes
Recherche de la place de l'élément à insérer
Insertion de l'élément
Ajout aux feuilles
AjouterFeuille : Élément x Arbre -> Arbre
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR
Suppression d'un élément
Chercher l'élément
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR
Suppression d'un élément
Réorganiser l'arbre
Supprimer l'élément
pour un nœud sans fils, suppression immédiate.
Réorganiser l'arbre
pour un nœud avec un seul fils, il suffit de le remplacer
par ce fils
Spécification de la suppression
Max rend l'élément maximal d'un arbre
Dmax rend l'arbre privé de cet élément
Supprimer : Élément x Arbre -> Arbre
Max : Arbre -> Élément
Dmax : Arbre -> Arbre
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR
Réorganiser l'arbre pour un nœud qui a deux fils
remplacer le nœud contenant l'élément à supprimer par
celui qui lui est immédiatement soit inférieur, soit
supérieur
Conclusion
Arbre binaire de recherche = bon compromis entre
tableaux et listes chaînées
Tableaux
Accès direct à partir de l’indice
Insertion et suppression sont des opérations coûteuses
Listes chaînées
Accès direct impossible
Insertion et suppression facile
Arbre binaire de recherche
Accès "relativement" rapide
Ajout et suppression "relativement" rapides.
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Bibliographie et Webographie
C. PAOLI, Cours d'algorithmes et structures de données,
Université de Corse, 2005
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Téléchargement