Podgraf zawierający wszystkie węzły i krawędzie, które są częścią prostych ścieżek st o ograniczonej długości na niekierowanym wykresie

12

Całkiem podobne do mojego wcześniejszego pytania . Tym razem jednak wykres nie jest przekierowany.

Dany

  • Nieukierunkowane wykres G bez wielu krawędzie lub pętli
  • Źródło wierzchołek s ,
  • Docelowy wierzchołek t ,
  • Maksymalna długość ścieżki l ,

Szukam G - podgraf G który zawiera dowolny wierzchołek i dowolną krawędź w G (i tylko te), które są częścią co najmniej jednej prostej ścieżki od s do t o długości l .

Uwagi:

  • Nie muszę wyliczać ścieżek.
  • Szukam wydajnego algorytmu (zarówno czasu, jak i pamięci), ponieważ muszę go wykonać na bardzo dużych wykresach (10 ^ 8 wierzchołków, 10 ^ 9 krawędzi).
Lior Kogan
źródło
Sprawdź to. Znaleziono ten artykuł, który wydaje się robić podobną redukcję przepływu kosztów minimalnych, ale wykorzystuje specjalne cechy sieci, aby rozwiązać go szybciej niż ogólne algorytmy MCF.
RB

Odpowiedzi:

6

Cóż, problem jest w po wszystkim. Zachowam poprzednią odpowiedź, ponieważ działa ona również w przypadku skierowanym (którym jest NPC, jak odpowiedziano na drugie pytanie) i pokazuje, że F P T w odniesieniu do l .PFPTl

