2010-11-17 10 views
5

Mam sieć, która mogłaby wyglądać następująco:
Network
Zasadniczo chcę wiedzieć minimalną liczbę zielone kółka, które można odłączyć źródło i drenażu jeśli usunięty/wyłączony. (w tym przypadku 1)
Z powodzeniem wdrożyłem już algrorith Edmonds-Karp, ale nie wiem jak modelować sieć z ukierunkowanymi krawędziami, więc uzyskam pożądany rezultat.
Jeśli po prostu zastąpię każde połączenie między węzłami dwoma przeciwległymi skierowanymi krawędziami o pojemności 1, otrzymam maksymalny przepływ 2 z EdmondsKarp, ale muszę tylko usunąć 1 zielone koło, aby zerwać sieć.
Jak mogę modelować moją sieć jako węzły i kierować krawędzie?sieć Modelowanie jako skierowany graf

Odpowiedz

4

Możesz zredukować ten problem do standardowego problemu z wykreślaniem s-t w kierowanych wykresach, który następnie można rozwiązać np. według algorytmu Edmondsa-Karpa. Dla każdego wierzchołka v utwórz dwa wierzchołki v_in i v_out oraz krawędź skierowaną (v_in, v_out), a dla każdej krawędzi {v, w} dodaj dwie skierowane krawędzie (v_out, w_in) i (w_out, v_in). Nietrudno zauważyć, że maksymalny przepływ od s_in do t_out odpowiada minimalnemu przecięciu wierzchołka pomiędzy s i t.

0

Masz poprawnie określony maksymalny przepływ - 2 dla twojej sieci.

Z definicji flow network

Przepływ musi spełniać ograniczenie że ilość przepływu do węzła równa ilości przepływu z niego, wyjątkiem sytuacji, gdy jest to źródło, które ma więcej przepływ towarzyski, lub umywalka, która ma więcej przepływ przychodzące

tak na środkowym węźle masz 2 przepływ jako max (pochodzących i dzieje się). Zatem wiedza tylko o maksymalnym przepływie nie da odpowiedzi na minimalne cięcie.

Twierdzenie

max-min Przepływ cięte stany teorematu, że w sieci przepływu, maksymalna ilość przechodzenia od źródła do zlewu przepływu jest równa minimalnej pojemności który po usuwane w sposób szczególny z sieci powoduje sytuację że brak przepływu może przejść od źródła do zlewu

tak, tak, znasz ilość przepływu, którą musisz usunąć, ale nie wiesz, w jaki sposób ją usunąć. Myślę, że to nie jest tak banalne i że będziesz musiał szczególnie szukać minimalnego cięcia.

+0

Po kilku bezpłatnych owocach Googleing, mam zamiar najpierw wypróbować "brutalną siłę": Znajdź maksymalny przepływ. Usuń węzeł z większością przepływów przez niego. Powtarzaj te 2 kroki, aż maksymalny przepływ wyniesie zero. Liczba usuniętych węzłów powinna być minimalna, więc to właśnie liczę. – Svante

+0

@Svante, nie to nie dałoby poprawnej odpowiedzi - wyobraźmy sobie przypadek, w którym ten sam maksymalny przepływ, wartość 7, przechodzi przez 2 zestawy węzłów, od piątego do 4,2,1, a następnie przez 3,2,2. Usunięcie 4 i 3 nie doprowadziłoby do jej wyzerowania i osiągnąłbyś zerowy przepływ dopiero po usunięciu ostatnich 2 w drugim zestawie. W ten sposób policzysz zbyt wiele węzłów. Ale uważam (nie przeszedłem przez algorytm), że Edmonds-Karp analizuje scenariusz minimalnego cięcia, ale go nie zachowuje.Poszukałbym sposobu zmodyfikowania algorytmu maks. Przepływu w sposób, który zwróciłby węzły, przez które przechodzi maksymalny przepływ. – Unreason

+0

tak właśnie zaimplementowałem to i nie zadziałało. Max-flow i min-cut są zawsze takie same. Ale min-cut to tylko minimalna suma przepływu na krawędziach, które mają zostać obcięte do osobnego źródła i drenażu. Więc tak naprawdę nie mówi mi więcej, ani nic, o tym, które krawędzie lub węzły są krytyczne. – Svante