Znajdź najkrótsze ścieżki na zważonym wykresie unipatycznym

12

Mówi się, że ukierunkowany wykres jest unipatyczny, jeśli dla dowolnych dwóch wierzchołków i na wykresie istnieje co najwyżej jedna prosta ścieżka od do .uvG=(V,E)uv

Załóżmy, że otrzymałem wykres jednoczynnościowy taki, że każda krawędź ma dodatnią lub ujemną wagę, ale nie zawiera żadnych ujemnych cykli masy.G

Z tego chcę znaleźć algorytm, który wyszukuje wszystkie najkrótszej ścieżki do wszystkich węzłów od węzła źródłowego .O(|V|)s

Nie jestem pewien, jak bym podszedł do tego problemu. Próbuję zobaczyć, jak mógłbym wykorzystać fakt, że nie zawiera on żadnych ujemnych cykli wagi i oczywiście co najwyżej jedną prostą ścieżkę między dowolnym węzłem do .uv

gprime
źródło
1
Czego spróbowałeś do tej pory? Jeśli całkowicie utkniesz, zacznij od małej: jak naprawdę wyglądają wykresy unipatyczne? Na przykład narysuj każdy wykres unipatyczny jednym wierzchołkiem, dwoma wierzchołkami, trzema wierzchołkami i tak dalej. Możesz zauważyć pomocny wzór. Ponadto wspominasz, że nie ma ujemnych cykli masy - czy mogą być nawet cykle (o dowolnej masie)?
Juho,
@mrm Jaki wzór masz na myśli? Wykresy unipatyczne mogą mieć cykle, w ograniczony sposób, którego nie mogę znaleźć łatwego sposobu wyrażenia.
Gilles „SO- przestań być zły”
@ mrm Nie. Krawędź może należeć maksymalnie do jednego cyklu. Węzeł może należeć do dowolnej liczby cykli: wykres w kształcie gwiazdy -point jest unipatyczny (i możesz uzyskać jeszcze wyższy stosunek cykli elementarnych na węzeł). E = i n { ( a , b i ) , ( b i , a ) }nE=in{(a,bi),(bi,a)}
Gilles „SO- przestań być zły”

Odpowiedzi:

10

Wybierz reprezentację danych

Najpierw spójrz na rozmiar wyniku. Chcesz kolekcji najkrótszych ścieżek od do każdego innego węzła. O ile średnia długość ścieżki nie jest ograniczona stałą (co nie jest: żadna lista jest ścieżką unipath, a jeśli weźmiesz root jako całkowita długość ścieżek wynosi gdzie jest długość listy), musisz zachować ostrożność w reprezentacji danych: struktura zawierająca ścieżki będzie musiała korzystać z udostępniania między ścieżkami.s n ( n - 1 ) / 2 nssn(n1)/2n

Z wyłączeniem cykli, istnieje jedna ścieżka od do dowolnego innego węzła . Jeśli ścieżka ta przechodzi przez węzeł pośredni , wówczas pierwszym segmentem ścieżki jest żądana ścieżka od do . u t s tsutst

Proponuję zapisać wynik w tablicy indeksowanej według węzłów o numerach od do , przy czym . Każdy element w tablicy przechowuje indeks poprzedniego węzła na ścieżce do tego węzła (użyj np. jako specjalnego znacznika dla węzłów, które są nieosiągalne od ). Ścieżka od do będzie .| E | - 1 s = 0 - 1 s s t ( s = R [ R [ t ] ] , , R [ R [ t ] ] , R [ t ] , t )0|E|1s=01sst(s=R[R[t]],,R[R[t]],R[t],t)

Przejdź przez wykres

Zainicjuj dla wszystkich .- 1R1

Wykonaj przemierzanie wykresu w pierwszej kolejności lub w pierwszej szerokości, zaczynając od . Za każdym razem, gdy osiągany jest węzeł , ustaw na jego poprzednika.u R [ u ]suR[u]

