Vous êtes sur la page 1sur 34

2éme année Ingénieurs

PR. BELALA Faiza


Semestre 01-2023/24

1
 Révision
 Complexité algorithmique
 Les arbres et graphes
 Algorithmes de Tri
 Récap, et évaluation

Chapitre 01_ALCO Pr F. BELALA 2


 But:

Définir la structure de données Arbre et particulièrement


Arbre binaire
Connaitre les algorithmes de parcours d’arbres
Algorithmes de tri et de recherche associés

Chapitre 01_ALCO Pr F. BELALA


3
 Plan:

1. Introduction
2. Définitions
3. Vocabulaire et mesures sur les arbres
4. Typologie des arbres
5. Structure de données: Arbre binaire
a) Opérations de manipulation
b) Implémentation
6. Parcours des arbres binaires
7. Structure de données: Graphe
8. Conclusion

Chapitre 01_ALCO Pr F. BELALA


4
 L’usage des arbres est très répandu pour la structuration des
informations: les arbres de répertoire, arbres généalogiques, arbres de
classification d’animaux, etc.

 Cette structure possède un intérêt particulier dans la structuration des


données qui interviennent dans de nombreux problèmes:
◦ hiérarchies d’objets,
◦ choix et décisions,
◦ arbres syntaxiques,
◦ etc.

 L’intérêt réside dans l’ensemble d’algorithmes que l’on peut définir sur
eux de manière générale: rechercher l’ensemble des descendants,
compter les noeuds, savoir si un noeud est ancêtre d’un autre, etc.

Chapitre 01_ALCO Pr F. BELALA 5


 Une propriété intrinsèque des arbres est la récursivité. Les
définitions des arbres et les algorithmes qui manipulent cette
structure s’écrivent très naturellement avec la récursivité.

 En informatique, la structure de données arbre est largement


utilisée, elle est bien adaptée à la représentation d’informations
hiérarchiques dans plusieurs domaines, tels qu’en :
• Algorithmique,
• Compilation (arbre syntaxique),
• Intelligence artificielle ( arbre et/ou, arbre de jeux),
• Système d’exploitation,
• Etc.

Chapitre 01_ALCO Pr F. BELALA 6


Arbre syntaxique d’une
expression arithmétique

Arbre généologique

Chapitre 01_ALCO Pr F. BELALA 7


Arbre phylogénétique

Chapitre 01_ALCO Pr F. BELALA 8


Arbre Lexicographique

Chapitre 01_ALCO Pr F. BELALA 9


 En général, un arbre est une structure de données (SD) hiérarchique
formée par une collection d’informations homogènes organisées en
niveaux reliées entre eux par des branches sans boucles.

 Définition itérative (mathématique): Un arbre se compose de deux


ensembles N et A appelés respectivement l’ensemble des noeuds et
l’ensemble des arcs et d’un noeud particulier r appelé racine de
l’arbre. Les éléments de A sont des paires (n1, n2) d’éléments de N.
Un arc (n1,n2) établit une relation entre n1, appelé noeud parent, et
n2, appelé noeud enfant de n1. A doit être tel que chaque noeud, sauf
la racine, a exactement un parent. La racine n’a pas de parent.

 Définition récursive: Un arbre d’éléments est:


• Soit vide
• Soit formé d’un nœud particulier appelé racine et un ensemble fini
de sous arbres.

Chapitre 01_ALCO Pr F. BELALA 10


 Exemple

 Notation mathématique:

N={25, 10, 130, 24, 3, 14, 11, 120, 5}


A= {(25,10), (25,130), (25,24), (10,3), (10,14), (130,11), (130,120), (24,5)}
Racine= 25

Chapitre 01_ALCO Pr F. BELALA 11


 Notation récursive:
Racine=25
Sous-arbre1
Racine= 10
Sous-arbre1.1
Racine=3, sous-arbre1.1.1=vide, sous-arbre1.1.2=vide
Sous-arbre1.2
Racine=14, sous-arbre1.2.1=vide, sous-arbre1.2.2=vide
Sous-arbre2
Racine= 130
Sous-arbre2.1
Racine=11, sous-arbre2.1.1=vide, sous-arbre2.1.2=vide
Sous-arbre2.2
Racine=120, sous-arbre2.2.1=vide, sous-arbre2.2.2=vide

Sous-arbre3
Racine= 24
Sous-arbre3.1
Racine=5, sous-arbre3.1.1=vide, sous-arbre3.1.2=vide

Chapitre 01_ALCO Pr F. BELALA 12


 Nœuds : sont les sommets d’un arbre qui peuvent être
des nœuds internes ou des feuilles

 Feuille : c’est un nœud qui n’a pas de sous arbre

 Nœud interne : c’est un nœud d’un arbre qui n’est pas


feuille

 Sous arbre : On dit que C est un sous-arbre de B dont


la racine est r ssi :
• C = B, ou
• C est un des sous arbre de r, ou
• C est un sous-arbre des sous arbres précédents.

Chapitre 01_ALCO Pr F. BELALA 13


 Ascendant (ou ancêtre) : Le nœud A est un ascendant (ou ancêtre)
du noeud B ssi:
• A est le père de B ou
• A est un ascendant du père de B.
(la racine n’a pas d’ascendant)

 Descendant: Le nœud A est un descendant de B ssi:


• A est le fils de B, ou
• A est un descendant d’un fils de B.
(les feuilles n’ont pas de descendants)

 Frères : les nœuds frères d’un nœud donné, ce sont tous les nœuds
qui ont le même père.

 Chemin : c’est une suite de nœuds consécutifs séparés par des arcs

 Branche: On appelle branche de l’arbre B tout chemin de la racine à


une feuille de B.

Chapitre 01_ALCO Pr F. BELALA 14


 Expression: (a+b)*(c-d)/e

 Feuilles(S)={a,b,c,d,e}
 Nœuds Internes (S)={+,*,-,/}
 Ascendants(a)={+,*,/}
 Descendants(a)=
 Descendants(*)={+,-,a,b,c,d}
 Frères(+)={-}
 Chemin1= /,e Chemin2= /,*,+,b
 On peut remarquer que chemin2 est une branche

Chapitre 01_ALCO Pr F. BELALA 15


 Taille: la taille d’un arbre B est donnée par le nombre de
ses sommets. Si B=<r, B1,B2,…,Bn>, elle est définie
récursivement par :
◦ taille(arbre-vide) = 0
◦ taille(B) = 1+taille(B1) + taille(B2)+…+taille(Bn)

 Nombre de feuilles : Si B=<r, B1,B2,…,Bn>, le nombre de


feuilles dans B est calculé comme suit :
◦ nombre-feuilles(arbre-vide) = 0
◦ nombre-feuilles(B) = max(1, nombre-feuilles(B1)+nombre-
feuilles(B2)+…+ nombre-feuilles(Bn))

Chapitre 01_ALCO Pr F. BELALA 16


 Hauteur (profondeur/niveau) d’un nœud : La hauteur d’un nœud
donné X de l’arbre B est définie comme suit:
◦ hauteur(X) = 0, si X est la racine de B
◦ hauteur(X) = 1+hauteur(Y ), si Y est le père de X

 Hauteur d’un arbre : La hauteur de l’arbre B est la plus grande


valeur des différentes hauteurs associées à ses nœuds, elle est
donnée par:
max(hauteur(X)) | X nœud de B

 Degré d’un nœud : Le degré d’un nœud est le nombre de ses


enfants.

 Degré d’un arbre : Le degré de l’arbre B est la plus grande valeur


des différents degrés associés à ses nœuds, il est donné par:
max(degré(X)) | X nœud de B

Chapitre 01_ALCO Pr F. BELALA 17


 Taille(T)=8
 Nombre de feuilles(T)=5
 Hauteur(T)=2, sachant que: hauteur(25)=0,
