Algorithme de Ford
Algorithme de Ford
Chaque sommet d’une arborescence ( exceptée la racine ) possède exactement un prédécesseur ( la
racine n’en possède pas ). Si pour chaque sommet on connaît son prédécesseur, on connaît
l’arborescence. C’est donc une information suffisante pour la coder.
L’algorithme de Ford travaille directement sur le père de chaque sommet pour construire et modifier
l’arborescence.
procédure ford (G,s);
début
(s):=0;
père (s):= ;
C:= ;
pour tout x s faire
père (x):= ;
(x):=+
finpour;
pour tout x Γ +(s) faire
C:=C {(s,x)}
finpour;
tantque C faire
choisir (x,y) dans C;
ajuste_arborescence (x,y);
ajuste_candidat (x,y)
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/ford.htm (1 sur 2)15/07/2003 02:14:25
Algorithme de Ford
fintantque
fin;
Validité et terminaison de l’algorithme de Ford
Si G ne possède pas de circuit absorbant, la procédure ford (G,s) se termine et à l’issue de la
dernière itération, la fonction père définit une arborescence de coût minimum.
On peut montrer les deux invariants de boucles suivants :
1. Si (x) est fini, il existe un chemin élémentaire de s à x de coût (x).
2. La restriction de la fonction père aux sommets tels que soit fini définit une arborescence
partielle ( connexe mais ne touchant pas tout les sommets ) du graphe G et telle que, pour tout
sommet y différant de s, on a (père(y))+c(père(y),y)= (y), c’est-à-dire que (y) est le coût
du chemin de s à y dans l’arborescence.
L'algorithme de Ford peut dans certains cas atteindre des complexités exponentielles ( O(2n) ) quand
les mêmes arcs sont souvent candidats.
On dispose de deux variations sur l'algorithme de Ford pour obtenir une meilleur complexité.
Retour au sommaire Itération fondamentale Algorithme de Bellman
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/ford.htm (2 sur 2)15/07/2003 02:14:25
Algorithme de Bellman
Algorithme de Bellman
Définition
Tout graphe orienté sans circuit définit un ordre partiel sur ses sommets ( si un arc (i,j) appartient à
A, alors on a i<j ). Pour obtenir un ordre topologique on enrichie la relation d'ordre partielle jusqu'à
obtenir un ordre total, on numérote donc les sommets de 1 à n de sorte que, si (i,j) appartient à A,
alors le numéro du sommet i est strictement inférieur à celui du sommet j.
Pour construire un ordre topologique on numérote un sommet dès que tous ses prédécesseurs ont été
numérotés, cela donne un algorithme en O(n2).
Algorithme
procédure bellman (G,s);
début
delta (s):=0;
père (s):=vide;
pour i:=2 à n faire
delta (i):= ;
pour le sommet x qui minimise cette valeur faire
père (i):=x
finpour
finpour
fin;
Complexité
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/bellman.htm (1 sur 2)15/07/2003 02:13:43
Algorithme de Bellman
A l'itération i, il y a d-(i) calculs à faire, donc . C'est un algorithme en O(|A|)
( borné par O(n2) avec n désignant le nombre de sommets ).
Retour au sommaire Algorithme de Ford Algorithme de Dijkstra
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/bellman.htm (2 sur 2)15/07/2003 02:13:43
Algorithme de Dijkstra
Algorithme de Dijkstra
Le graphe est quelconque mais tous ses arcs ont des valuations positives.
Etats d'un sommet
Un sommet peut avoir trois états distincts :
- Non traité : (x)=+ .
- Ouvert : (x)<+ mais x n'a pas encore été sélectionné pour mettre à jour ses successeurs.
- Fermé : il a été sélectionné pour mettre à jour ses successeurs.
Algorithme
procédure dijkstra (G,s);
début
(s):=0;
pour x s faire
(x):=+ ;
pour tout x appartenant à Γ +(s) faire
(x):=v(s,x);
père (x):=s
finpour
finpour;
pour i:=1 à n-1 faire
choisir un sommet x ouvert de valeur (x) minimale;
pour tout z appartenant à +(x) avec (z)> (x)+v(x,z)
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/dijkstra.htm (1 sur 2)15/07/2003 02:14:12
1 / 9 100%