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