W przypadku nieukierunkowanym jest on rozwiązywalny, deterministycznie poprzez minimalny przepływ kosztów (może to nie działać na skalach, o których mowa w pytaniu, ale jest lepszy niż algorytm wykładniczy.

Poniższa procedura zadecyduje, czy część zbocza powinna być częścią wykresu wyjściowego. Aby rozwiązać pierwotny problem, po prostu zapętl wszystkie krawędzie.e=(u,v)E

Aby utworzyć sieć przepływu, wykonaj następujące czynności:

Krok 1: Rozwiń aby mieć wierzchołek x e i zamień e na krawędzie ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (są one skierowane jako część sieci przepływowej), ustaw ich koszt na 0.exee(u,xe),(xe,u),(v,xe),(xe,v)

Krok 2: zamień każdy wierzchołek , z wyjątkiem x e, na dwa wierzchołki t - i t + , i dodaj krawędź ( t - , t + ) . Ustaw koszt tych krawędzi na 1.txett+(t-,t+)

Krok 3: Zastąp każdą krawędź krawędziami ( a + , b - ) , ( b + , a - ) . Ustaw koszt tych krawędzi na 0.{za,b}mi(za+,b-),(b+,za-)

Krok 4: Dodaj nowy wierzchołek i dodaj krawędzie ( s , y e ) , ( t , y e ) z kosztem 0.ymi(s,ymi),(t,ymi)

Krok 5: ustaw wszystkie pojemności na 1.

Teraz uruchom algorytm przepływu kosztu minimalnego, szukając przepływu o wartości 2 od do y e .xmiymi


Analiza:

  • xmiymix et y exmisymixmitymi
  • Ścieżki są rozłączne, ponieważ dla każdego wierzchołka jest tylko 1 pojemność w łuku .( t - , t + )t(t-,t+)
  • Zwrócone ścieżki to dwie ścieżki, których suma odległości jest minimalna, a to także koszt znalezionego przepływu. To pozwala nam dodać do wykresu wyjściowego lub usunąć w inny sposób.mi
RB
źródło
1
Łatwiej jest zrozumieć argument w powyższej odpowiedzi, usuwając redukcję do ukierunkowanego przepływu. Istnieje prosta ścieżka od do zawierająca węzeł iff, istnieje ścieżka od do oraz ścieżka od do tak że i są węzłami rozłącznymi, z wyjątkiem . To zasadniczo wykorzystuje bezkierunkowość. Można to sprawdzić za pomocą przepływu, a wersję kosztową można również wykonać za pomocą przepływu minimalnego kosztu. Można sprawdzić, czy istnieje prosta ścieżka od do zawierającat v P v s Q v t P Q v s t e estvP.vsQvtP.Qvstmiwprowadzając węzeł w środku . mi
Chandra Chekuri
@ChandraChekuri - to prawda, ale pamiętaj, że jeśli problem nie ma ograniczenia długości, istnieje znacznie prostszy algorytm do podjęcia decyzji - patrz tutaj
RB
Jasne, wiem też o tym rozwiązaniu - koncepcyjnie dobrze jest rozumieć komponenty połączone ze sobą za pomocą rozłącznych ścieżek, chociaż można znaleźć wycięte wierzchołki i połączone komponenty bezpośrednio przez DFS.
Chandra Chekuri
@RB: Dziękuję. Sugerowany algorytm może być skuteczny, gdy l jest względnie duże, ale prawdopodobnie jest nieoptymalne dla względnie małych wartości l. Chyba mogę najpierw przyciąć G, usuwając wierzchołek dalej niż podłoga (l / 2) zs i sufit (l / 2) zt.
Lior Kogan
1
Spróbuj dostosować kolejny algorytm najkrótszej ścieżki (zwany również algorytmem Surballe'a w przypadku 2 ścieżek, które są tu interesujące). Chcesz znaleźć najkrótsze 2 ścieżki od (lepiej nazwać to zamiast ponieważ jest takie samo dla wszystkich krawędzi) do każdego . Myślę, że można to zrobić skutecznie, najpierw obliczając drzewo najkrótszej ścieżki od a następnie ostrożnie wdrażając obliczenia drugiej ścieżki. y y e x e yyyymixey
Chandra Chekuri
1

Oto zła odpowiedź: generuje niektóre wierzchołki, które są częścią nieprostych ścieżek od do i które nie są częścią żadnej prostej ścieżki od do długości . Odpowiedź może nadal dotyczyć wniosku osoby pytającej, więc zostawiam ją tutaj.t s t stst

Oto algorytm działający w czasie (i faktycznie jest szybszy niż ten, gdy jest mały).O(|V.|+|mi|)

Algorytm uruchamia wyszukiwanie BFS od które kończy się na głębokości . Ten BFS daje zestaw wszystkich wierzchołków osiągalnych z ze ścieżką o długości co najwyżej , a także oblicza odległości dla każdego . Następnie zrobiłbym to samo i zestaw i odległości od . Wreszcie wierzchołki, których szukasz, to dokładnie . Krawędzie są dokładnie tymi krawędziami w E [ V s o l uV s s d i s t ( s , v ) v V s t V t t V s o l u t i o n = { v : v V sV t , d i s t ( s , v ) + d i s t ( t ,sV.ssrejast(s,v)vV.stV.ttV.solutjaon={v:vV.sV.t,rejast(s,v)+rejast(t,v)}(=(v,u)E:u,v V s o l u t i o n ).mi[V.solutjaon]=(v,u)mi:u,vV.solutjaon

Czas działania tego algorytmu jest z pewnością ponieważ robi on tylko dwa BFS. Ale czas działania jest w rzeczywistości który będzie znacznie mniejszy niż rozmiar wykresu, gdy promieniowe sąsiedztwa i są małe.O(|V.|+|mi|)s tO(|V.s|+|V.t|+|mi[V.s]|+|mi[V.t]|)st

Edycja: prawdopodobnie w praktyce jest nieco szybszy algorytm, który wykonuje BFS z głębokości i t tylko / 2 zamiast . To odkrywa wszystkie ścieżki, a następnie przy odrobinie księgowości można znaleźć wszystkie wierzchołki. Skraca to czas działania o pierwiastek kwadratowy w przypadku dużego losowo wyglądającego wykresu, gdy jest małe.st/2)

pierożek Mobiusa
źródło
3
To nie zmusza ścieżki do bycia prostym. Rozważ prosty wykres ścieżki i l = 4 . Zwrócisz jako część wyniku, chociaż nie ma prostej ścieżki st, która przechodzi przez ...t-u-s-v-xl=4vvv
RB
Dzięki za korektę @RB. Zredagowałem swoją odpowiedź, aby zauważyć, że jest zła.
pierożek Mobius
1

Jest to zamierzone jako komentarz, ale jest zbyt długi, aby opublikować komentarz.

Możesz również być zainteresowany kluczami graficznymi lub emulatorami do swoich celów. Klucz grafu jest subgraph H = ( V , E ' ) z kilkoma krawędzi, ale w przybliżeniu zachowana odległości. Emulator to wykres którego krawędzie mogą być ważone.sol=(V.,mi)H.=(V.,mi)H.=(V.,mi,w)

Najlepszy wynik dla kluczy to krawędzi i błąd addytywny +6 w szacunkach odległości na wykresie. Najlepszy wynik dla emulatorów to krawędzie i błąd addytywny +4. Nie wiadomo też, czy możemy pokonać , nawet jeśli błąd może być polilogarytmiczny.O ( n 4 / 3 ) O ( n 4 / 3 )O(n4/3))O(n4/3))O(n4/3))

Jeśli to wydaje się przydatne, mogę spróbować wykopać odpowiednie konstrukcje dla ciebie.

GMB
źródło