Czy sprawdzenie przechodniości digrapha nie jest łatwiejsze niż (pod względem asymptotycznej złożoności) przyjęcie przejścia przechodniego digrapha? Czy znamy dolną granicę lepiej niż aby ustalić, czy digraf jest przechodni?
Czy sprawdzenie przechodniości digrapha nie jest łatwiejsze niż (pod względem asymptotycznej złożoności) przyjęcie przejścia przechodniego digrapha? Czy znamy dolną granicę lepiej niż aby ustalić, czy digraf jest przechodni?
Odpowiedzi:
Poniżej pokażę: jeśli masz O () algorytm czasowy do sprawdzania, czy wykres jest przechodni dla dowolnego , masz O () algorytm czasowy do wykrywania trójkąta w wykres węzłów, a zatem (na papierze z FOCS'10 ) miałbyś O () algorytm czasowy do pomnożenia dwóch wartości logicznych macierze, a zatem w wyniku Fischera i Meyera z lat 70. , oznacza to również O () algorytm czasowy zamknięcia przechodniego.
Załóżmy, że chcesz wykryć trójkąt w węzeł . Możemy teraz utworzyć następujący wykres. jest trójstronny z partycjami na węzły każdy. Tutaj każdy węzeł z ma kopie W części . Dla każdej krawędzi z dodaj skierowane krawędzie i . Dla każdego nonedge z dodaj skierowaną krawędź .
Po pierwsze, jeśli zawiera trójkąt , następnie nie jest przechodnie. Wynika to z krawędzi są w ale nie jest. Po drugie, jeśli nie jest przechodnie, więc musi istnieć jakaś ukierunkowana ścieżka z jakiegoś węzła do jakiegoś węzła w takie, że nie jest ukierunkowaną krawędzią . Najdłuższe ścieżki w mieć krawędzie, więc każda taka ścieżka musi mieć formę i nie jest w , W związku z tym uformować trójkąt w .
Tak to wygląda jest najlepiej znaną dolną granicą, ponieważ dowolna dolna granica oznacza dolną granicę dla mnożenia macierzy boolowskiej. Wiemy, że kontrolę przechodniości można uzyskać za pomocą jednego mnożenia macierzy boolowskiej, to znaczy jest przechodnie, jeśli i tylko jeśli .
Ustalenie, czy DAG jest przechodnie, jest tak trudne, jak podjęcie decyzji, czy ogólny digraf jest przechodni (co przywraca nas do poprzedniego pytania :)).
Załóżmy, że masz algorytm działający w czasie do decydowania, czy DAG jest przechodnie.
Biorąc pod uwagę ukierunkowany wykres , możesz użyć następującego losowego algorytmu, aby zdecydować, czy jest przechodni w czasie i prawdopodobieństwo błędu :
1. for $O(\log{\frac{1}{\delta}})$ iterations:
1.1. Compute a random permutation on $V$. Denote the result by $<v_1,v_2,...,v_n>$.
1.2. Set $G'=(V,E\cup \{(v_i,v_j)|i<j\})$ (i.e. compute a random acyclic orientation).
1.3. If $G'$ (which is acyclic) is not transitive return false.
2. return true.
Teraz jest oczywiste, że jeśli był przechodni, ten algorytm zwraca true.
Załóżmy teraz nie był przechodni. Pozwolić takie, że (muszą być takie krawędzie jak nie jest przechodni). Prawdopodobieństwo, że jest , dlatego w każdej iteracji prawdopodobieństwo obliczenia algorytmu nie był przechodni i po iteracje prawdopodobieństwo awarii jest co najwyżej .
Myślę, że powinno to być wykonalne w czasie liniowym, tj gdzie to liczba wierzchołków i liczba krawędzi. Może dostosowując schemat przejścia wykresu do ukierunkowanego ustawienia? Punktem wyjścia może być opisany tutaj LexBFS / LexDFS ; w przypadku grafów ukierunkowanych wydaje się, że powinniśmy używać sortowania topologicznego zamiast DFS, więc może jest to możliwe przy użyciu jakiegoś algorytmu LexTSA ?
Jeśli chodzi o poprzednią odpowiedź, oto prosty sposób zdefiniowania takiego algorytmu. Przypisz do każdego wierzchołka indeks , zainicjowano na . Dla każdego, pozwolić oznaczają zbiór wskaźników jego sąsiadów. Symulujemy sortowanie topologiczne, utrzymując zestawniezbadanych wierzchołków, zainicjowanych do całego zestawu. Na każdym kroku wykonujemy następujące czynności:
Wybierz wierzchołek którego multiset jest minimalny (w kolejności wielosetowej);
Aktualizacja do bieżącego licznika pętli i usuń od .
Czy można zastosować ten algorytm do rozwiązania problemu lub do innej aplikacji?