Algorithme de Ford Chaque sommet d`une arborescence

publicité
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
( borné par O(n2) avec n désignant le nombre de sommets ).
Retour au sommaire
Algorithme de Ford
. C'est un algorithme en O(|A|)
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
Algorithme de Dijkstra
faire
∆ (z):=∆ (x)+v(x,z);
père (z):=x
finpour;
fermer x
finpour
fin;
Complexité
Choisir un sommet de valeur minimale se fait en O(n) et la mise à jour des successeurs se fait en O(d
+(i)), d'où une complexité globale en O(n2+m) avec m=d+(i).
On implémente cet algorithme à l'aide d'un tas pour gérer les sommets ouverts.
Quand un sommet est fermé, il est retiré du tas : O(1).
Quand un sommet est ouvert, il est placé dans le tas : O(log2n).
La recherche d'un sommet de valeur minimale est immédiate : O(1).
La mise à jour des successeurs est en O(d+(i)× log2n).
D'ou une complexité globale en O(mlog2n+nlog2n).
Théorème
L’évaluation du sommet ouvert x choisit à chaque itération est le coût minimum d’un chemin de s à
x dans G.
Retour au sommaire
Algorithme de Bellman
Flots maximum
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/dijkstra.htm (2 sur 2)15/07/2003 02:14:12
Algorithme de Ford - Fulkerson
Algorithme de Ford-Fulkerson
L’idée est de déterminer un chemin de s à p sur lequel le flot peut être augmenté et d’itérer cette
recherche tant que possible.
Soit R un réseau et f un flot sur ce réseau. Le graphe d’état Gf=(S,Ef) est un graphe dont les arcs sont
valués par un vecteur v. Pour e∈ E, ( e=(i,j) ) :
●
●
si fe<ce, on construit dans le graphe d’écart un arc (i,j) valué par ce-fe.
si fe>0, on construit un arc (j,i) valué par fe.
Définition
A tout arc e=(i,j)∈ E correspond au plus deux arcs dans Gf.
●
●
L’arc (i,j) est dit conforme.
L’arc (j,i) est dit non conforme.
Soit µ un chemin de s à p dans Gf et α >0 la valeur minimale d’un arc de µ . Un tel chemin est dit
améliorant car on montre que le flot f peut être augmenté de α en effectuant l’algorithme suivant :
procedure augmenter_flot (f,µ );
debut
α :=min{v(e),e arc de µ };
pour chaque arc u∈ µ faire
soit e l’arc correspondant de E;
si u est un arc conforme alors
fe:=fe+α
sinon
fe:=fe-α
finpour;
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/fordfulkerson.htm (1 sur 3)15/07/2003 02:14:37
Algorithme de Ford - Fulkerson
f(p,s):=f(p,s)+α
fin;
Lemme
Si il existe un chemin améliorant dans Gf, le flot f n’est pas de valeur maximale.
Définition
Soit le graphe G initial et T un sous ensemble de sommets contenant s mais pas p. La coupe associée
à T est C=ω +(T). La valeur d’une coupe est définie par
.
Théorème ( Flot maximum/coupe minimale )
La valeur maximale d’un flot est égale a la valeur minimale d’une coupe.
Corollaire
Un flot f est maximum si et seulement s'il n’existe pas de chemin améliorant dans Gf.
Algorithme de Ford-Fulkerson
procedure ford_fulkerson (G,c,s,p);
debut
pour tout e appartenant à E faire
fe:=0
finpour;
tantqu’il existe un chemin améliorant dans Gf faire
soit µ un chemin améliorant dans Gf;
augmenter_flot (f,µ )
fintantque
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/fordfulkerson.htm (2 sur 3)15/07/2003 02:14:37
Algorithme de Ford - Fulkerson
fin;
Remarque
Si toute les capacités sont entières, l’algorithme de Ford-Fulkerson construit un flot maximum dont
toute les composantes sont entières.
Retour au sommaire
Réseaux et flots
Arbres couvrant de coût minimum
file:///D|/work/site%20-%20multimania/www/docs/structures%20de%20donnees/Graphes/fordfulkerson.htm (3 sur 3)15/07/2003 02:14:37
Téléchargement