0% ont trouvé ce document utile (0 vote)
16 vues57 pages

Arbres

Le document présente les arbres en informatique, en détaillant leur structure hiérarchique, les arbres binaires et les arbres binaires de recherche. Il aborde également des concepts tels que la représentation, l'implémentation et les parcours d'arbres. Enfin, il explique les propriétés des arbres, notamment en ce qui concerne leur hauteur et leur utilisation dans les dictionnaires.

Transféré par

ayman.amer.casual
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
16 vues57 pages

Arbres

Le document présente les arbres en informatique, en détaillant leur structure hiérarchique, les arbres binaires et les arbres binaires de recherche. Il aborde également des concepts tels que la représentation, l'implémentation et les parcours d'arbres. Enfin, il explique les propriétés des arbres, notamment en ce qui concerne leur hauteur et leur utilisation dans les dictionnaires.

Transféré par

ayman.amer.casual
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Arbres

Algorithmique 1

Stéphane Grandcolas

Aix-Marseille Université

2023-2024

S. Grandcolas, 2024
Arbres

Arbre : structure très utilisée en informatique


▶ hiérarchique
▶ récursive
▶ dynamique

Programme
▶ définitions, vocabulaire,
▶ arbres binaires,
▶ arbres binaires de recherche (dictionnaire),

S. Grandcolas, 2024
Arbres

Arborescence des répertoires et fichiers (système Unix)

S. Grandcolas, 2024
Arbres

Arbre syntaxique représentant une expression arithmétique

x / +
× (78 + y )
(x − 1)
x − 78 y

x 1

S. Grandcolas, 2024
Arbres

Arbre min-max pour le calcul du meilleur coup


2-3-Game tree-1 [Link]

1 sur 1 14/09/2022 12:07

S. Grandcolas, 2024
Arbres

Un arbre lexicographique, ou arbre de préfixes ou trie

main
male
mie
m p
mite
pic
a i i o
pile
i l e t c l s r pis
port
n e e e t
porte
e

S. Grandcolas, 2024
Arbres : définition 1
Un arbre est un ensemble organisé de noeuds :
▶ chaque noeud a un père et un seul,
▶ excepté un noeud, la racine, qui n’a pas de père.

racine
Les fils d’un noeud p sont les noeuds
dont le père est p

Les feuilles d’un arbre sont


les noeuds qui n’ont pas de fils

traditionellement on représente le père au-dessus


de ses fils, et donc la racine tout en haut
feuilles

S. Grandcolas, 2024
Arbres : définition 2 (récursive)
Un arbre (non vide) est constitué
▶ d’un noeud p, sa racine,
▶ d’une suite de sous-arbres (a1 , a2 , . . . , ak ).

Les racines des arbres


a1 , a2 , . . . , ak sont les fils de p
....
a1 a2 ak

S. Grandcolas, 2024
Arbres : définition 3 (graphes)

Un arbre est un graphe connexe et sans cycle.

S. Grandcolas, 2024
Arbres : définition 3 (graphes)

Un graphe avec des cycles

S. Grandcolas, 2024
Arbres : définition 3 (graphes)

Un graphe non connexe

S. Grandcolas, 2024
Arbres : définition 3 (graphes)

Un graphe non connexe

S. Grandcolas, 2024
Arbres : définition 3 (graphes)

Graphe connexe et sans cycle : nb arêtes = nb sommets−1

S. Grandcolas, 2024
Arbres : vocabulaire

racine
niveaux
branche : chemin à la racine

ancetre

profondeur=2 hauteur=5

descendant frère

S. Grandcolas, 2024
Arbres binaires

Chaque noeud a potentiellement un fils gauche et un fils droit

sous−arbre gauche noeud


sous−arbre droit
(sa racine est )

fils gauche

fils droit

S. Grandcolas, 2024
Arbres binaires racine
1

nombre de noeuds
2

Arbre binaire parfait : 8

16
▶ à la profondeur p : 2p noeuds
h−1
X
▶ nombre total de noeuds : 2i = 2h − 1
i=0

Un arbre binaire de hauteur h contient au plus 2h − 1 noeuds


(avec la convention : hauteur = nombre de niveaux)

S. Grandcolas, 2024
Arbres binaires : représentation

Arbre vide : □

Arbre non vide : p = ⟨ x, G , D ⟩


▶ x = val(p) : élément, information, label, valeur,
▶ G = filsG (p) : sous-arbre gauche de p,
▶ D = filsD(p) : sous-arbre droit de p,
×

