Znajdowanie co najmniej dwóch ścieżek o tej samej długości na ukierunkowanym wykresie

20

Załóżmy, że mamy skierowany wykres i dwa węzły A i B . Chciałbym wiedzieć, czy istnieją już algorytmy do obliczania następującego problemu decyzyjnego:G=(V,E)AB

Czy istnieją co najmniej dwie ścieżki między i B o tej samej długości?AB

Co powiesz na złożoność? Czy mogę to rozwiązać w czasie wielomianowym?


Chciałbym dodać nowe ograniczenie na wykresie, być może problem jest bardziej rozwiązywalny. W macierzy przylegania każda kolumna nie jest pusta. Tak więc każdy węzeł ma co najmniej jedną strzałkę na wejściu, a także co najmniej jeden węzeł jest podłączony do siebie. Więc jeśli węzeł jest węzłem, to ( i , i ) jest krawędzią na wykresie.i(i,i)

Paolo Parisen T.
źródło
Miałeś na myśli proste ścieżki? (odwiedzając każdy węzeł najwyżej jeden raz). Czy mogą mieć także wspólny węzeł wewnętrzny?
1
nie, nie ma ograniczeń na ścieżkach. możesz zapętlić, jeśli chcesz.
Paolo Parisen T.
Łatwa obserwacja jest taka: jeśli istnieje tylko jedna prosta ścieżka pomiędzy , a to prosta droga jest podłączony do co najwyżej jednej pętli, można po prostu powiedzieć N O , w przypadku wystąpienia co najmniej dwie pętle o różnej długości podłączone do tej prostej ścieżka, możesz powiedzieć tak, .... (Myślę, że podobne rzeczy są przydatne i możesz to udowodnić), ale w przypadku rozłącznych prostych ścieżek (jeśli podczas udowodnienia tego napotkałeś rozłączne proste ścieżki), jest to NPC. A,BNo
1
@mrm: Nie widzę tego jako duplikatu. Pytanie o wszystkie spacery to bardzo czasochłonna operacja (generalnie istnieje nieskończona liczba spacerów), podczas gdy OP żąda dwóch (prostych) ścieżek, nie wszystkich spacerów.
Dave Clarke

Odpowiedzi:

10

Rozważmy wykres , chcemy wiedzieć, czy istnieją dwie różne ścieżki od A do B o tej samej długości. Co robić? Proste: koduj dwie ścieżki w jednym. Zdefiniuj wykres G z wierzchołkami V × V × { 0 , 1 } . Zrobić krok w G ' tworząc dwa niezależne kroki w G . Dodatkowy bit informuje, czy dwie ścieżki już się od siebie oddzieliły.GABGV×V×{0,1}GG

Formalnie istnieje krawędź w G iff i i , j j w G i e = e ( i , i ) ( j , j ) .(i,j,e)(i,j,e)GiijjGe=e(i,i)(j,j)

Algorytm sprawdza, czy istnieje ścieżka do ( B , B , 1 ) w G , czyli O ( V 4 ) , czy coś w rodzaju O ( ( V + E ) 2 ) .(A,A,0)(B,B,1)GO(V4)O((V+E)2)

Jeśli zgodzisz się, że ten algorytm jest poprawny, to w konsekwencji ścieżka w ma długość co najwyżej 2 n 2 , dlatego potencjalne „kolizje ścieżki” muszą wystąpić najpóźniej na tej długości. Z tej obserwacji można uzyskać algorytm O ( V ω log V ) , gdzie ω jest złożonością mnożenia macierzy (zapytaj, czy potrzebujesz spoilera ...).G2n2O(VωlogV)ω

Mocno czuję, że istnieje algorytm , który wykorzystuje więcej struktury problemu.O(V+E)

sdcvvc
źródło
3
To jest eleganckie.
Raphael
4

Prawdopodobnie mam odpowiedź na ten problem, ale nie jestem pewien, czy to działa.

Nie jest ważne, aby „znaleźć” dwie ścieżki, jedyną ważną rzeczą jest „wiedzieć”, czy istnieją, czy nie. Nie sądzę, że jest to NP całkowity problem.

Więc, weź macierz sąsiedztwa . Możemy łatwo założyć, że jest wypełniony wartością 0,1. (0 = brak krawędzi; 1 = istnieje krawędź) Użyjmy następującej algebry z 3 wartościami (0,1,2), gdzie wszystko działa jak zwykle oprócz: 2 + <something> = 2 ; 2 <cokolwiek większego niż 0> = 2A2+<something>=22<whatever greater than 0>=2

Tak więc, jeśli istnieją dwie ścieżki o tej samej długości od oczekuję, że istnieje wartość p taka, że ( A p ) i , j = 2 .i,jp(Ap)i,j=2

Niech jest liczbą wierzchołków na wykresie (lub, powiedzmy, że A ma wymiar n × n ). Nie znam wartości p , ale jeśli iteruję A , mnożąc się przez co najwyżej n 2, powinienem znaleźć odpowiedź. (więc p < n 2 ) (sens polega na tym, że sprawdzam A , następnie sprawdzam A 2 , następnie sprawdzam A 3 i tak dalej ...)nAn×npAn2p<n2AA2A3

oto moja argumentacja:

  • jeśli dwie ścieżki są ścieżkami prostymi, to działa; jeśli są, co najwyżej muszę iterować razy.n
  • Jeśli jest co najmniej jeden cykl zerowania lub jest ścieżka z dwoma cyklami, cóż, muszę znaleźć najmniejszą wspólną wielokrotność (LCM). jest z pewnością większą wartością i w mniej niż n 2 razy, jeśli istnieje, powinienem je znaleźć.n2n2
  • Jeśli dwie ścieżki są dwiema różnymi ścieżkami, obie z jednym cyklem, to jest mniej więcej podobne do znalezienia rozwiązania dla tych dwóch równań: , gdzie m i k są długością tych dwóch różnych cykle Mnożenie macierzy A q , jak zdefiniowano powyżej, mówi „czy istnieje ścieżka od i do j, której długość wynosi q ?” Tak więc, jeśli A q jest większe niż 1 , oznacza to, że istnieje więcej ścieżek prowadzących od i do j . Poprzez iterację macierzy nα+βm=γ+δkmkAqijqAq1ij razy przechodzimy przez wszystkie możliwe kombinacje δ i β . Rzeczywiście, L C M ( a , b ) jest zdefiniowane jako ( a b ) / G C D ( a , b ) i żaden cykl nie może być większy niż n .n2δβLCM(a,b)(ab)/GCD(a,b)n

Zatrzymuję się na iteracji, gdy znalazłem .(Ap)i,j=2

czy się mylę?

Paolo Parisen T.
źródło
Próbowałem tego samego i napotkałem pewne problemy / niepewności: 1) Co zrobić, jeśli ścieżki są połączone z więcej niż jednym cyklem? Czy musisz „sprawdzać” wszystkie kombinacje (w najgorszym przypadku każdy węzeł ma wykładniczo wiele cykli!), Wysadzając górną granicę, czy też wystarczy rozważyć tylko jeden dla każdego? 2) Czy ze względu na stałe przesunięcia i γ LCM jest naprawdę górną granicą? αγ
Raphael
Nawiasem mówiąc, nie ma potrzeby funky algebry: wystarczy zatrzymać moment, w którym obliczasz jako wejście do macierzy. 2
Raphael
n2nαγLCM(a,b)+α+γ<ab+α+γα+γ+a+b<nab+α+γn2