59 votes

Comment puis-je trouver la coupe minimale d'un graphe en utilisant un algorithme de flux maximal ?

Je dois trouver la coupe minimale sur un graphe. J'ai lu des informations sur les réseaux de fluide, mais tout ce que je trouve sont des algorithmes de flux maximum tels que Ford-Fulkerson, push-relabel, etc. Étant donné le théorème du flux maximal-coupe minimale, est-il possible d'utiliser l'un de ces algorithmes pour trouver la coupe minimale sur un graphe en utilisant un algorithme de flux maximum? Comment?

Les meilleures informations que j'ai trouvées jusqu'à présent sont que si je trouve des arêtes "saturées" c'est-à-dire des arêtes où le flux égale la capacité, ces arêtes correspondent à la coupe minimale. Est-ce vrai? Ça ne me semble pas tout à fait juste. Il est vrai que toutes les arêtes de la coupe minimale seront saturées, mais je crois qu'il pourrait également y avoir des arêtes saturées qui sont en dehors du "chemin" de la coupe minimale.

47voto

Falk Hüffner Points 2174

À partir du sommet source, effectuer une recherche en profondeur le long des arêtes dans le réseau résiduel (c'est-à-dire les arêtes non saturées et les arêtes de retour des arêtes ayant un flux), et marquer tous les sommets qui peuvent être atteints de cette manière. La coupe est composée de toutes les arêtes qui vont d'un sommet marqué à un sommet non marqué. De façon évidente, ces arêtes sont saturées et n'ont donc pas été parcourues. Comme vous l'avez noté, il peut y avoir d'autres arêtes saturées qui ne font pas partie de la coupe minimale.

0 votes

Je ne suis pas sûr de comprendre votre description. Dans ce graphique : i.imgur.com/5TRQ0h2.png J'ai l'impression que votre algorithme dit que la coupe minimale serait de supprimer l'arête 40/40 et l'arête 50/50.

0 votes

@NiklasB. J'ai modifié ma description pour être, espérons-le, plus claire.

6 votes

Cela n'est pas toujours correct, pour les DAGs, cela ira bien. Voir la réponse de dingalapadum

33voto

dingalapadum Points 28

Je ne veux pas être pointilleux, mais la solution suggérée n'est pas tout à fait correcte telle que proposée.

Solution correcte: Ce que vous devriez réellement faire, c'est bfs/dfs sur le réseau résiduel Gf (lisez à ce sujet sur wikipedia) et marquer les sommets. Ensuite, vous pouvez choisir ceux avec un sommet d'où l'on part marqué et un sommet d'arrivée non marqué.

Pourquoi "suivre les arêtes non saturées" ne suffit pas: Considérez que l'algorithme de flot sature les arêtes comme le montre l'image. J'ai marqué les sommets que je visite avec l'approche "juste suivre les arêtes non saturées" en vert. Clairement, le seul min-coupe correct est l'arête de E à F, tandis que la solution suggérée retournerait également A à D (et peut-être même D à E).

entrez la description de l'image ici Notez que le sommet D serait visité par le dfs/bfs si nous considérions le réseau résiduel à la place, car il y aurait une arête de E à D, ce qui ferait de l'arête E-F la seule avec un sommet d'où l'on part marqué et un sommet d'arrivée non marqué.

9 votes

Vous n'êtes pas pointilleux! Les réponses ci-dessus sont incorrectes. Merci.

1 votes

Voici exactement ce que je cherchais! Une note indiquant que D est visité par le bfs/dfs dans le graphe résiduel pourrait être utile pour les autres.

2 votes

Pour ceux qui ont du mal à comprendre pourquoi visiter dans le graphe résiduel est différent que de simplement suivre les arêtes résiduelles: Les arêtes saturées ne signifient pas que le chemin est bloqué car il pourrait y avoir un flux venant de direction opposée qui l'annule.

6voto

Christian Jonassen Points 1797

Si vous jetez un œil à ce réseau de flot, il devient clair pourquoi la réponse de Falk Hüffner est correcte. Si vous commencez à la source (nœud 1) et essayez d'atteindre l'écoulement (nœud 7), le min cut est donné par l'ensemble des arêtes que vous ne pouvez pas traverser car il n'y a pas de capacité résiduelle. flux maximal

1voto

Gyula Points 44

Note : L'algorithme de Falk peut être utilisé pour trouver à la fois une coupe minimale avec un minimum de sommets et avec un maximum de sommets. Pour ce dernier, l'algorithme doit être inversé, c'est-à-dire rechercher à partir du sommet puits au lieu de la source. Voir une question connexe : Flot de réseau : Ajout d'un nouvel arête

0voto

Shatu Points 915

Ou mieux encore, utiliser une approche totalement différente en n'utilisant pas de diagrammes de flux pour trouver la coupe minimale. Vous pouvez consulter un algorithme populaire ici

http://www.cin.ufpe.br/~pcp/stoer-wagner.pdf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X