Vous êtes sur la page 1sur 42

Ecole Nationale d’Electronique et des Télécommunications A. U.

2019-2020

Théorie des graphes


Auditoire : 1 GT

Chapitre 4 : Les Arbres

I. Définition d’un arbre

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

T1(V1, E1) T2(V2, E2) T3(V3, E3)

Forêt ; F(Vf, Ef)

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

Exemple : présenter le graphe T suivant par niveau :

v1 v4

v2 v5

v3 v6

v2 v5

v1 v3 v2
v5
v1 v3

v4 v6 v4 v6

2
III.1. Propriétés

1. Le nœud racine de l’arbre n’admet pas de parents : v1 est la racine du graphe

2. Une feuille est un sommet sans fils : v8, v3 , v7 et v6 sont des feuilles

Rq : les feuilles sont toujours de degrés 1

Une Racine
v1

v2 v4
v3

v5 v6 v7

v8
Des Feuilles

3. Des nœuds sont frères s’ils ont le même parent.

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

5. La hauteur h(T) de l'arbre T est la longueur de la plus longue branche : H(T) = 3

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

Arbre ternaire (k=3) Arbre quaternaire (k=4)

Un arbre k-aire est dit complet (ou saturé) si tous ses nœuds ont k fils sauf les feuilles.
v1

v2 v3 v4

v5 v6 v7 v8 v9 v10 v11 v12 v13


Arbre ternaire complet

Propriété :
Dans un arbre k-aire complet, toutes les branches ont la même longueur

III.3. Arbre binaire


Un arbre est dit binaire si chaque nœud a au plus 2 fils.
Un arbre binaire complet si tous ses nœuds ont 2 fils, sauf les feuille (0 Fils).

v1

v2 v3

v4 v5 v6 v7

Arbre binaire Complet

4
Niveau 0 : Nombre de nœud = 1 = 2(1-1)

Niveau 1 : Nombre de nœud = 2 = 2(2-1)

Niveau 2 : Nombre de nœud = 4 = 2(3-1)

Niveau 3 : Nombre de nœud = 8 = 2(4-1)

Propriété :
Pour un arbre binaire complet

1. Le nombre de nœuds au niveau p est égal à 2p

2. Le nombre de feuilles est donc 2(h−1) , avec h le nombre de niveaux

3. Le nombre total de nœuds d’un arbre binaire complet de h niveaux est


ℎ−1

𝑁𝑏𝑟 𝑛𝑜𝑒𝑢𝑑 = ∑ 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)

V.2. Algorithmes de recherche d’un arbre couvrant minimum


Il existe principalement deux algorithmes de recherche glouton pour trouver l’arbre couvrant
de poids minimum

- Algorithme de Kruskal

- Algorithme de Prim

V.2.1. Algorithme de Kruskal (1956)

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 :

Input : soit le graphe connexe G(V, Egraphe, p) d’ordre 6 ( |V| = 6)


v1
5 10
1
v3
v2 5
3 2 v6
v5
4 5 4
v4

Output : arbre couvrant minimum A(V, Earbre, p) de G de taille 5 ( |Earbre | = |V| -1 = 5) et


d’ordre 6

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

On passe à l’itération suivante

6eme itération

a = (v1, v3) avec a EgrapheTriée v1


| Earbre | = 4 <= 5 5 10
1
v3
{(v1, v2), (v5, v6), (v2, v5), (v2, v4)}∪ (v1, 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), (v1, v3)} v4

7eme itération

a = (v3, v5) avec a EgrapheTriée


| Earbre | = 5 <= 5

Alors l’algorithme s’arête

Output : arbre couvrant minimum A(V, Earbre, p) de G de taille 5 ( |Earbre | = |V| -1 = 5) et


d’ordre 6 v1
5
1
v3
v2
3 2 v6
v5
4
v4

9
V.2.1. Algorithme de PRIM (1957)

L’algorithme de PRIM permet de choisir aléatoirement un sommet, puis à chaque itération


il ajoute l’arête sortante de l’un des sommets sélectionnés portant le poids minimum et ne
formant pas un cycle. L’algorithme s’arrête lorsque tous les sommets du graphe sont
sélectionnés.

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 :

Input : soit le graphe connexe G(V, Egraphe, p) d’ordre 6 ( |V| = 6)


v1
5 10
1
v3
v2 5
3 2 v6
v5
4 5 4
v4
Output : arbre couvrant minimum A(V, Earbre, p) de G de taille 5 ( |Earbre | = |V| -1 = 5) et
d’ordre 6
Choisir aléatoirement un sommet s  V : s = v5
v1
5 10 s = v5
1
v3 Varbre = { v5 }
v2 5
3 2 Earbre =Ø
v6
v5
4 5 4
v4

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

Théorie des graphes

Auditoire : 1GRT

Chapitre 4 : Algorithmes de recherche des plus courts chemins

