web-dev-qa-db-fra.com

Comment puis-je trouver la coupe minimale sur un graphique en utilisant un algorithme de débit maximal?

J'ai besoin de trouver la coupe minimale sur un graphique. J'ai lu sur les réseaux de flux, mais tout ce que je peux trouver, ce sont des algorithmes de flux maximum tels que Ford-Fulkerson, Push-relabel, etc. la coupe minimale sur un graphique en utilisant un algorithme de flux maximal? Comment?

La meilleure information que j'ai trouvée jusqu'à présent est que si je trouve des bords "saturés", c'est-à-dire des bords où le débit est égal à la capacité, ces bords correspondent à la coupe minimale. Est-ce vrai? Cela ne me semble pas 100% juste. Il est vrai que tous les bords de la coupe minimale seront saturés, mais je pense qu'il pourrait également y avoir des bords saturés qui sont hors du "chemin" de la coupe minimale.

54
cesarbs

À partir du sommet source, effectuez une recherche en profondeur d'abord le long des arêtes du réseau résiduel (c'est-à-dire les arêtes non saturées et les arêtes arrières des arêtes qui ont un écoulement) et marquez tous les sommets qui peuvent être atteints de cette façon. La coupe se compose de toutes les arêtes qui vont d'un sommet marqué à un sommet non marqué. De toute évidence, ces bords sont saturés et n'ont donc pas été traversés. Comme vous l'avez noté, il peut y avoir d'autres bords saturés qui ne font pas partie de la coupe minimale.

45
Falk Hüffner

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

Solution correcte : Ce que vous devriez réellement faire est bfs/dfs sur le Residual-Network Gf ( lisez-le sur wikipedia ) et marquage des sommets. Et puis vous pouvez choisir ceux dont le sommet est marqué et le sommet non marqué.

Pourquoi 'suivre les bords insaturés' ne suffit pas : Considérez que l'algorithme de flux sature les bords comme indiqué dans l'image. J'ai marqué les sommets que je visite avec l'approche de "suivre les bords insaturés" en vert. De toute évidence, le seul min-cut correct est l'Edge de E-F, tandis que la solution suggérée retournerait également A-D (et peut-être même D-E).

enter image description here Notez que le sommet D serait visité par les dfs/bfs si nous considérions le réseau résiduel à la place, car il y aurait un bord de E à D, faisant ainsi du bord EF le seul avec un sommet marqué et un sommet non marqué.

26
dingalapadum

Remarque: L'algorithme de Falk peut être utilisé pour trouver à la fois une coupe minimale avec des sommets minimaux et avec des sommets maximaux. Pour ces derniers, l'algorithme doit être inversé, c'est-à-dire. rechercher à partir du sommet du puits au lieu de la source. Voir une question connexe: Flux de réseau: Ajout d'un nouvel Edge

1
Gyula

Une façon de comprendre est de définir une coupe comme deux ensembles S et T, qui comprendront respectivement s et t.

Maintenant, ajoutez tous les sommets dans S qui sont accessibles à partir de s dans le réseau résiduel et mettez les arêtes restantes dans T. Ce sera une coupe.

Deuxièmement, la coupe peut être formée en plaçant tous les sommets dans T qui sont accessibles à partir de t dans le réseau résiduel et en mettant les sommets restants dans S.

Jetez un œil à cette vidéo pour découvrir comment trouver les sommets accessibles à partir de s et t.

https://www.youtube.com/watch?v=FIJaXfUIXJA&index=4&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma

1
Sahil Jain

Donc, pour donner la procédure exacte pour obtenir la coupe minimale:

  1. Exécutez l'algorithme Ford-Fulkerson pour trouver le débit maximal et obtenir le graphique résiduel1.
  2. Exécutez BFS sur le graphe résiduel pour trouver l'ensemble des sommets accessibles depuis la source dans le graphe résiduel (en respectant le fait que vous ne pouvez pas utiliser d'arêtes avec 0 capacité dans le graphe résiduel) IMPORTANT: Vous devez utiliser des arêtes inverses dans le graphe résiduel pour trouver l'ensemble correct de sommets accessibles !!! (Voir cet algorithme)
  3. Toutes les arêtes du graphe d'origine qui vont d'un sommet accessible à un sommet non accessible sont des arêtes de coupe minimales. Imprimez tous ces bords.

1 Graphique dans lequel la capacité d'un Edge est définie comme sa capacité d'origine moins son flux (flux provenant du réseau de flux maximum).

1
MichalH

Je pense que c'est ce que disent les autres, mais je l'ai trouvé peu clair alors voici mon explication:

À partir du nœud source, effectuez un remplissage du graphique, en ne parcourant que les bords avec une capacité résiduelle, en marquant chaque sommet visité. Vous pouvez utiliser un DFS pour cela. Rappelons que les bords arrière d'un sommet ont une capacité résiduelle - égale au flux le long du bord avant (c'est-à-dire r (u, v) = capacité restante pour le bord (u, v), r (v, u) = flux (u , v)).

En effet, cela détermine la partie S de la coupe S-T du graphique.

La coupe minimale sera désormais l'ensemble des arêtes de sorte qu'un sommet soit marqué à partir de votre remplissage d'inondation ci-dessus et que l'autre sommet ne soit pas marqué. Ce seront des bords sans capacité résiduelle (sinon vous les auriez traversés dans votre DFS), et formeront ensemble la coupe minimale.

Après avoir supprimé ces bords, l'ensemble des sommets non marqués formera la section T de la coupe.

0
mindvirus

Une fois le débit maximal calculé, nous pouvons rechercher des arêtes (u,v) De sorte que dans le graphique résiduel, il y ait une arête dans le graphique résiduel de v à u et f(v,u) = c(u,v) [ce qui signifie que l'Edge est saturé]

Après avoir présélectionné ces arêtes, nous pouvons sélectionner ces arêtes (u,v) En utilisant les critères selon lesquels il n'y a pas de chemin de u à sombrer t dans le graphique résiduel. Si cette condition est remplie, ces bords font partie de la coupe (S,T)

Le temps d'exécution de cet algorithme peut être O(E) * O( V + E ) = O( E^2 )

0
SPV