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 AS2de capacit´es positives
ou nulles c:AR+. 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:AR+qui v´erifie les contraintes de capacit´e et la conservation du
flot : aA, f(a)c(a)
uS\ {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 aA, 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 dimine. 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 implanee `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
2 Travail demand´e
Vous ´ecrirez une fonction C qui calcule le flot maximal par l’algorithme de Malhotra, Pramodh-
Kumar, Maheshwari. L’argument de la fonction sera un graphe de taille arbitraire sous forme de listes
d’adjacence (efficace pour repr´esenter les graphes peu denses) ainsi que deux nœuds set tdistincts. Les
capacit´es seront de type int. La sortie sur ´ecran sera un flot maximal f: vous donnerez la liste des arˆetes
(u, v) telles que f(u, v)6= 0, avec leur d´ebit associ´e f(u, v) et leur capacit´e c(u, v), ainsi que le d´ebit total
de f.
Vous ´ecrirez ´egalement un programme de d´emonstration qui calcule des flots maximaux sur des
graphes g´en´er´es al´eatoirement. Le programme prendra en argument en ligne de commande le nombre de
sommets Set le nombre d’arˆetes Ades graphes `a g´en´erer. Vous expliquerez l’algorithme choisi pour la
g´en´eration al´eatoire des graphes et d´ecrirez la distribution des graphes obtenus. De plus, le programme
v´erifiera que la sortie de l’algorithme est bien toujours un flot (conditions de capacit´e et conservation du
flot).
Enfin, vous ferez quelques exp´eriences en variant |A|et |S|pour v´erifier exp´erimentalement le coˆut
th´eorique (attention au coˆut de la g´en´eration du graphe, de la v´erification et de la sortie sur ´ecran).
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !