Szukam algorytmu O (V + E) do znajdowania redukcji przechodnich przy danym DAG.
To oznacza usunięcie jak największej liczby krawędzi, abyś mógł dosięgnąć v od ciebie, dla dowolnych v iu nadal możesz sięgnąć po usunięciu krawędzi.
Jeśli jest to standardowy problem, proszę wskazać mi jakieś rozwiązanie modelowe.
algorithms
graphs
dag
Karan
źródło
źródło
Odpowiedzi:
Możemy rozwiązać ten problem po prostu wykonując DFS z każdego wierzchołka.
Ogólna złożoność powyższego jest złożonością działania DFS ', czyli O ( N ( N + M ) ) .N O(N(N+M))
źródło
źródło
Lemat: Jeśli istnieje krawędź V -> Y, a Y jest także pośrednim następcą V, (np. V -> W -> + Y), to krawędź V -> Y jest przechodnia i nie jest częścią pierwiastka przechodniego.
Metoda: Śledź przechodnie zamknięcie każdego wierzchołka, pracując od wierzchołka do początkowych wierzchołków w odwrotnej kolejności topologicznej. Zbiór pośrednich następców V jest związkiem przejściowych zamknięć bezpośrednich następców V. Przejściowe zamknięcie V jest związkiem jego pośrednich następców i bezpośrednich następców.
Algorytm:
Zakłada się, że masz jakiś skuteczny sposób śledzenia zestawów wierzchołków (np. Map bitowych), ale myślę, że to założenie zostało przyjęte również w innych algorytmach O (V + E).
Potencjalnie użytecznym efektem ubocznym jest znalezienie przechodniego zamknięcia każdego wierzchołka G.
źródło
Rozwiązałem ten sam problem, ale nie był dokładnie taki sam. Poprosiłem o minimalną liczbę krawędzi na wykresie po zmniejszeniu, tak że pierwotnie połączone wierzchołki są nadal połączone i nie są tworzone nowe połączenia. Jak jest jasne, nie mówi się o znalezieniu zredukowanego wykresu, ale o tym, ile jest zbędnych krawędzi. Ten problem można rozwiązać w O (V + E). Link do wyjaśnienia to https://codeforces.com/blog/entry/56326 . Ale myślę, że tak naprawdę wykres będzie miał wysoką złożoność niż O (N)
źródło