hauteur(10)=hauteur(130)=hauteur(24)=1 ...
 Degré(T)=3, sachant que: degré(25)=3, degré(24)=1,
degré(10)=degré(130)=2, degré(11)=0,
Chapitre 01_ALCO Pr F. BELALA 18
 Arbre n-aire : un arbre est dit n-aire quand le nombre maximum de fils d’un
même nœud est N. Si N=2, on parle d’arbre binaire (chaque nœuds a au
plus deux fils).

 Arbre binaire dégénéré, filiforme: C’est un arbre dont tous les nœuds qui
ne sont pas des feuilles ont exactement un fils

 Arbre binaire complet (uniforme) : c’est un arbre tel que tous les nœuds
(sauf les feuilles) ont exactement deux fils

 Arbre binaire Parfait (presque complet): C’est un arbre dont toutes les
feuilles sont situées sur au plus deux niveaux consécutifs: l’avant dernier
niveau est complet et les feuilles du dernier niveau sont groupées le plus à
gauche possible.

 Arbre binaire équilibré: C’est un arbre binaire tel que à chaque nœud de
l’arbre, les hauteurs des sous-arbres gauche et droit différent au plus de la
valeur entière un (1).

 Arbre binaire de recherche : C’est un arbre binaire tel que la valeur de


chaque nœud est supérieure ou égale à toutes les valeurs des nœuds du
sous-arbre gauche et inférieure à celles des nœuds du sous-arbre droit
(chaque sous arbre gauche ou droit est un arbre de recherche, récursivité !).

Chapitre 01_ALCO Pr F. BELALA 19


Arbre Filiforme

Arbre binaire parfait Arbre binaire complet

Arbre binaire équilibré


Arbre binaire de recherche 20
 Définition Un Arbre binaire est soit vide, soit de la
forme B = <o, B1, B2>, où B1 et B2 sont des arbres
binaires disjoints et o est un noeud appelé racine de B.

 Il est important de noter la non-symétrie gauche/droite


des arbres binaires : l’arbre <o, A,B> et l’arbre <o,B ,A>
sont des arbres binaires différents.

Chapitre 01_ALCO Pr F. BELALA 21


 La règle de transformation est donnée par :

Chaque nœud de l’arbre n-aire possède dans l’arbre binaire, un


fils gauche, formé de son fils le plus à gauche et un fils droit,
formé de son premier frère droit dans l’arbre n-aire.

Chapitre 01_ALCO Pr F. BELALA 22


 Types utilisés: Elément, Nœud, Arbre_b

 Opérations et leurs profils:

◦ Arbre-vide: → Arbre_b
◦ Cons-arbre: Noeud, Arbre_b, Arbre_b → Arbre_b
◦ gauche: Arbre_b → Arbre_b
◦ droit: Arbre_b → Arbre_b
◦ racine: Arbre_b → Noeud
◦ contenu: Noeud → Elément

Chapitre 01_ALCO Pr F. BELALA 23


Représentation chaînée: la plus utilisée !
 Chaque noeud d’un arbre binaire peut être représenté
par un enregistrement à trois champs :
◦ SG,
◦ SD et
◦ Info
 contiendront respectivement:
◦ un pointeur vers le sous-arbre gauche,
◦ un pointeur vers le sous-arbre droit et,
◦ la valeur du noeud.

Chapitre 01_ALCO Pr F. BELALA 24


 Un pointeur vers un premier enregistrement représentant le
noeud racine
 D'autres enregistrements représentant les différents noeuds
de l'arbre, chacun est constitué de trois champs (y compris le
noeud racine): un champ de type élément pour représenter
l'étiquette ou l'information contenue dans ce noeud; Deux
champs pour les deux pointeurs SG, et SD pointant vers
respectivement le sous arbre gauche et droit;

Chapitre 01_ALCO Pr F. BELALA 25


1. Ecrire des fonctions implémentant les
opérations de base manipulant la structure
de données « Arbre binaire ».

2. Ecrire la fonction Nb-feuilles qui permet de


calculer le nombre de feuilles dans un arbre
binaire.