78 +

⟨×, ⟨78, □, □⟩, ⟨+, ⟨x, □, □⟩, ⟨6, □, □⟩⟩⟩ x 6

S. Grandcolas, 2024
Arbres binaires : implémentation
public class Node <T> {
T element;
Node filsG;
Node filsD;

// constructeurs, getters, setters


...
}

On utilisera null pour représenter l’arbre vide

S. Grandcolas, 2024
Arbres binaires : implémentation
public class Arbre <T> {
private Node racine;

public Arbre() {
this . racine = null;
}

boolean estVide() {
return ( this . racine == null);
}
...
}

Encapsulation : un Arbre a en attribut le noeud racine

S. Grandcolas, 2024
Arbres binaires : implémentation

12 racine
12

1 7

1 7
91 67 82
82
14 11 67
91

14
11

⟨12, ⟨1, ⟨91, □, ⟨14, □, □⟩⟩, ⟨67, □, □⟩⟩, ⟨7, □, ⟨82, ⟨11, □, □⟩, □⟩⟩⟩

S. Grandcolas, 2024
Arbres binaires : implémentation

12
racine
12
1 7 p
[Link]
91 67 82 1 7

82
14 11 67
91

14
11

[Link]

S. Grandcolas, 2024
Arbres binaires : parcours en profondeur

Principe : explorer le sous-arbre gauche, puis explorer le


sous-arbre droit

fonction EXPLORE(p),
si p ̸= □ alors
→ ici traitement avant
EXPLORE(filsG (p)),
→ traitement après l’exploration du fils gauche
EXPLORE(filsD(p)),
→ ici traitement après l’exploration du fil droit
finsi
fin fonction

S. Grandcolas, 2024
Arbres binaires : parcours préfixe
1

fonction PARCOURS-PREFIXE(p), 12
si p ̸= □ alors 2 5
1 7
Afficher(val(p)),
3 4 6
PARCOURS-PREFIXE(filsG (p)), 91 67 82
PARCOURS-PREFIXE(filsD(p)), 7
finsi 61
fin fonction
12 1 91 67 7 82 61

Parcours infixe : 91, 1, 67, 12, 7, 61, 82.


Parcours postfixe : 91, 67, 1, 61, 82, 7, 12.

S. Grandcolas, 2024
Arbres binaires : hauteur minimale
Propriété. Pour tout arbre A de taille n, n > 0,

h(A) ≥ ⌊log2 n⌋ + 1

taille : nombre de noeuds, h(A) : hauteur de l’arbre A

a1 a2

n1 noeuds n2 noeuds

S. Grandcolas, 2024
Arbres binaires : hauteur minimale
Propriété. Pour tout arbre A de taille n, n > 0,

h(A) ≥ ⌊log2 n⌋ + 1

taille : nombre de noeuds, h(A) : hauteur de l’arbre A


Preuve. Si n = 1 alors h(A) = 1, sinon
a
h(A) = 1 + max(h(A1 ), h(A2 ))

a1 a2

n1 noeuds n2 noeuds

S. Grandcolas, 2024
Arbres binaires : hauteur minimale
Propriété. Pour tout arbre A de taille n, n > 0,

h(A) ≥ ⌊log2 n⌋ + 1

taille : nombre de noeuds, h(A) : hauteur de l’arbre A


Preuve. Si n = 1 alors h(A) = 1, sinon
a
h(A) = 1 + max(h(A1 ), h(A2 ))
On suppose n1 ≥ n2 , et donc n1 ≥ n/2
Induction : h(A1 ) ≥ 1 + ⌊log2 n1 ⌋
donc h(A1 ) ≥ 1 + ⌊log2 n/2⌋ = ⌊log2 n⌋,
et puisque h(A) ≥ 1 + h(A1 ), a1 a2
on en déduit h(A) ≥ 1 + ⌊log2 n⌋.
n1 noeuds n2 noeuds

S. Grandcolas, 2024
Arbres binaires : hauteur minimale
Propriété. Pour tout arbre A de taille n, n > 0,

h(A) ≥ ⌊log2 n⌋ + 1

taille : nombre de noeuds, h(A) : hauteur de l’arbre A


