Liczba osiągalnych wierzchołków w DAG dla każdego wierzchołka


11

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?G(V,E)O(log|V|)GO(|V||E|)



1
@Radu czy to prosty duplikat? to tak brzmi
Suresh Venkat

@Suresh, w porównaniu do mojego pytania, ta ma górną granicę stopnia wierzchołka i nie prosi o dolne granice. Są to, moim zdaniem, niewielkie różnice, więc uważam to za duplikat, ale nie czuję się mocno.
Radu GRIGore

1
ok, więc zostawimy to tak, jak jest.
Suresh Venkat,

4
Odpowiedź virgiego na moje pytanie oznacza dla tego algorytm . O(|V|2)
Radu GRIGore

Odpowiedzi:



-1

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


Ponieważ out-stopień jest ograniczony, bardziej przydatne byłoby zacząć od źródła?
András Salamon,

@ andras-salamon: nie, ponieważ nie wiadomo, ile węzłów jest dostępnych ze źródła. Nie robisz tego (zero) dla zlewu.
Martin B.

O(|V||E|)xO(|V|)O(|V|)O(|V|)O(|V||E|)

-2

(Podobne do rozwiązania Prabu ... ale bardziej szczegółowe)

N(v)vreach(v)

  1. O(|V|+|E|)
  2. vreach(v)=nN(v)reach(n)

|E|O(|V|+|E|)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.