Algorithmique et Programmation
Projet : flot maximal par l’algorithme de Malhotra, Pramodh-Kumar et
Maheshwari
Ecole normale sup´erieure
D´epartement d’informatique
2013-2014
1 Algorithme MPKM
Soit G= (S, A, c) un graphe pond´er´e, orient´e de sommets Set d’arˆetes A⊆S2de capacit´es positives
ou nulles c:A→R+. On suppose Asym´etrique : (u, v)∈A=⇒(v, u)∈A(en ajoutant au besoin des
arˆetes de capacit´e nulle `a A). De plus, deux sommets de Ssont distingu´es : la source set le puits t. Un
flot est une valuation des arˆetes f:A→R+qui v´erifie les contraintes de capacit´e et la conservation du
flot : ∀a∈A, f(a)≤c(a)
∀u∈S\ {s, t},P(v,u)∈Af(v, u) = P(u,v)∈Af(u, v)
On chercher `a maximiser le d´ebit total du flot, c’est `a dire :
X
(s,u)∈A
f(s, u) = X
(u,t)∈A
f(u, t)
´
Etant donn´e un flot fet un nœud u6=s, t, on appelle potentiel en ule d´ebit suppl´ementaire ρ(u)
qu’il est possible de faire passer par u:
ρ(u) = min
X
(v,u)∈A
c(v, u)−f(v, u),X
(u,v)∈A
c(u, v)−f(u, v)
De plus, on appelle potentiel de r´ef´erence ρla valeur minimale de ce potentiel ρ= minuρ(u) et nœud de
r´ef´erence un nœud rqui atteint ce minimum : ρ(r) = ρ.
L’algorithme de Malhotra, Pramodh-Kumar et Maheshwari construit un flot maximal de la mani`ere
suivante. Il part du flot nul ∀a∈A, f(a) = 0 et d´etermine un nœud de r´ef´erence r. Si le potentiel
de r´ef´erence est nul, l’algorithme supprime le nœud de r´ef´erence r, toutes les arˆetes incidentes `a vet
met `a jour les potentiels des nœuds voisins. Sinon, le flot est mis `a jour pour faire passer un d´ebit
ρsuppl´ementaire par r. Cela se fait en distribuant le flot ρsur toutes les arˆetes sortantes (r, ui) de
r. Si on note u1, . . . , unles nœuds successeurs de r, on commencera par donner le maximum possible
ρ1= min(ρ, c(r, u1)−f(r, u1)) `a u1puis, le maximum de ce qui reste ρ2= min(ρ−ρ1, c(r, u2)−f(r, u2))
`a u2, jusqu’`a ´epuisement du flot. Le flot arrivant `a chaque voisin uide ρ(f) est alors distribu´e `a ses
voisins et, de proche en proche (par un parcours en largeur), jusqu’`a t. Le flot ρest distribu´e de mani`ere
similaire depuis rjusqu’`a s, en utilisant les arˆetes entrantes au lieu des arˆetes sortantes. `
A la fin de ce
proc´ed´e, toutes les arˆetes sortant de vou toutes les arˆetes entrant dans vsont satur´ees. Le nœud vest
donc supprim´e ainsi que toutes les arˆetes incidentes et les potentiels des nœuds voisins de vsont mis `a
jour. L’op´eration est r´ep´et´ee tant qu’il reste un potentiel de r´ef´erence non nul.
Les potentiels des nœuds du graphe sont stock´es dans une file de priorit´e P.`
A chaque fois que du
flot passe dans un nœud, son potentiel est diminu´e. Le nombre de diminution est born´e par O(|S|2)
pour chaque traitement d’un nœud de r´ef´erence. Comme `a chaque ´etape le nœud de r´ef´erence voit son
potentiel annul´e, il n’est pas possible d’obtenir deux fois le mˆeme nœud de r´ef´erence.
Si la file de priorit´e est implant´ee `a l’aide de la structure de donn´ees des tas de Fibonacci (vu en cours
avanc´e), les fonctions Extraire-Min et Diminuer-Cl´e se font respectivement en O(log |S|) et O(1).
L’algorithme de Malhotra, Pramodh-Kumar, Maheshwari a un coˆut total en O|S|3.
1