Nun, das Problem ist immerhin in Ich werde die vorherige Antwort behalten , da sie auch für den gerichteten Fall (der NPC ist, wie bei der anderen Frage beantwortet) funktioniert und zeigt, dass es sich um F P T in Bezug auf l handelt .PFPTl
Im ungerichteten Fall ist es lösbar, deterministisch über den minimalen Kostenfluss (dies funktioniert möglicherweise nicht auf den Skalen, auf die Sie sich in der Frage beziehen, aber es ist besser als der exponentielle Algorithmus.
Die folgende Prozedur entscheidet, ob eine Kante ein Teil des Ausgabegraphen sein soll. Um das ursprüngliche Problem zu lösen, schleifen Sie einfach über alle Kanten.e=(u,v)∈E
Gehen Sie wie folgt vor, um das Flow-Netzwerk zu erstellen:
Schritt 1: Erweitern einen Scheitelpunkt zu haben , x e und ersetzen e mit den Kanten ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (sie als einen gerichteten Teil des Verkehrsnetzes), setzen Sie ihre Kosten auf 0.exee(u,xe),(xe,u),(v,xe),(xe,v)
Schritt 2: Ersetzen Sie jeden Scheitelpunkt mit Ausnahme von x e durch zwei Scheitelpunkte t - und t + und fügen Sie eine Kante ( t - , t + ) hinzu . Setzen Sie die Kosten für diese Kanten auf 1.txet−t+(t−,t+)
Schritt 3: Ersetzen Sie jede Kante durch die Kanten ( a + , b - ) , ( b + , a - ) . Setzen Sie die Kosten dieser Kanten auf 0.{a,b}∈E(a+,b−),(b+,a−)
Schritt 4: Fügen Sie einen neuen Eckpunkt und fügen Sie die Kanten ( s , y e ) , ( t , y e ) mit den Kosten 0 hinzu.ye(s,ye),(t,ye)
Schritt 5: Stellen Sie alle Kapazitäten auf 1 ein.
Führen Sie nun den Min-Cost-Flow-Algorithmus aus und suchen Sie nach einem Fluss von Wert 2 von nach y e .xeye
Analyse:
- Jeder 2-wertige Fluss von bis y e ist eine Vereinigung von einem Pfad x e ⇝ s → y e und einem Weg x e ⇝ t → y e .xeyexe⇝s→yexe⇝t→ye
- Die Pfade sind disjunkt, da für jeden Scheitelpunkt nur 1 Kapazität im Bogen ( t - , t + ) vorhanden ist .t(t−,t+)
- Die zurückgegebenen Pfade sind die beiden Pfade, deren Summe der Entfernungen minimal ist, und das sind auch die Kosten des gefundenen Flusses. Dies ermöglicht es uns, zum Ausgabediagramm hinzuzufügen oder auf andere Weise zu löschen.e