a flot (raf) : g = (s, a)

Transcription

a flot (raf) : g = (s, a)
Flot maximum
Ahmed Bouajjani
ENS Cachan, Magistère STIC, 2004-05
Problème du flot maximum
• Réseau à flot (RAF) :
G = (S, A) un graphe orienté + c : A → R≥0 (capacité des arcs).
(On étend c à S 2 : c(u, v) = 0 pour (u, v) 6∈ A)
• Il existe 2 sommets particuliers, une source s et un puit t, tels que
∀u ∈ S − {s, t}. s ; u ; t
Problème du flot maximum
• Réseau à flot (RAF) :
G = (S, A) un graphe orienté + c : A → R≥0 (capacité des arcs).
(On étend c à S 2 : c(u, v) = 0 pour (u, v) 6∈ A)
• Il existe 2 sommets particuliers, une source s et un puit t, tels que
∀u ∈ S − {s, t}. s ; u ; t
• Un flot est une fonction f : S 2 → R satisfaisant les propriétés :
1. ∀u, v. f (u, v) ≤ c(u, v),
2. ∀u, v. f (u, v) = −f (v, u),
P
3. ∀u ∈ S − {s, t}, nous avons
v∈S f (u, v) = 0
P
• La valeur du flot f est définie par |f | = v∈S f (s, v)
Problème du flot maximum
• Réseau à flot (RAF) :
G = (S, A) un graphe orienté + c : A → R≥0 (capacité des arcs).
(On étend c à S 2 : c(u, v) = 0 pour (u, v) 6∈ A)
• Il existe 2 sommets particuliers, une source s et un puit t, tels que
∀u ∈ S − {s, t}. s ; u ; t
• Un flot est une fonction f : S 2 → R satisfaisant les propriétés :
1. ∀u, v. f (u, v) ≤ c(u, v),
2. ∀u, v. f (u, v) = −f (v, u),
P
3. ∀u ∈ S − {s, t}, nous avons
v∈S f (u, v) = 0
P
• La valeur du flot f est définie par |f | = v∈S f (s, v)
• Problème : Etant donnés G, c, s, et t, trouver un flot de valeur maximum.
Propriétés
Pour X, Y ⊆ S, on pose
f (X, Y ) =
X X
f (x, y)
x∈X y∈Y
Lemme 1 :
Etant donné RAF G = (S, A) et un flot f , on a
1. ∀X ⊆ S. f (X, X) = 0,
2. ∀X, Y ⊆ S. f (X, Y ) = −f (Y, X),
3. ∀X, Y, Z ⊆ S. X ∩ Y = ∅, nous avons
f (X ∪ Y, Z) = f (X, Z) + f (Y, Z)
f (Z, X ∪ Y ) = f (Z, X) + f (Z, Y )
Lemme 2 :
Etant donné un RAF G = (S, A) et un flot f , on a
|f | = f (S, t)
Propriétés (preuve du Lemme 2)
Lemme 2 :
Etant donné un RAF G = (S, A) et un flot f , on a |f | = f (S, t).
|f | =
=
=
=
=
=
f (s, S)
f (S, S) − f (S − {s}, S)
−f (S − {s}, S)
f (S, S − {s})
f (S, t) + f (S, S − {s} − {t})
f (S, t)
Capacité résiduelle, graphe résiduel
• G = (S, A), c une capacité, et f un flot,
• Capacité résiduelle d’un arc : cf (u, v) = c(u, v) − f (u, v)
• Graphe résiduel : Gf = (S, Af ) avec Af = {(u, v) ∈ S 2 : cf (u, v) > 0}
• Les arcs de Af sont soit des arcs de A, soit leurs inverses
• Si f (u, v) < c(u, v), alors cf (u, v) > 0, et donc (u, v) ∈ Af ,
• Si f (u, v) > 0, alors f (v, u) < 0, ⇒ cf (v, u) > 0, ⇒ (v, u) ∈ Af
• |Af | ≤ 2|A|
Augmentation de flot
Lemme 3 :
Soit Gf le graphe résiduel induit par le flot f , et soit f 0 un flot dans
Gf . Alors, la fonction f + f 0 est un flot dans G dont la valeur est
|f + f 0| = |f | + |f 0|.
(f + f 0)(u, v) =
≤
=
=
f (u, v) + f 0(u, v)
f (u, v) + cf (u, v)
f (u, v) + c(u, v) − f (u, v)
c(u, v)
(f + f 0)(u, v) = f (u, v) + f 0(u, v)
= −f (v, u) − f 0(v, u)
= −(f + f 0)(v, u)
···
Chemin augmentant
• Un chemin augmentant est un chemin de s à t dans Gf
• Soit p un chemin augmentant. La capacité résiduelle de p :
cf (p) = min{cf (u, v) : (u, v) ∈ p}
Lemme 4 :
Soit f un flot dans G, et soit p un chemin augmentant dans Gf . On
considère la fonction fp : S 2 → R telle que :
fp = cf (p) si(u, v) ∈ p
= −cf (p) si(v, u) ∈ p
= 0 sinon
Alors, la fonction fp est un flot dans Gf avec |fp| = cf (p) > 0.
Augmentation de flot (suite)
Corollaire 1 :
Soit f un flot dans G et Gf le graphe résiduel induit par f . Soit p un
chemin augmentant dans Gf , et soit la fonction f 0 = f + fp. Alors, la
fonction f 0 est un flot dans G avec |f 0| = |f | + |fp| > |f |.
Immédiat à partir des 2 lemmes précédents.
Coupure
• Coupure (U, V ) : U ⊆ S, V = S − U avec s ∈ U et t ∈ V .
• Soit f un flot. Le flot à travers (U, V ) est f (U, V ).
• La capacité de la coupure (U, V ) est c(U, V ).
Lemme 5 :
Soit G un RAF, soit f un flot de G, et soit (U, V ) une coupure de G.
Alors, le flot à travers (U, V ) est f (U, V ) = |f |.
f (U, V ) =
=
=
=
=
f (U, S) − f (U, U )
f (U, S)
f (s, S) + f (U − {s}, S)
f (s, S) (f (U − {s}, S) = 0 conservation de flot)
|f |
Coupure (suite)
Lemme 5 :
Soit G un RAF, soit f un flot de G, et soit (U, V ) une coupure de G. Alors, le flot à
travers (U, V ) est f (U, V ) = |f |.
Corollaire 2 :
Pour tout flot f et toute coupure (U, V ) de G, nous avons |f | ≤ c(U, V ).
Soit (U, V ) une coupure de G et soit f un flot. On a :
|f | = f (U, V )
XX
=
f (u, v)
≤
u∈U v∈V
X
X
u∈U v∈V
= c(U, V )
c(u, v)
Théorème flot-max coupure-min
Thm 1:
Soit f un flot dans un réseau de flot G. Alors les trois conditions suivantes
sont équivalentes :
1. f est un flot maximum dans G
2. Le graphe résiduel Gf n’a pas de chemin augmentant
3. |f | = c(U, V ) pour une certaine coupure (U, V ) de G
Théorème flot-max coupure-min (preuve)
Thm 1:
Soit f un flot dans un réseau de flot G. Alors les trois conditions suivantes sont
équivalentes :
1. f est un flot maximum dans G
2. Le graphe résiduel Gf n’a pas de chemin augmentant
3. |f | = c(U, V ) pour une certaine coupure (U, V ) de G
• (1) ⇒ (2): Si p est un chemin augmentant dans Gf , alors Coro 1 ⇒ |f + fp| est un flot
de G avec |f + fp| > |f |. Contradiction.
• (2) ⇒ (3): Soit U = {u ∈ S : s ;Gf u}, et soit V = S − U .
– (U, V ) est une coupure (t 6∈ V puisque il n’existe pas de chemin de s à t)
– ∀u ∈ U. ∀v ∈ V. f (u, v) = c(u, v) : sinon (u, v) ∈ Af et on aurait alors v ∈ U .
– Lemme 5 ⇒ |f | = f (U, V ) = c(U, V ).
• (3) ⇒ (1): Coro 2 ⇒ |f | ≤ c(U, V ) pour toute coupure (U, V ). On a alors : |f | = c(U, V )
implique f est un flot max.
Algorithme de Ford-Fulkerson
Ford-Fulkerson(G, s, t) =
pour tout (u, v) ∈ A faire
f [u, v] ← 0 ; f [v, u] ← 0
tant que il existe un chemin p dans Gf entre s et t faire
cf (p) ← min{cf (u, v) : (u, v) ∈ p}
pour tout (u, v) ∈ p faire
f [u, v] ← f [u, v] + cf (p)
f [v, u] = −f [u, v]
Complexité : O(A|f ∗|) où f ∗ est le flot max.
Algorithme de Edmonds-Karp
Edmonds-Karp = Ford-Fulkerson + choix du chemin augmentant le plus court
Thm 2:
Le nombre total des opérations d’augmentation de flot effectuées par
l’algorithme de EK est en O(SA)
Algorithme de Edmonds-Karp
Edmonds-Karp = Ford-Fulkerson + choix du chemin augmentant le plus court
Thm 2:
Le nombre total des opérations d’augmentation de flot effectuées par
l’algorithme de EK est en O(SA)
Corollaire :
Le temps d’exécution de l’algorithme de Edmunds-Karp est en O(SA2).
Chaque opération peut être faite en O(A) en utilisant le BFS
Complexité de Edmonds-Karp
Lemme 6 :
Au cours de l’exécution de EK sur G, pout tout sommet v ∈ S − {s, t}, la distance
δf (s, v) de v à s dans le graphe Gf croit avec chaque augmentation de flot.
• Supposons qu’il existe une augmentation de flot causant la diminution de la distance à s
pour un certain sommet v ∈ S − {s, t},
• Soit f le flot juste avant cette augmentation de flot, et soit f 0 le flot juste après,
• Soit v le sommet avec δf 0 (s, v) minimum parmi les sommets dont la distance a diminué par
l’opération. (On a δf 0 (s, v) < δf (s, v).)
• Soit p = s ; u → v le plus court chemin de s à v dans Gf 0 . On a δf 0 (s, u) = δf 0 (s, v) − 1.
• Choix de v ⇒ distance de u n’a pas diminué. On a δf 0 (s, u) ≥ δf (s, u).
Complexité de Edmonds-Karp
Lemme 6 :
Au cours de l’exécution de EK sur G, pout tout sommet v ∈ S − {s, t}, la distance
δf (s, v) de v à s dans le graphe Gf croit avec chaque augmentation de flot.
• Supposons qu’il existe une augmentation de flot causant la diminution de la distance à s
pour un certain sommet v ∈ S − {s, t},
• Soit f le flot juste avant cette augmentation de flot, et soit f 0 le flot juste après,
• Soit v le sommet avec δf 0 (s, v) minimum parmi les sommets dont la distance a diminué par
l’opération. (On a δf 0 (s, v) < δf (s, v).)
• Soit p = s ; u → v le plus court chemin de s à v dans Gf 0 . On a δf 0 (s, u) = δf 0 (s, v) − 1.
• Choix de v ⇒ distance de u n’a pas diminué. On a δf 0 (s, u) ≥ δf (s, u).
• On montre que (u, v) 6∈ Af : Car sinon on aurait
δf (s, v) ≤ δf (s, u) + 1
≤ δf 0 (s, u) + 1
= δf 0 (s, v)
Complexité de Edmonds-Karp
Lemme 6 :
Au cours de l’exécution de EK sur G, pout tout sommet v ∈ S − {s, t}, la distance
δf (s, v) de v à s dans le graphe Gf croit avec chaque augmentation de flot.
• Supposons qu’il existe une augmentation de flot causant la diminution de la distance à s
pour un certain sommet v ∈ S − {s, t},
• Soit f le flot juste avant cette augmentation de flot, et soit f 0 le flot juste après,
• Soit v le sommet avec δf 0 (s, v) minimum parmi les sommets dont la distance a diminué par
l’opération. (On a δf 0 (s, v) < δf (s, v).)
• Soit p = s ; u → v le plus court chemin de s à v dans Gf 0 . On a δf 0 (s, u) = δf 0 (s, v) − 1.
• Choix de v ⇒ distance de u n’a pas diminué. On a δf 0 (s, u) ≥ δf (s, u).
• On montre que (u, v) 6∈ Af .
• (u, v) 6∈ Af et (u, v) ∈ Af 0 ⇒ le flot de v à u a augmenté
• ⇒ le plus court chemin de s à u dans Gf utilise l’arc (v, u)
• Donc
δf (s, v) = δf (s, u) − 1
≤ δf 0 (s, u) − 1
= δf 0 (s, v) − 2
Complexité de Edmonds-Karp (suite)
Thm 2:
Le nombre total des opérations d’augmentation de flot par EK est en O(SA)
• Soit p un chemin augmentant dans Gf . Un arc (u, v) ∈ p est critique si cf (p) = cf (u, v).
• Soit u, v ∈ S tels que (u, v) ∈ A.
• Chemin augmentant = chemin plus court ⇒ quand (u, v) est critique pour la 1ere fois:
δf (s, v) = δf (s, u) + 1
• Après l’augmentation de flot, (u, v) disparait. Il réapparait si (v, u) est dans un chemin
augmentant. Soit f 0 le flot dans G à ce moment là. On a : δf 0 (s, u) = δf 0 (s, v) + 1
• On a donc :
δf 0 (s, u) = δf 0 (s, v) + 1
≥ δf (s, v) + 1 (Lemme 6)
= δf (s, u) + 2
• Entre 2 moments où (u, v) est critique, δf (s, u) croit d’au moins 2
• On a toujours 0 ≤ δf (s, u) ≤ |S| − 2, ou éventuellement δf (s, u) = ∞
• (u, v) est critique au plus O(S) fois ⇒ nb d’arcs critiques en O(SA)
• Chaque chemin augm. a au moins un arc critique ⇒ nb d’op. augm. en O(SA)
Préflots
• G = (S, A) un RAF. Un préflot est une fonction f : S 2 → R telle que
1. ∀u, v. f (u, v) ≤ c(u, v),
2. ∀u, v. f (u, v) = −f (v, u),
3. ∀u ∈ S − {s}. f (S, u) ≥ 0
• Soit e(u) = f (S, u) l’excés de flot en u
• Un sommet u ∈ S − {s, t} est débordé si e(u) > 0
(Rem: par définition s et t ne sont jamais débordés)
Algorithmes Push-Relabel - opérations de base
• G = (S, A) un RAF, une source s et un puit t, f un préflot dans G
• Une fonction de hauteur est une fonction h : S → N telle que h(s) = |S|,
h(t) = 0, et ∀(u, v) ∈ Af . h(u) ≤ h(v) + 1.
Push(u, v) =
(Précondition: e[u] > 0, cf (u, v) > 0, et h[u] = h[v] + 1)
(Effet: Ajoute df (u, v) = min(e[u], cf (u, v)) au flot de u à v)
df (u, v) ← min(e[u], cf (u, v))
f [u, v] ← f [u, v] + df (u, v) ; f [v, u] = −f [u, v]
e[u] ← e[u] − df (u, v) ; e[v] ← e[v] + df (u, v)
Relabel(u) =
(Précondition: e[u] > 0 et ∀(u, v) ∈ Af . h[u] ≤ h[v])
(Effet: Augmente la hauteur de u)
h[u] ← 1 + min{h[v] : (u, v) ∈ Af }
Un Algorithme Générique
Initialiser-Préflot(G, s) =
pour tout u ∈ S faire
h[u] ← 0 ; e[u] ← 0
h[s] ← |S|
pour tout (u, v) ∈ A faire
f [u, v] ← 0 ; f [v, u] ← 0
pour tout u ∈ Adj(s) faire
f [s, u] ← c(s, u) ; f [u, s] ← −c(s, u)
e[u] ← c(s, u) ; e[s] ← e[s] − c(s, u)
Push-Relabel-Générique(G) =
Initialiser-Préflot(G, s)
tant que il est possible d’appliquer une opération Push ou Relabel faire
choisir une opération appliquable est l’exécuter
Correction de l’algorithme Push-Relabel (préliminaires)
Lemme 1: u est débordé ⇒ soit Push soit Relabel est applicable à u.
Lemme 2: ∀u ∈ S, h[u] ne décroit jamais au cours de l’exécution. De
plus, à chaque appel de Relabel(u), h[u] croit d’au moins 1.
Lemme 3: La propriétée “h est une fonction de hauteur” est invariante.
– Initialement, h est une fonction de hauteur.
– h[s] = |S| et h[t] = 0 est invariante: s et t ne sont jamais débordés (par def).
– Relabel(u) maintient la propriété:
∗ Soit (u, v) ∈ Af . Relabel(u) assure h[u] ≤ h[v] + 1.
∗ Soit (v, u) ∈ Af . HI ⇒ h(v) ≤ h(u) + 1 avant Relabel(u). Par Lemme 2, h(v) ≤
h(u) + 1 reste vraie après l’appel.
– Push(u, v) maintient la propriété:
∗ (v, u) est ajouté à Af : h[v] = h[u] − 1 < h[u] + 1
∗ (u, v) est supprimé de Af : pas de problème
Correction de l’algorithme Push-Relabel (préliminaires)
Lemme 4:
Soit G = (S, A) un RAF, f un préflot dans G, et h un fonction de
hauteur sur S. Alors il n’y a pas dans Gf de chemin de s à t.
• Supposons qu’il existe p = hv0, v1, . . . , vk i un chemin dans Gf avec v0 = s et vk = t.
• On suppose que p est simple: ⇒ k < |S|
• h est une fonction de hauteur: ⇒ ∀i = 0, 1, . . . , k − 1. h[vi] ≤ h[vi+1] + 1
• ⇒ h[s] ≤ h[t] + k = k < |S|. Contradiction (h[s] est toujours = |S|).
Correction partielle de l’algorithme Push-Relabel
Thm 3:
Si l’algorithme Push-Relabel-Générique termine, alors le préflot f qu’il
calcule est un flot maximum.
• On a l’invariant: à chaque itération, f est un préflot (Push préserve les préflot par def)
• A la fin, on ∀u ∈ S − {s, t}. e[u] = 0 (sinon une opération serait applicable - Lemme 1)
• ⇒ f est un flot
• h est une fonction de hauteur (Lemme 3) : Lemme 4 ⇒ pas de chemins de s à t dans Gf .
• Thm 1 ⇒ f est flot max
Arrêt + Complexité (préliminaires)
Lemme 5:
Pour tout u débordé, il existe un chemin (simple) de u à s dans Gf .
• Soit u tel que e[u] > 0. Soit U = {v ∈ S : u ;Gf v}, et U = S − U .
• Supposons que s ∈ U .
• On prouve que ∀w ∈ U , ∀v ∈ U. f (w, v) ≤ 0.
(f (w, v) > 0 ⇒ f (v, w) < 0, ⇒ cf (v, w) = c(v, w) − f (v, w) > 0, ⇒ (v, w) ∈ Af )
• f (U , U ) ≤ 0 ⇒
e(U ) =
=
=
≤
f (S, U )
f (U , U ) + f (U, U )
f (U , U )
0
• On a ∀u ∈ S − {s}. e(u) ≥ 0.
• U ⊆ S − {s} ⇒ ∀v ∈ U. e(v) = 0. Contradiction (u ∈ U et u débordé).
Arrêt + Complexité (préliminaires)
Lemme 6:
Le propriété “∀u ∈ S. h[u] ≤ 2|S| − 1” est invariante.
• Propriété vraie pour s et t.
• Soit u ∈ S − {s, t}.
– Initiallement h[u] = 0. On montre que la propriété est préservée par Relabel(u).
– Lemme 5: ⇒ ∃p = hv0, v1, . . . , vk i, avec v0 = u, vk = s, et k ≤ |S| − 1 (p est simple).
– ∀i = 0, 1, . . . , k − 1, on a (vi, vi+1) ∈ Af .
– Lemme 3 (h est une fonction de hauteur) ⇒ ∀i = 0, 1, . . . , k − 1, h[vi] ≤ h[vi+1] + 1
– ⇒ h[u] = h[v0] ≤ h[vk ] + k ≤ h[s] + (|S| − 1) = 2|S| − 1.
Arrêt + Complexité (préliminaires)
Lemme 6:
Le propriété “∀u ∈ S. h[u] ≤ 2|S| − 1” est invariante.
• Propriété vraie pour s et t.
• Soit u ∈ S − {s, t}.
– Initiallement h[u] = 0. On montre que la propriété est préservée par Relabel(u).
– Lemme 5: ⇒ ∃p = hv0, v1, . . . , vk i, avec v0 = u, vk = s, et k ≤ |S| − 1 (p est simple).
– ∀i = 0, 1, . . . , k − 1, on a (vi, vi+1) ∈ Af .
– Lemme 3 (h est une fonction de hauteur) ⇒ ∀i = 0, 1, . . . , k − 1, h[vi] ≤ h[vi+1] + 1
– ⇒ h[u] = h[v0] ≤ h[vk ] + k ≤ h[s] + (|S| − 1) = 2|S| − 1.
Corollaire :
Le nombre des opération Relabel est au plus 2|S|−1 par sommet, et donc
globalement < 2|S|2.
Arrêt + Complexité (préliminaires)
Push(u, v) est saturant si cf (u, v) devient = 0 après l’opération.
Lemme 7:
1. Le nombre des Push saturant est au plus 2|S||A|.
2. Le nombre des Push non saturant est au plus 4|S|2(|S| + |A|).
Preuve du (2):
P
• Soit Φ = v:e[v]>0 h[v]. (Initiallement Φ = 0.)
• Une opération Relabel(u) fait croitre Φ d’au plus 2|S|.
• Un Push(u, v) saturant fait croitre Φ d’au plus 2|S| (v peut devenir débordé).
• Un Push(u, v) nonsaturant fait décroitre Φ d’au moins 1:
– u n’est plus débordé (−h[u])
– v est débordé, sauf si v = s (+h[v] ou +0)
– nous avons h[u] = h[v] + 1
• Total de la croissance: 2|S|(2|S|2 + 2|S||A|) = 4|S|2(|S| + |A|).
• Φ ≥ 0 ⇒ nombre des décroissances (Push non saturant) est ≤ 4|S|2(|S| + |A|).
Arrêt + Complexité
Thm :
Push-Relabel-Générique effectue un nombre d’opération en O(S 2A). Une
implémentation de l’algorithme s’exécute en un temps O(S 2A).

Documents pareils