Académique Documents
Professionnel Documents
Culture Documents
Objectif
Déterminer le plus court chemin allant du sommet origine « o » au sommet
destination « d »
H.SAMADI/RO/ENSATg
Il existe plusieurs applications du problème du (PCC), on cite par
exemple:
Réseau de transport
Réseau de télécommunication
• Algorithme de DIJKSTRA
• Algorithme de BELLMAN-FORD
H.SAMADI/RO/ENSATg
Algorithme de DIJKSTRA
Initialisation
K =0 : numéroter les sommets de 1 à n ( n est le nombre des sommets).
On note par E l’ensemble des sommets choisis
Dans ce cas E={1}
On pose : D[j]= P(1,j), j ∉ E , avec P(i,j) la longueur de l’arc (i,j) s’il existe
sinon P(i,j)=+ ∞ .
Itérations
Pour k= 1 à (n-1) faire :
2 3 4 1
1
8
1 5
2
2
2
3
5
H.SAMADI/RO/ENSATg
2
Tableaux de l’exemple 1
0 {1} 0 5 2 8 ∞
1 {1,3} 0 3 2 6 ∞
2 {1,3,2} 0 3 2 6 6
3 {1,3,2,4} 0 3 2 6 6
4 {1,3,2,4,5} 0 3 2 6 6
H.SAMADI/RO/ENSATg
Application 2
9
5 20
2 10
4
14 8 11
12
5 14
1 3 2
6 13
2
14 10
7 5
2
2
10 9
4 2
15
7 2
H.SAMADI/RO/ENSATg
Algorithme de Bellman-Ford
C’est une généralisation de l’algorithme de Dijkstra
(Ici le poid de l’arc (i,j) est de signe quelconque)
H.SAMADI/RO/ENSATg
Etapes de l’algorithme de BELLMAN
CNS d’existence d’un PCC
La non existence d’un circuit absorbant dans le graphe G ( un ciruit de longueur négative )
Initialisation
d(S0) 0 (S0 le sommet de départ)
Pour chaque sommet de G sauf (S0) faire d(s) +∞
Itérations
Pour i de 1 à( n-1) faire ( n le nombre de sommet de G)
Pour chaque sommet arc (i,j) de G faire
Comparer d(j) et d(i)+p(i,j)
d(j) min (d(j); d(i)+p(i,j))
H.SAMADI/RO/ENSATg
Application 1
Utiliser l’algorithme de Bellman pour trouver le plus court chemin entre A et F
du graphe suivant:
H.SAMADI/RO/ENSATg
Correction de l’application 1
Initialisation d(s) 0 ∞ ∞ ∞ ∞ ∞
1 0 (3 ;A) (4 ;A) ∞ ∞ ∞ A
Contrôle de 0 -3 4 -1 -1 0
Non existence
d’une boucle
négative
H.SAMADI/RO/ENSATg
Affichage du PCC
Entre A et E, on commence par la 4 ème itération avec la colonne E qui donne: (-1;B)
H.SAMADI/RO/ENSATg
Remarques:
H.SAMADI/RO/ENSATg
Application 2 : Fiabilité d’un circuit électronique
Réseau télécom
Dans un graphe G = (X, A), on associe à tout arc (i, j ) de A une "fiabilité" rij c'est à dire
une valeur comprise entre 0 et 1 : 0 < rij ≤ 1.
On définit la fiabilité d'un chemin P du graphe G, comme le produit des fiabilités des
arcs qui forment ce chemin :
Le problème est de déterminer le (ou les) chemin(s) de fiabilité maximale issus d'un
sommet source s vers tout autre sommet du graphe.
H.SAMADI/RO/ENSATg
Application 3: Réseau télécom
• On modélise ce problème à l’aide du graphe orienté et valué où le poids d’un arc est
une valeur réelle comprise entre 0 et 1 qui indique la probabilité pour que la
communication se passe sans problème.
• Quel est le chemin le plus fiable pour envoyer un message entre un émetteur et un
récepteur?
H.SAMADI/RO/ENSATg
Chercher la fiabilité maximale entre A et F du graphe suivant:
(Utiliser la fonction log pour se ramener à un PCC. On rappelle que pour 0<rij<=1, log
(rij)<=0)
0,8
B E
0,4 0,3
0,5 0,1
A 0,2
F
0,7
0,6
C D
0,2 C
H.SAMADI/RO/ENSATg
Implémentation sous Matlab de l’algorithme du plus court chemin : PCC
%Affichage du graphe%
H=plot(G,'EdgeLabel',graph.Edges.Weight);