Sie haben Ihr Problem in den Kommentaren noch weiter verfeinert. Genauer gesagt haben Sie eine DAG, bei der alle Kanten von der Quelle weg und in Richtung der Senke t fließen (dh alle Kanten befinden sich auf einem Pfad von s nach t ). Sie möchten den minimalen Schnitt zwischen zwei Teilen der DAG finden, wobei das erste Teil mit s und das zweite mit t verbunden ist . Für dieses Problem funktioniert eine Variation des Standardalgorithmus für die lineare Programmierung für MIN-CUT auch bei negativen Kantengewichten.ststst
Wir verwenden die gleiche Notation wie in Wikipedia . Die Kosten für die Kante ist , c i j . Wir setzen eine potentielle Funktion p i auf jeden Knoten und lassen d i j = p i - p j . Die LP ist
m i n i m i z e( i , j )ci jpichdi j= pich- pj
m i n i m i z e s u b j e c t t o ∑( i , j ) ∈ E.ci jdi j di j= pich- pj ∀ ( i , j ) ∈ E. di j≥ 0 ∀ ( i , j ) ∈ E. ps= 1 pt= 0
Diese Gleichungen garantieren , dass , da jeder Knoten auf einige ist s - t Weg. In ähnlicher Weise nehmen die Potentiale auf jedem Weg von s nach t ab , da d i j = p i - p j nicht negativ ist . Wir müssen noch zeigen, dass es eine optimale Lösung für die LP mit allen p i entweder 0 oder 1 gibt . Dies folgt aus der Tatsache, dass der Wert für eine Lösung des obigen LP der erwartete Wert des Schnitts C w ist , wobei0 ≤ pich≤ 1stdi j= pich- pjstpich01C.w wird in [ 0 , 1 ] zufällig ausgewählt, und wobei der Schnitt C w erhalten wird, indem alle Eckpunkte i mit p i ≥ w in den ersten Satz von Eckpunkten und alle Eckpunkte mit p i < w in den zweiten Satz gesetzt werden.w[ 0 , 1 ]C.wichpich≥ wpich< w