Niech będzie grafem ukierunkowanym acyklicznie, tak że out-out dowolnego wierzchołka to O ( log | V | ) . Dla każdego wierzchołka G możemy policzyć liczbę osiągalnych wierzchołków, po prostu uruchamiając dfs z każdego wierzchołka, a to zajmie czas O ( | V | | E | ) . Czy istnieje lepszy sposób na rozwiązanie tego problemu?
11
Odpowiedzi:
Najlepszy dokładny algorytm zadziała w czasie O (min {mn, n ^ 2,38}) przy użyciu szybkiego mnożenia macierzy binarnej. Istnieje jednak algorytm losowy, który działa w czasie O (m + n) i szacuje liczbę osiągalnych węzłów z każdego węzła z niewielkim błędem względnym, zapoznaj się z dokumentem „ Szacunek rozmiaru z aplikacjami do przejściowego zamykania i osiągalności przez Edith Cohen.
źródło
Nie jestem tutaj ekspertem, spróbuję.
1) Ponieważ jest to DAG, powinien mieć wierzchołek zlewu, tzn. Wierzchołek z liczbą zerową 0. Znajdź wierzchołek zlewu powiedz x i dodaj {x} jako osiągalny wierzchołek do Neighbor (x). usuń x i powtarzaj proces, aż wykres stanie się pusty
źródło
(Podobne do rozwiązania Prabu ... ale bardziej szczegółowe)
źródło