Académique Documents
Professionnel Documents
Culture Documents
2019-2020
Un Graphe T=(V, E) est dit arbre (Tree) s’il est connexe sans cycle (acyclique).
v2
v1
v3
v5 v6
v4
II. Propriété
v7
Soit T (V,E) un arbre d'ordre n alors :
1. T est un graphe simple et connexe
2. T est acyclique (sans cycle)
3. T possède n-1 arêtes
4. Tout couple de sommets est relié par une chaîne unique
5. Si on supprime une seule arête, T devient non connexe
6. Si on ajoute une seule arête, T devient acyclique
II. forêt
Une forêt F(Vf, Ef) est définie par un graphe simple sans cycle. Chacune de ses composantes
connexes est acyclique. (Vf = V1 ∪ V2 ∪ . . . . . . ∪ Vn et Ef = E1 ∪ E2 ∪ . . . . . . ∪ En)
Une forêt est définie par un ensemble d'arbres
v1 v4 v1
v1
v2 v5 v3
v2 v3 v2
v3 v6 v6
v4 v5
v4
1
III. arbre par niveau : arbre enraciné
Il est possible de représenter un arbre T(V, E) par niveau (arbre enraciné) dont le niveau 0
présente la racine (un seul nœud), le niveau 1 présente les fils da la racine, niveau 2 présente
les fils des nœuds du niveau 1, etc…
v1 Niveau 0
v3 Niveau 1
v2
v4 v5 Niveau 2
Niveau 3
v7 v8
v1 v4
v2 v5
v3 v6
v2 v5
v1 v3 v2
v5
v1 v3
v4 v6 v4 v6
2
III.1. Propriétés
2. Une feuille est un sommet sans fils : v8, v3 , v7 et v6 sont des feuilles
Une Racine
v1
v2 v4
v3
v5 v6 v7
v8
Des Feuilles
v1
v2 v4 Parent
v3
Frères v Fils
5 v6 v7
v8
4. Une branche est une chaîne reliant la racine d’un arbre à une feuille : [v1, v3], [v1, v4, v7]
[v1, v2, v6] et [v1, v2, v5, v6] sont des branches
v1
Branche 2
v2 v4
Branche 1 v3
Hauteur
v5 v6 v7
v8
3
III.2. Arbre k-aire
Un arbre est dit k-aire dont chaque nœud a au plus k fils.
.
v1 v1
v2 v4 v3 v2
v3 v4 v5 v6
v5 v6 v7 v8
Un arbre k-aire est dit complet (ou saturé) si tous ses nœuds ont k fils sauf les feuilles.
v1
v2 v3 v4
Propriété :
Dans un arbre k-aire complet, toutes les branches ont la même longueur
v1
v2 v3
v4 v5 v6 v7
4
Niveau 0 : Nombre de nœud = 1 = 2(1-1)
Propriété :
Pour un arbre binaire complet
𝑁𝑏𝑟 𝑛𝑜𝑒𝑢𝑑 = ∑ 2𝑖 = 2ℎ − 1
𝑖=0
IV. Arborescence
Une arborescence est un arbre enraciné orienté.
v2
v1 v3
v5
v4 v6 v7 v8
v9 v10
Propriété :
1. La hauteur d’une arborescence est le nombre d’arcs sur un chemin de longueur maximale.
h(T) = 3
2. Une arborescence est k-aire si chaque nœud a au plus k successeurs.
3. Une arborescence k-aire est complet si tous ses nœuds ont 0 (pour les feuilles) ou k
successeurs.
4. Quand k=2, l’arborescence est dite binaire.
5
V. Arbre couvrant
V.1. Définition
Un arbre couvrant A(V, E) d’un graphe connexe G(V, E’) est un graphe partiel couvrant
(contient tous les sommets du graphe G) qui est un arbre.
v1 v1
v3 v3
v2 v2
v6 v6
v5 v5
v1 v4
v4
v3
Arbre couvrant A(V, E)
v2
v6
v5 v1 v1
v4
G(V, E’) v3 v3
v2 v2
v6 v6
v5 v5
v4 v4
Un arbre couvrant de poids minimum A(V, E, p) d’un graphe connexe pondéré G(V, E’, p)
est un arbre couvrant dont la somme des poids des arêtes le constituant est minimal.
v1 v1
5 10 5
1 1
v3 v3
v2 5 v2
2 2 2 2 v6
v1 v6
v5 5 v5
5 3 3 3
1 10
v4 v4
v3
v2 5 Arbre couvrant de poids
2 2 v6 minimum A(V, E, p)
v5 Somme des poids =
3 5 3
1+2+2+3+5=13
v4
v1 v1
Graphe G(V, E’, p) 5 10 5
1 1
v3 v3
v2 5 v2
2 2 v6 2 2
v5 5 v6
v5
3 3 3
v4 v4
6
Remarques
1. Un arbre couvrant de poids minimal d’un graphe connexe n’est pas toujours unique.
2. Un arbre couvrant de poids minimal d’un graphe connexe est unique si et seulement si les
poids de ces arêtes sont deux à deux distincts
v1 v1 v1
6 9 8 9 8 9
1 1 1
v3 v3 v3
v2 8 v2 5 v2 5
2 3 v6 2 3 2 3
v5 v6 v6
5 v5 4 v5 4
7 4 6 7 6 7
v4 v4 v4
Graphe G(V, E’, p) Arbre unique couvrant de poids
nnnnnnnnnn minimum A(V, E, p)
- Algorithme de Kruskal
- Algorithme de Prim
L’algorithme de Kruskal permet d’ajouter à chaque itération une arête, telle que l’arête ajouté
ne forme pas de cycle et soit de coût minimal.
Algorithme de kruskal
Input : un graphe connexe G(V, Egraphe, p)
Output : arbre couvrant minimum A(V, Earbre,p) de G
EgrapheTriée = les arêtes (Egraphe) sont Triées dans l’ordre croissant
Earbre = Ø
Pour chaque arêtes (a EgrapheTriée) et | Earbre |<=|V|-1 faire
Si Earbre ∪ a ne forme pas de cycle alors
Earbre = Earbre ∪ a
Fin Si
Fin pour
7
Exemple :
EgrapheTriée = {(v1, v2), (v5, v6), (v2, v5), (v2, v4), (v4, v6), (v1, v3), (v3, v5), (v5, v4), (v1, v6)}
Earbre = Ø
1ère itération
v1
a = (v1, v2) avec a EgrapheTriée
5 10
| Earbre | = 0 <= 5 1
v3
v2 5
Ø ∪ (v1, v2) ne forme pas de cycle alors 3 2 v6
v5
4 5 4
Earbre ={(v1, v2)}
v4
2eme itération
v1
a = (v5, v6) avec a EgrapheTriée
5 10
| Earbre | = 1 <= 5 1
v3
v2 5
{(v1, v2)} ∪ (v5, v6) ne forme pas de cycle alors 3 2 v6
v5
4 5 4
Earbre ={(v1, v2), (v5, v6)}
v4
3eme itération
v1
a = (v2, v5) avec a EgrapheTriée
5 10
| Earbre | = 2 <= 5 1
v3
{(v1, v2), (v5, v6)}∪ (v2, v5) ne forme pas de cycle alors v2 5
3 2 v6
v5
Earbre ={(v1, v2), (v5, v6), (v2, v5)} 4 5 4
v4
8
4eme itération
a = (v2, v4) avec a EgrapheTriée v1
| Earbre | = 3 <= 5 5
1 10
{(v1, v2), (v5, v6), (v2, v5)}∪ (v2, v5) v3
v2 5
ne forme pas de cycle alors 3 2 v6
v5
4 5 4
Earbre ={(v1, v2), (v5, v6), (v2, v5), (v2, v4)}
v4
5eme itération
a = (v4, v6) avec a EgrapheTriée
| Earbre | = 4 <= 5
{(v1, v2), (v5, v6), (v2, v5), (v2, v4)}∪ (v4, v6)
forme un cycle alors
6eme itération
7eme itération
9
V.2.1. Algorithme de PRIM (1957)
Algorithme de PRIM
Input : un graphe connexe G(V, Egraphe, p)
Output : arbre couvrant minimum A(V, Earbre, p) de G
Choisir aléatoirement un sommet s V
Varbre = {s}
Earbre = Ø
tant que (|Varbre | < |V|)
a= (vi,vj) = arête de poids minimum avec vi Varbre et vj V- Varbre
Varbre = Varbre ∪ { vj }
Earbre = Earbre ∪ a
Fin tant que
Exemple :
10
A chaque itération, On ajoute une arête sortante (qui a le plus petit poids) de l’un des sommets
sélectionnés (Les sommet appartenant à Varbre )
1 v1 2 v1
5 10 5 10
1 v3 1 v3
v2 5 v2 5
3 2 v6 3 2 v6
v5 v5
4 5 4 4 4 5
v4 v4
Varbre = {v5, v6} Varbre = {v5, v6, v2}
Earbre = {(v5, v6)} Earbre = {(v5, v6), (v5, v2)}
3 v1 4 v1
5 10 5 10
1 1
v3 v3
v2 5 v2 5
3 2 v6 3 2 v6
v5 v5
4 4 5 4 5
4
v4 v4
Varbre = {v5, v6, v2, v1} Varbre = {v5, v6, v2, v1, v4}
Earbre = {(v5, v6), (v5, v2), (v2, v1)} Earbre = {(v5, v6), (v5, v2), (v2, v1), (v6, v4)}
v1
5 v1
5 5
1 10 1 v3
v3
v2 5 v2
3 2 3 2 v6
v6 v5
v5 5 5 4
4 4
v4 v4
Varbre = { v5, v6, v2, v2}
Earbre = {(v5,v6),(v5,v2),(v2,v1),(v6,v4), (v1,v3)} Arbre couvrant de poids minimum
11
Ecole Nationale d’Electronique et des Télécommunications A. U. 2019-2020
Auditoire : 1GRT
I. Introduction
Nombre de sommet
2. Algorithme de Ford
3. Algorithme de Bellman
4. Algorithme de Dijkstra
II. Méthode de Maria Hasse
La méthode de Maria Hasse est appliqué sur un graphe valué G(V, E, p), dont G =(V, E) est
un graphe orienté muni d’une fonction coût (p : poids) qui représente la valeur de chaque arc.
Rq : Si un chemin contenant un seul sommet (Ch = [xi]), alors ce chemin est de longueur 0 et
f(Ch) =0.
- Matrice des coûts : La matrice des coût ( C ) d’un graphe est de taille n×n, La valeur
située à l’intersection de la ième ligne et de la jème colonne (C(i, j)) est défini comme suit :
0 si i = j
C(i, j) = si i j et (xi, xj) E
f (xi, xj) si i j et (xi, xj) E
- Matrice des coûts minimums : La matrice des coût minimum ( CM ) d’un graphe est
de taille n×n, La valeur située à l’intersection de la ième ligne et de la jème colonne (C(i, j)) est
défini comme suit :
0 si i = j
CM(i, j) = si i j et il n’existe pas un chemin de xi vers xj
min {f(Ch) / Ch est un chemin de xi vers xj}
2
II.2. Méthode de calcul
Théorème :
Soit un graphe valué G(V, E, p) et C la matrice des coût associé à G. Si Ck =Ck+1 alors
Ck présente la matrice des coûts minimum.
Exemple 1 :
Soit le graphe G et C la matrice des coûts associés à G, déterminer la matrice des coûts
minimum.
x2
1 2
x1 x4
3 4
x3
0 1 3
Matrice des coût C : C1 = (
0 2
0 4)
0
3
0 1 3 0 1 3
0
C2 = C1 x C1 = ( 2 0
) x ( 2)
0 4 0 4
0 0
min(0 + 0, 1 + , 3 + , + ) = 0 1 3 3
C2 = ( 0 2
0 4)
0
0 1 3 3
C3 = C2 x C2 = ( 0 2
0 4)
0
0 1 3 3
Matrice des coûts minimums C2 = ( 0 2
0 4)
0
Par exemple
3 : le coût du plus court
chemin de x1 à x4
Par exemple
Par exemple 4 : le coût du plus court
: pas de chemin de x4 a x1 chemin de x3 à x4
4
III. Algorithme de Ford
L’algorithme de Ford s’applique sur un réseau sans circuit absorbant. Il permet de chercher
le plus court chemin entre une source et une destination fixées.
Circuit absorbant : un circuit est dit absorbant s’il possède une valeur négative.
x4
-8
x2
4
x1 2
4
x3
Pour le chemin Ch1 = [ x1, x2], f(Ch1) = 4
Pour le chemin Ch2 = [ x1, x2, x3, x4, x2], f(Ch2) = 2
Pour le chemin Ch3 = [ x1, x2, x3, x4, x2, x3, x4, x2], f(Ch2) = 0
Pour le chemin Ch4 = [ x1, x2, x3, x4, x2, x3, x4, x2, x3, x4, x2], f(Ch2) = -2
Etc…
A chaque fois que l’on passe dans ce circuit, le coût total du chemin va être diminué de 2. Par
conséquent, le coût du chemin de x1 à x2 est égale - .
Rq : Si un graphe possède un circuit absorbant, alors il n’existe pas de plus court chemin entre
certains de ses sommets.
- Racine : Dans un graphe orienté G, un sommet v0 ∈ V est une racine s’il existe dans G un
chemin de v0 à v pour tout v∈V.
- Potentiel : Soit G = (V, E, p) un graphe sans circuit absorbant et admettant (ra) comme
racine.
Pour tout v ∈ V, π(v) ( le potentiel de v) : la longueur du plus court chemin de (ra) à v.
- Exemple x4
x1 est une racine
x2 8
4 π(x2) = 4 (le plus court chemin de x1 vers x2 est de longueur 4)
x1 2
π(x4) = 7 (le plus court chemin de x1 vers x2 est de longueur 4)
1
x3
5
III.2. Algorithme
Algorithme de Ford
Input : un graphe orienté valué G(V, E, p), sommet d’origine x0 et de destination xn-1
Output : Le plus court chemin de x0 vers xn−1
Numéroter les sommets du réseau dans un ordre quelconque à l’exception du sommet d’origine
x0 et du sommet destination xn−1
Initialisation des potentiels
π(x0) = 0
π(xj) = +∞, ∀ j ∈ {1,...,n−1};
i =0;
RE:
Tant que (i < n−1) faire
Pour (chaque arc a/ a= (xi, xj) ∈ E) faire
Si ( π(xj) > π(xi) + f(a) ) alors
π(xj) = π(xi) + f(a)
Si ( j < i ) alors
i=j
goto RE
Fin si
Fin si
Fin pour
i++
end
x2
8 1
4
x0 2 x4
x1 1 5
x3
Initialisation des potentiels (x2) = +
x2
(x1) = 0 (x2) = + 8 1 (x4) = +
4
x0 2 x4
x1
1 5
x3
(x3) = +
6
i=0<4
j=1
(x3) = +
x2
(x1) = 0 (x 2) = 4 8 1
4 (x5) = +
x0 2 x4
x1
1 5
x3
(x4) = +
i=1<4
j=2 j=3
(x3) = 12 (x3) = 12
x2 x2
(x1) = 0 (x2) = 4 (x1) = 0 (x2) = 4
8 1 8 1
4 (x5) = + 4 (x5) = +
x0 2 x4 x0 2 x4
x1 x1
1 5 1 5
x3 x3
(x4) = + (x4) = 5
i=2<4
j=4
(x3) = 12
x2
(x1) = 0 (x2) = 4
8 1
4 (x5) = 13
x0 2 x4
x1
1 5
x3
(x4) = 5
i=3<4
j=2
(x3) = 7
x2
(x1) = 0 (x2) = 4
8 1
4 (x5) = 13
x0 2 x4
x1
1 5
x3
(x4) = 5
j < i alors i =2
7
i=2<4
j=4
(x3) = 7
x2
(x1) = 0 (x2) = 4
8 1
4 (x5) = 8
x0 2 x4
x1
1 5
x3
(x4) = 5
i=3<4
j=4
(x3) = 7
x2
(x1) = 0 (x2) = 4
8 1
4 (x5) = 8
x0 2 x4
x1
1 5
x3
(x4) = 5
Rq : L’algorithme de Ford ne précise pas l’ordre du parcourt des arcs du graphe. C'est-à-
dire ne précise pas les éléments qui forme le plus court chemin de x vers y.
L’algorithme de Bellman permet de trouver les chemins de coût minimum entre une source
et tous les autres sommets dans un graphe sans circuit.
Algorithme de Bellman
input : un graphe orienté valué G(V, E, p) et un sommet source « s ».
output : Le plus court chemin entre « s » et « x » / x ∈ V - {s}.
Algorithme d’ordonnancement
Initialisation :
S = {s}
π(s) = 0
8
Rq :
- Si le nombre de sommet x ∈ S > 1, on choisit un sommet au hasard.
- Avant d’exécuter l’algorithme de Bellman il est convenable d’ordonnancer le graphe
par niveaux afin de faciliter l’exécution de l’algorithme. Cet algorithme nous permet de
savoir :
. Si le réseau contient un circuit ou non ?
. Avec quel sommet on commence ?
4 2 12
2 x5
x1 7 x6
1
2 8 2
20
x3 10 x4
Algorithme d’ordonnancement
X H PRED(X) k Niveau
x1 - 1
x2 x1 2
x3 x1, x2, x5 3
x4 x3, x5 4
x5 x1 2
x6 x2, x4, x7 5
x7 x2, x3 4
Graphe ordonné
x2 x7
10
4 2 2 12
2 1 x6
x1
x3 10
7 8 20
x5 2 x4
Niveau 1 2 3 4 5
9
Initialisation : source = x1
x2 x7
10
4 2 2 12
2 1 x6
x1
x3 10
π(x1) = 0 7 8 20
x5 2 x4
π(x2) = 4
x2 x7
10
4 2 2 12
2 1 x6
x1
x3 10
π(x1) = 0 7 8 20
x5 2 x4
π(x5) = 7
π(x2) = 4
x2 x7
10
4 2 2 12
2 1 x6
x1
8 x3 10
π(x1) = 0 7 π(x3) = 2 20
x5 2 x4
π(x5) = 7
10
π(x7) = min (π(x2)+10, π(x3)+1
= min (4+10, 2+1)
=3
π(x2) = 4 π(x7) = 3
x2 x7
10
4 2 2 12
2 1 x6
x1
8 x3 10
π(x1) = 0 7 π(x3) = 2 20
x5 2 x4
π(x5) = 7 π(x4) = 9
π(x2) = 4 π(x7) = 3
x2 x7
10
4 2 2 12
2 1 x6
x1
x3 10
π(x1) = 0 7 8 20 π(x6) = 6
x5 2 x4
π(x5) = 7 π(x4) = 9
11
IV. Algorithme de Dijkstra
x2 x7
10
4 2 12
2 x5
x1 7 x6
1
2 8 2
20
x3 10 x4
x1 x2 x3 x4 x5 x6 x7
0 ∞ ∞ ∞ ∞ ∞ ∞
x1 (4, x1), ∞ (2, x1), ∞ ∞ (7, x1), ∞ ∞ ∞
x3 (4, x1) (13, x3), ∞ (7, x1), ∞ ∞ (3, x3), ∞
x7 (4, x1) (13, x3), ∞ (7, x1), ∞ (15, x7), ∞
x2 (13, x3), ∞ (7, x1), ∞ (6, x2),(15, x7),∞
x6 (13, x3), ∞ (7, x1), ∞
x5 (6, x2), (13, x3), ∞
12