Chapitre 01_ALCO Pr F. BELALA 26


 Une des opérations les plus fréquentes qui manipulent les
arbres: consiste à examiner systématiquement, dans un
certain ordre, chacun des noeuds de l’arbre pour y
effectuer un même traitement.
 2 grandes catégories d’ordre de parcours:

1. Les parcours en profondeur

2. Les parcours en largeur

Chapitre 01_ALCO Parcours en profondeur


Pr F. BELALA 27
 Le parcours d’arbre est alors décrit par la procédure
récursive suivante:

Procédure PPG (donnée/résultat A: arbre)


Début
Si A= arbre_vide alors
terminaison
sinon
traitement1(racine(A))
PPG (gauche(A))
traitement2(racine(A))
PPG(droit(A))
traitement3(racine(A))
fsi
Fin Parcours en profondeur

Chapitre 01_ALCO Pr F. BELALA 28


 Il existe trois ordres classiques d’exploration d’un arbre dans le PPG:

1. Préfixé (préordre): correspond au cas ou le traitement2 et traitement3 sont


des opérations vides.
• traiter la racine,
• parcourir le sous-arbre gauche,
• parcourir le sous-arbre droit.
2. Postfixé (postordre): correspond au cas ou le traitement1 et traitement2
sont des opérations vides.
• parcourir le sous-arbre gauche,
• parcourir le sous-arbre droit,
• traiter la racine.
3. Infixé (en ordre): correspond au cas ou le traitement1 et traitement3 sont
des opérations vides.
• parcourir le sous-arbre gauche,
• traiter la racine,
• parcourir le sous-arbre droit.

Chapitre 01_ALCO Pr F. BELALA 29


 Le parcours en profondeur gauche général permet d’afficher
successivement:
10,5,3,2,2,2,3,4,4,4,3,5,6,6,6,5,10,15,12,12,12,15,16,16,16,15
,10

 Particulièrement, dans le parcours:


1. préfixé: 10,5,3,2,4,6,15,12,16
2. infixé: 2,3,4,5,6,10,12,15,16
3. postfixé: 2,4,3,6,5,12,16,15,10

Chapitre 01_ALCO Pr F. BELALA 30


 Dans le parcours en largeur (Gauche), on parcours l’arbre
dans l’ordre suivant :
1. La racine,

2. Les noeuds du niveau 1 (de gauche vers la droite),

3. Les noeuds du niveau 2 (de gauche vers la droite),

... etc.
Les noeuds du dernier niveau
(de gauche vers la droite).

Chapitre 01_ALCO Pr F. BELALA 31


 Nous présentons l’algorithme sous forme itérative de parcours en largeur
gauche:
Procédure PLG(donnée/résultat A: arbre)
Déclarations
F: file /* Une file de noeuds */
T: noeud
Début
F← file_vide
F← ajouter(F, racine(A))
Tantque non(est_vide(F)) faire
T←tête(F)
traiter(T)
F←retirer(F)
Si non(est_vide(gauche(T))) alors
F←ajouter(F,racine(gauche(T)))
fsi
Si non(est_vide(droit(T))) alors
F←ajouter(F,racine(droit(T)))
fsi
fintq
Chapitre 01_ALCO Pr F. BELALA 32
Fin
 Pour le même arbre binaire précédent et la même instruction
d'affichage dans la procédure Traiter, le parcours en largeur
gauche affiche la séquence d’entiers suivante:
 10,5,15,3,6,12,16,2,4

 Les états de la file à chaque itération:


F

10

10 5 15

Chapitre 01_ALCO Pr F. BELALA 33


F

10 5 15 3 6

F …
10 5 15 3 6 12 16

A la fin, tous les nœuds dans la


F file sont traiter et retirer un à un.

10 5 15 3 6 12 16 2 4

10 5 15 3 6 12 16 2 4

10 5 15 3 6 12 16 2 4

Chapitre 01_ALCO Pr F. BELALA 34

Vous aimerez peut-être aussi