Preuve. Si n = 1 alors h(A) = 1, sinon
a
h(A) = 1 + max(h(A1 ), h(A2 ))
On suppose n1 ≥ n2 , et donc n1 ≥ n/2
Induction : h(A1 ) ≥ 1 + ⌊log2 n1 ⌋
donc h(A1 ) ≥ 1 + ⌊log2 n/2⌋ = ⌊log2 n⌋,
et puisque h(A) ≥ 1 + h(A1 ), a1 a2
on en déduit h(A) ≥ 1 + ⌊log2 n⌋.
n1 noeuds n2 noeuds

⌈log2 nf ⌉ + 1 si nf est le nombre de feuilles.


S. Grandcolas, 2024
Arbres binaires : hauteur
Propriété. Pour tout arbre A constitué de n noeuds

⌊log2 n⌋ + 1 ≤ h(A) ≤ n

12 12
7
1 7
82
91 67 82 22
11
14 14 53 38 11 12 98 23 12

15 noeuds, h = 4 5 noeuds, h = 5

S. Grandcolas, 2024
Structure de données dictionnaire

Ensemble dynamique d’objets comparables qui supporte les


opérations suivantes :
estvide() : détermine si le dictionnaire est vide
ajouter(e) : ajout d’un élément
supprimer(e) : suppression d’un élément
rechercher(e) : recherche d’un élément

Implémentation : liste, tableau, arbre binaire de recherche,


table de hashage,. . .

Objectifs : être efficace, utiliser peu d’espace.

S. Grandcolas, 2024
Arbres binaires de recherche

Soit E un ensemble muni d’une relation d’ordre ≺ (ordre total)


Un arbre binaire A étiqueté avec des éléments de E est un
arbre binaire de recherche s’il satisfait l’ordre infixe, c’est à
dire, pour tous noeuds p, q ∈ A
▶ si q ∈ filsG (p) alors val(q) ≺ val(p),
▶ si q ∈ filsD(p) alors val(q) ≻ val(p).

Il n’y a pas dans l’arbre deux éléments avec la même clé.


(i.e. si x ⪯ y et y ⪯ x alors x et y sont le même élément)

S. Grandcolas, 2024
Arbres binaires de recherche

p
34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 35 52 67 69 94

26 51 88

< 66 > 66

éléments pris dans (N, <)

S. Grandcolas, 2024
Arbres binaires de recherche : parcours infixé

Le parcours infixe de l’arbre produit la suite ordonnée des


éléments
16
34
7
22 66
1 13
7 29 50 71
5 9 15
17 25 32 37 56 70 81
3 6 8 12
9 21 23 28 30 14 36 44 55 68 80 97
2 4 17
11
8 16 27 35 52 67 69 94
10
26 51 88

7 8 9 16 17 21 22 23 25 26 27 28 29 30 32 34 35 36 37 ...

S. Grandcolas, 2024
ABR : Recherche d’un élément
Soit e un élément qui apparaît dans l’arbre de racine p. Si
e ̸= val(p) alors :
▶ soit e ≺ val(p) et e ∈ filsG (p),
▶ soit e ≻ val(p) et e ∈ filsD(p).

34
< 34

22 66
> 22
7 29 50 74
< 29

17 25 32 37 56 73 81
> 25
9 21 23 28 30 36 44 55 68 80 97
< 28
8 16 27 35 52 67 72 94

26 51 88

recherche de la valeur 27

S. Grandcolas, 2024
ABR : Recherche d’un élément

fonction RECHERCHE(x, p)
out : □ si x n’apparaît pas dans le sous-arbre enraciné en p,
le noeud de valeur x sinon,
si p = □ alors renvoyer □,
si val(p) = x alors renvoyer p,
si val(p) > x alors renvoyer RECHERCHE(x, filsG (p)),
renvoyer RECHERCHE(x, filsD(p)),
fin fonction

Parcours d’une branche : O(h(A))

S. Grandcolas, 2024
ABR : ajout d’un élément (insertion)

Ajout de la valeur 31

34

22 66

7 29 50 74

17 25 32 37 56 73 81

9 21 23 28 30 36 44 55 69 80 97

8 16 27 35 52 67 72 94

26 51 88

Même principe que la recherche : parcours d’une branche

S. Grandcolas, 2024
ABR : ajout d’un élément (insertion)

Ajout de la valeur 31

34

22 66

7 29 50 74

17 25 32 37 56 73 81

9 21 23 28 30 36 44 55 69 80 97

8 16 27 31 35 52 67 72 94

26 51 88

Ajout au bout de la branche

S. Grandcolas, 2024
ABR : ajout d’un élément (insertion)

