Chemin de longueur optimale

publicité
Chemin de longueur optimale
Graphe sans circuit
6
2
1
5
3
4
7
9
8
1
Résultat : Dans un graphe orienté sans circuit il existe
au moins un sommet de degré intérieur nul.
Mise en niveau d’un graphe sans circuit
- Prendre k =2, étiqueter par « 1 » les sommets ayant
un degrés intérieur nul.
- Tant qu’il y a des sommets non étiquetés, répéter les
deux étapes suivantes :
- Etiqueter par k tous les sommets n’ayant pas
un prédécesseur non étiqueté.
- Faire k=k+1
EXEMPLE
Résultat de la mise en niveau
2
2
5
6
3
2
1
3
4
5
7
9
6
1
4
5
8
7
2
2
6
7
1
3
9
5
8
4
1
2
3
4
5
6
7
Niveaux
Ordre topologique
X={x1,x2, ….., xn} l’ensemble des sommets du graphe
sans circuit G.
L’ordre xi1, xi , ….., xin sera dit ordre topologique
Si pour tout arc xil xik de G Alors l<k
2
N.B. Si on commence par étiqueter les sommets par
l’algorithme de mise en niveau et puis on numérote
les sommets des niveaux consécutifs, on obtient un
ordre topologique.
3
Graphe valué
G=(X,U) est un graphe
A chaque arc u de U est associée une valeur l(u)
réelle.
Graphe Valué
Ainsi étant donné un chemin de G
µ= [u1, u2,…., up] on définit sa longueur par :
L(µ) = l(u1)+l(u2)+….+l(up )
3 problèmes se posent
P1 - Étant donné 2 sommets x0 et xn de X, déterminer un
plus court (long) chemin entre x0 et xn.
P2 - Étant donné un sommet x0 de X, déterminer un plus
court (long) chemin de x0 à tout autre sommet de X.
P3 - Déterminer un plus court (long) chemin entre tout
couple de sommets de X.
Condition nécessaire pour l’existence d’un chemin de
longueur «optimale» entre deux sommets xi et xj est qu’il
n’existe pas un chemin entre xi et xj contenant un circuit
absorbant.
Pour la recherche d’un plus court (resp. long) chemin, un
circuit C sera dit absorbant si L(C)<0 (resp. L(C)>0).
4
Algorithme de Ford (Problème P2)
G=(X,U) un graphe valué avec X={x0,x1,x2, ….., xn}
Déterminer la longueur du plus court chemin de x0 à tout
autre sommet xi de G
On associe à tout sommet xi une pondération λi
Initialisation : Prendre λ0 =0 et
λi= ! pour tout i ! 0.
Itération de base: Étant donné l’arc xi xj de G
Si λi+l(xi xj ) < λj Alors faire λj= λi+l(xi xj)
Répéter l’itération de base jusqu’à la stabilisation de
toutes les pondérations λi.
Remarque 1. On démontre qu’à la fin de l’algorithme, la
pondération λi représente la longueur du plus court chemin du
sommet x0 au sommet xi. En plus, ce résultat est valable
indépendamment des signes des valeurs des arcs.
Remarque 2. Si on effectue à l’initialisation # i = !" et on
remplace la condition de l’itération de base par :
« Si λi+l(xi xj ) > λj Alors faire λj= λi+l(xi xj) »
λi représentera alors la longueur du plus long chemin.
Remarque 3. L’algorithme de Ford est général, mais ne
précise pas l’ordre du parcourt des arcs du graphe. Le parcourt
des arcs de G peut se réaliser en visitant tous les sommets de
G (dans un ordre donné) et puis en parcourant les arcs
incidents vers l’extérieur (ou l’intérieur) de chaque sommet
visité.
L’efficacité de cet algorithme dépend de l’ordre de visite
des sommets de G.
5
Cas d’un graphe sans circuit
Remarque : Si x0 est un point entré de G et si l’on
parcourt les sommets de G dans un ordre
topologique, les pondérations se stabilisent à la fin
du premier parcourt.
L’algorithme de FORD devient :
- Prendre λ0 = 0
- Parcourir les sommet de G suivant un ordre
topologique. Pour chaque sommet xi visité faire
"i = MIN
( "k + l(x k & x i ))
%
x k #$ (x i )
Prédécesseurs de xi
!
Algorithme de DIJKSTRA
Valable lorsque les valuations des arcs sont positives.
Étant
un sous ensemble A de sommets.
Etape 0 Prendre A=X, λ0=0 et λi= ! pour tout i ! 0.
Etape 1. Soit i0 ! A tel que
! i0 = MIN ! j
x j"A
Etape 2. Faire A = A-{xi0}, Si A= Φ Alors FIN.
Etape 3. pour tout arc xi0 ! x j avec x j ! A
Faire
" j = MIN (" j , "i0 + l ( xi0 ! x j ))
Revenir à l’étape 1.
Remarque : Il n’est pas possible de transformer cet algorithme en un
algorithme pour la détermination les longueurs des plus longs chemins.
6
Détermination des chemins optimaux
Afin de déterminer les chemins optimaux, on modifie l’algorithme de Ford
de la manière suivante :
- Définir un tableau : TAB [0..n] de type entier ; prendre TAB[0]=0;
- L’itération de base devient : étant donné l’arc xi xj de G
Si λi+l(xi
xj ) < λj Alors faire {λj= λi+l(xi
xj) ; Tab[j]=i}
La procédure qui permet de trouver le chemin optimal de x0 à xi s’écrit:
Définir k entier ; prendre k=i ;
Tant que k ! Tab[k] faire
Imprimer xk
fin Tant que
Imprimer x0 ;
Cette procédure liste les sommets du chemin optimal dans le sens inverse
de xi à x0
Méthode matricielle
(Recherche des plus courts chemins entre tout couple de
sommet de G)
Construire une suite de matrice (n !n) M0, M1, …, Mn
k
On note par vij
les éléments de la matrice Mk.
Initialisation : Prendre
% l(x " x j ) si x i " x j # U
v ij0 = & i
$ sinon
'
Calcule des éléments de Mk à partir de ceux de Mk-1 :
Pour k = 1 à n calculer les éléments de Mk par :
k"1
k"1
v kij = MIN( v k"1
ij , v ik + v kj )
n
ij
!
Remarque : ! représente la longueur du plus court
chemin! de xi à xj dans G
7
Téléchargement