모든 정점에 대해 DAG의 도달 가능한 정점 수


11

하자 에서도 모든 정점이되도록, 비순환 방향 그래프 수 O ( 로그 | V | ) . G의 모든 정점에 대해 모든 정점 에서 dfs 를 실행하는 것만으로 도달 가능한 정점의 수를 계산할 수 있으며 O ( | V | | E | ) 시간이 걸립니다. 이 문제를 해결하는 더 좋은 방법이 있습니까?G(V,E)O(log|V|)GO(|V||E|)



1
@Radu 이것은 곧장 중복입니까? 그것은 같은 소리 않습니다
수레 쉬 벤 카트를

@Suresh, 내 질문과 비교할 때이 질문은 정점 정도의 상한이 있으며 하한을 요구하지 않습니다. 이것들은 내 의견에 약간의 차이가 있으므로 복제본으로 생각하지만 강하게 느끼지 않습니다.
Radu GRIGore

1
알겠습니다. 그대로 두겠습니다.
Suresh Venkat

4
내 질문에 대한 virgi의 대답은 이것에 대한 알고리즘을 암시합니다 . O(|V|2)
Radu GRIGore

답변:



-1

나는 여기서 전문가가 아닙니다.

1) DAG이므로 싱크 정점 즉, 0이 0 인 정점을 가져야합니다. x라고하는 싱크 정점을 찾고 {x}를 도달 가능한 정점으로 Neighbor (x)에 추가합니다. x를 제거하고 그래프가 비워 질 때까지 프로세스를 반복하십시오.


외교 가 제한 되어 있기 때문에 소스로 시작하는 것이 더 유용한 것 같습니까?
András Salamon

@ andras-salamon : 아니요. 소스에서 도달 할 수있는 노드 수를 사소하게 알 수 없기 때문입니다. 싱크대에 대해서는 그다지 제로가 아닙니다.
Martin B.

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

-2

(Prabu 솔루션과 유사하지만 더 자세한 내용)

N(v)vreach(v)

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.