fonction INSERER(x, p)
insère la valeur x dans l’arbre p, renvoie l’arbre résultant,
si p = □ alors renvoyer ⟨x, □, □⟩,
si val(p) > x alors filsG(p) :=INSERER(x,filsG(p)),
si val(p) < x alors filsD(p) :=INSERER(x,filsD(p)),
renvoyer p,
fin fonction

Parcours d’une branche : O(h(A))

S. Grandcolas, 2024
ABR : successeur
le noeud de valeur 66 a un fils droit,
son successeur est 67,
dernier fils gauche de
son sous−arbre gauche
34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 67 69 94

26 51 88

S. Grandcolas, 2024
ABR : successeur
le noeud de valeur 32 n’a pas de fils droit :
son successeur est 34, premier ascendant de 32
tel que 32 figure dans son sous−arbre gauche

34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 67 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 1 : le noeud n’a pas de fils : décrochage

34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 67 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 1 : le noeud n’a pas de fils : décrochage

34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 2 : le noeud a un seul fils : décrochage

34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 2 : le noeud a un seul fils : décrochage

34

22 66

7 29 50 71

17 25 32 37 56 70 81

9 21 23 28 30 36 44 55 68 80 97

8 16 27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 2 : le noeud a un seul fils : décrochage

34

22 66

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 68 80 97

27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 3 : le noeud a deux fils


34 a supprimer

22 57

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 68 80 97

27 31 35 52 69 94

26 51 88

plus petit
des plus grands

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 3 (deux fils) : copie du plus petit des plus grands


34

22 57

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 68 80 97

27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 3 (deux fils) : copie du plus petit des plus grands


34

22 68

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 68 80 97

27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 3 (deux fils) : décrochage


34

22 68

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 68 80 97

27 31 35 52 69 94

26 51 88

S. Grandcolas, 2024
Arbres binaires de recherche : suppression

Cas 3 (deux fils) : décrochage


34

22 68

17 29 50 71

9 21 25 32 37 56 70 81

8 16 23 28 30 36 44 55 69 80 97

27 31 35 52 94

26 51 88

S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors
renvoyer filsD(p),
sinon si filsD(p) = □ alors
renvoyer filsG(p),
sinon
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est présent dans l’arbre.
S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors x est dans le sous-arbre gauche
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors
renvoyer filsD(p),
sinon si filsD(p) = □ alors
renvoyer filsG(p),
sinon
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est dans le dictionnaire.
S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors x est dans le sous-arbre droit
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors
renvoyer filsD(p),
sinon si filsD(p) = □ alors
renvoyer filsG(p),
sinon
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est dans le dictionnaire.
S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors val(p) = x, pas de fils gauche
renvoyer filsD(p),
sinon si filsD(p) = □ alors
renvoyer filsG(p),
sinon
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est dans le dictionnaire.
S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors
renvoyer filsD(p),
sinon si filsD(p) = □ alors val(p) = x, pas de fils droit
renvoyer filsG(p),
sinon
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est dans le dictionnaire.
S. Grandcolas, 2024
ABR : suppression d’un élément
fonction SUPPRIMER(x, p)
si val(p) > x alors
filsG(p) :=SUPPRIMER(x,filsG(p)),
sinon si val(p) < x alors
filsD(p) :=SUPPRIMER(x,filsD(p)),
sinon si filsG(p) = □ alors
renvoyer filsD(p),
sinon si filsD(p) = □ alors
renvoyer filsG(p),
sinon val(p) = x, deux fils,
val(p) := GETMIN(filsD(p)),
filsD(p)) :=SUPPRIMER(val(p),filsD(p)),
renvoyer p,
fin fonction

Supprime la valeur x de l’arbre p, renvoie l’arbre résultant.


Suppose que l’élément est dans le dictionnaire.
S. Grandcolas, 2024
Arbres binaires de recherche : suppression

fonction GETMIN(p)
si p = □ alors
renvoyer □,
si filsG(p) = □ alors
renvoyer p,
renvoyer GETMIN(filsG(p)),
fin fonction

S. Grandcolas, 2024
Arbres binaires de recherche : coûts

Structure insertion recherche suppression


tableau O(1) O(n) O(n)
tableau trié O(n) O(log n) O(n)
liste O(1) O(n) O(n)
ABR O(h) O(h) O(h)

où h est la hauteur de l’arbre :

1 + ⌊log2 n⌋ ≤ h ≤ n

S. Grandcolas, 2024

Vous aimerez peut-être aussi