Chapitre 3 Problème du plus court chemin

publicité
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
Chapitre 3 Problème du plus court chemin
1. Introduction
Les problèmes de cheminement dans les graphes comptent parmi les plus anciens
problèmes de la théorie des graphes. Il existe de nombreux problèmes spécifiques aux
chemins. On en cite quelques uns :
1) Soient i et j ∈ X :
-
Existe-t-il au moins un chemin de i à j ?
-
Existe-t-il au moins un chemin de longueur p entre i et j ?
-
Quel est le nombre de chemins de longueur inférieure ou égale à p entre i
et j ?
2) Trouver le ou les chemins qui relient le sommet s à tous les autres sommets et
qui satisfont une propriété P.
3) Trouver les chemins qui relient tout couple de sommets et qui satisfont une
propriété P.
2. Introduction au problème du plus court chemin
Etant donné un graphe G=(X,A) orienté tel que chaque arc (i,j) possède un nombre
(i,j) appelé longueur de l’arc (i,j). Le problème du plus court chemin (PCC) consiste à
déterminer un chemin élémentaire Ch joignant les sommets i et j et qui soit de longueur
extrémale (minimale ou maximale selon l’objectif). La longueur du chemin optimal est
égale à la somme des longueurs des arcs du chemin.
On considère d’une manière plus générale deux types de problèmes :
-
Problème P1 : Il s’agit de trouver le plus court chemin reliant un sommet à tous
les autres.
-
Problème P2 : il s’agit de trouver tous les plus courts chemins entre tous les
couples de sommets.
4. Algorithmes proposés pour trouver le PCC
Pour la résolution du problème du plus court chemin, divers algorithmes de
complexité en temps polynomial ont été proposés. Leur application dépend souvent de la
nature du graphe.
17
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
Si l’on considère un problème de type P1, on a le choix entre Les algorithmes de
Dijkstra et de Bellman–Ford. Lorsque le graphe ne comporte pas de cycle, on utilise
généralement l’algorithme de Bellman–Ford. Lorsque les longueurs des arcs sont toutes
positives, on utilise l’algorithme de Djikstra.
Pour les problèmes de type P2, on a également le choix entre deux algorithmes :
l’algorithme de Dantzig et celui de Floyd-Warshall qui sont des algorithmes matriciels
applicables quelque soient les longueurs des arcs.
4.1 Résolution de problèmes de type P1
Dans cette section sont présentés les algorithmes suivants : l’algorithme de Djikstra
et l’algorithme de Bellman-Ford.
4.1.1 Algorithme de Djikstra
Comme l’algorithme de Bellman-Ford, il utilise le principe de la programmation
dynamique. Mais contrairement à ce dernier, l'algorithme de Djikstra ne permet pas de
considérer les arcs négatifs, car une fois qu’un sommet est marqué on ne peut changer ce
marquage lors des itérations suivantes.
Algorithme : Djikstra (G,s)
Etape 1 : initialisation
Soit s ∈ X /*sommet de départ*/
Soit "(x) : le label de x ou la longueur du pcc de s à x à l’étape i
Xm ← ∅ ; "(s) ← 0 ; /* Xm est l’ensemble des sommets marqués*/
∀ / ∈ 0 – 234 "(x) = ∞;
Am ←∅; /* Am est l’ensemble des arcs du PCC */
Etape 2 : Traitement
Tant que Card( Xm ) < n Faire
x ← Min (L(x)) ∀ / ∈ 0 –Xm /*Choisir x de plus petit label parmi les
sommets non marqués */
Xm ← Xm ∪ 2x4 ; /*marquer x */
Am ← Am ∪ 2(pred(x), x)4 ; /*marquer l’arc de provenance du min*/
Pour tout y ∈ Voisins(x) et y ∉ Xm Faire
"(y) = Min("(y), L(x)+ d(x,y)) ;
Fin pour
Fin tant que
Etape 3 : Résultat
Am contient les arcs du PCC
"(x) est la longueur du PCC
Fin
18
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
4.1.2 Algorithme de Bellman-Ford
L’algorithme de Bellman-Ford utilise le principe de la programmation dynamique
pour déterminer le plus court chemin dans un graphe orienté pondéré. Il est applicable
même dans le cas où certains arcs ont une longueur négative.la seule contrainte est que le
graphe ne doit pas comporter de circuits.
Algorithme : Bellman-Ford (G,s)
Etape 1 : initialisation
/*sommet de départ*/
Soit s ∈ X
Soit "(x) : la longueur du pcc de s à x
/* Xm est l’ensemble des sommets marqués*/
Xm ← 2s4 ;
"(s) ← 0 ;
/* Am est l’ensemble des arcs du PCC */
Am ←∅;
Etape 2 : Traitement
Tant que Card( Xm ) < n Faire
Si il ∃ y ∈ X-Xm / pred(y) ⊂ Xm Alors
Xm ← Xm ∪ {y} ; /*marquer y*/
"(y) ← KLMN ∈OPQR(S) ("(T) + U(T, V));
Am ← Am ∪ {(z,y)} ;
/*marquer l’arc du min*/
Fin si
Fin tant que
Etape 3 : Résultat
Am contient les arcs du PCC
"(x) est la longueur du PCC
Fin
19
Téléchargement