Ponieważ istnieją cykle, węzeł może zostać osiągnięty więcej niż jeden raz. Mając wskazuje, że już zostały otwarte.uR[u]1u

Udowodnij poprawność

Ze względu na właściwość unipatyczną nie ma znaczenia, w jaki sposób docieramy do każdego węzła, o ile nie ukończyliśmy cyklu. Jest tylko jedna prosta ścieżka.

Udowodnij złożoność

Algorytm może dotrzeć do każdego węzła więcej niż raz, więc nie jest jasne, czy jego złożoność wynosi . praca to w rzeczywistości gdzie to krawędzie, które są dostępne ze źródła. Dokładniej, do węzła dochodzimy więcej niż raz tylko w jednej sytuacji: jeśli węzeł jest pierwszym, który osiągamy w danym cyklu, iw tym przypadku osiągamy go dwukrotnie (raz z prostej ścieżki i raz po ukończeniu cyklu ).Θ ( | E 0 | ) V 0O(|V|)Θ(|E0|)V0

No więc. Udowodnijmy, że na grafie unipatycznym liczba cykli elementarnych rośnie co najwyżej liniowo wraz z liczbą węzłów. (Cykl elementarny to taki, który nie zawiera krótszego cyklu.) W poniższej dyskusji założę, że wykres nie ma własnej krawędzi (żadnej krawędzi od węzła do siebie; takie krawędzie i tak nie mają znaczenia dla konstrukcji ścieżki ).

Wykresy unipatyczne mogą mieć cykle, ale w bardzo ograniczony sposób. Byłoby miło, gdybyśmy mogli jakoś powiązać każdy cykl z odrębnym węzłem (lub przynajmniej co najwyżej ograniczoną liczbą cykli na węzeł). Czy cykle mogą współdzielić węzeł? Niestety tak.

Możesz mieć cykli współużytkujących jeden węzeł i żadnych innych węzłów. Powstały wykres jest jednoznaczny. W przypadku cykli o długości 2 jest to wzór gwiazdy z centralnym węzłem i dowolną liczbą węzłów tak że .maabii,abi

Więc będziemy musieli pracować ciężej. Spróbujmy to udowodnić indukcyjnie. Niech będzie liczbą węzłów na wykresie , liczbą krawędzi, a liczbą cykli elementarnych, które nie są krawędziami własnymi. Twierdzę, że jeśli jest jednoznaczny i nie jest pusty, to .#V(G)G#E(G)#C(G)G#C(G)#V(G)1

Jest to oczywiste w przypadku wykresu z jednym lub dwoma węzłami. Załóżmy, że twierdzenie to dotyczy wszystkich grafów, tak że i niech będzie grafem unipatycznym z węzłami. Jeśli nie ma cyklu, , obudowa zamknięta. W przeciwnym razie niech będzie cyklem elementarnym.#V(G)<nGnG0=#C(G)<#V(G)(a1,,am)

Zwiń cykl: niech będzie wykresem, którego węzłami są minus plus węzeł a których krawędzie są wszystkimi krawędziami nie obejmującymi , plus ilekroć oraz ilekroć . Każda ścieżka w indukuje ścieżkę w (jeśli ścieżka obejmuje , to zastąp ją przezGG{a1,,am}aGaiaGbi,aiGbbGai,bGaiGGbacbaiai+1ajc in ). Dlatego jest unipatyczne. Ponadto, ponieważ cykle w nie dzielą krawędzi, ma wszystkie cykle w oprócz tego, który wyeliminowaliśmy: . Poprzez indukcję . Ponieważ , mamy .GGGGG#C(G)=#C(G)1#C(G)#V(G)1#V(G)=#V(G)m+1#C(G)=#C(G)+1#V(G)m=nmn1

To kończy dowód. Przejście następuje co najwyżej krawędzi.2|V|2

Gilles „SO- przestań być zły”
źródło