I. Introduction

Le problème du plus court chemin consiste à déterminer le chemin de coût minimum du


nœud x vers le nœud y.
Ce problème a des nombreuses applications comme par exemple :
- Routage dans des réseaux de télécommunications
- Trouver le moyen le plus économique pour aller d’une ville a une autre, connaissant
pour chaque ligne aérienne le prix de billet d'avion.
- Les problèmes d'optimisation de réseaux routiers et de réseaux ferrovier
Pour chercher tous les chemins et à trouver le chemin le plus courts on peut parcourir tout le
graphe. Cette solution n’est réalisable que pour un petit nombre de sommet, car le temps de
recherche croît d’une manière exponentielle si le nombre de sommet augmente. Ce problème
sera considéré comme un problème NP-Complet

Temps de recherche du plus court chemin

Nombre de sommet

Pour résoudre ce problème, il existe principalement les algorithmes suivant :

1. Méthode de Maria Hasse

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.

La méthode de Maria Hasse consiste à calculer la matrice du coût minimum à partir de la


matrice des coûts.

II.1. Quelques Définitions


- Coût du chemin f(Ch) :Le coût d’un chemin Ch = [x1, x2, …, xm] est la somme des
coûts des arcs qui le forment :
f(Ch) = ∑𝒌𝒊=𝟏 𝒇(𝒙𝒊−𝟏 , 𝒙𝒊 )

Rq : Si un chemin contenant un seul sommet (Ch = [xi]), alors ce chemin est de longueur 0 et
f(Ch) =0.

- Chemin minimum : Le chemin minimum est le chemin le court de xi vers xj


f(Ch) = minβ {f(β)/ β est un chemin de xi vers xj}

- 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

Soit R le résultat de la multiplication habituelle de deux matrice C :

R(i, j) = ∑𝑛𝑘=1 𝐶(𝑖, 𝑘) × 𝐶(𝑘, 𝑗) et RP(i, j) = ∑𝑛𝑘=1 𝐶 𝑝−1 (𝑖, 𝑘) × 𝐶(𝑘, 𝑗)

Maria Hasse a proposé un nouveau produit matriciel en remplaçant l’addition et la


multiplication des réels respectivement par + et ×
a + b = min (a, b)
a × b =a+b

Le résultat de la multiplication de deux matrice C est de la forme suivante :


n n
R(i, j) = + (𝐶(𝑖, 𝑘) × 𝐶(𝑘, 𝑗)) et RP(i, j) = + (𝐶 𝑝−1 (𝑖, 𝑘) × 𝐶(𝑘, 𝑗))
k=1 k=1
R(i, j) = mink{1, …, n}(𝐶(𝑖, 𝑘), 𝐶(𝑘, 𝑗)) et R (i, j) = mink{1, …, n}(𝐶 𝑝−1 (𝑖, 𝑘), 𝐶(𝑘, 𝑗))
P

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

C2 ≠ C1 alors C1 n’est pas la matrice des coût minimums alors

0 1 3 3
C3 = C2 x C2 = ( 0  2
  0 4)
   0

C3 = C2 alors C2 est la matrice des coûts minimums

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.

III.1. Quelques Définitions

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

Exemple : Déterminer le plus court chemin de x0 vers tout sommet du graphe

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.

IV. Algorithme de Bellman

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

Tant que (∀ x ∈ S / tous les prédécesseurs de x ∈ S ) do


π(x) = min a∈E/T(a)=x) = π(I(a)) + f(a)
S = S union {x}
Fin Tant que
Fin

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 ?

Soit le graphe G(V, E, p) suivant :


x2 x7
10

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

π(x3) = min (π(x2)+2, π(x5)+8, π(x1)+2)


= min (4+2, 7+8, 2)
=2

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

π(x7) = min (π(x3)+10, π(x5)+2


= min (2+10, 7+2)
=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

π(x6) = min (π(x7)+12, π(x2)+2, π(x4)+2)


= min (3+12, 4+2, 9+20)
=6

11
IV. Algorithme de Dijkstra

L'algorithme de Dijkstra « Dextra » est un algorithme de recherche du plus court/long chemin


entre deux sommets d'un graphe. L’algorithme de Dijkstra ne peut être appliqué que si tous
les arcs ont des valeurs positives. c.à.d : ∀a∈A , f(a) ≥ 0.
L’algorithme de Dijkstra est appliqué sur des graphes orientés ou non orientés.

Construction d’un tableau : On construit un tableau de n colonnes (n = l’ordre du graphe)


Initialisation de la 1ere ligne : 0 : dans la colonne source,
∞ : dans les autres colonnes
Itération : A chaque itération on choisit le plus petit résultat de la dernière ligne.
Reconstituer le trajet : trouver le trajet en sens inverse en « remontant » dans le tableau

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

Vous aimerez peut-être aussi