2014-04-08 2 views
4

이 질문을 통해 인접 목록 표현에서 그래프의 각 노드의 속도를 계산해야했습니다.근접도 목록에서 그래프 속도 계산

for each u 
    for each Adj[i] where i!=u 
    if (i,u) ∈ E 
     in-degree[u]+=1 

지금 날에 따라 그 시간 복잡도는 O(|V||E|+|V|^2)되어야하지만 언급 용액 대신 O(|V||E|)는 동일하게 기재.

어떤 것이 맞는지 말해주세요.

답변

7

O (| V || E |)보다는 오히려 계산의 복잡도는 O (| E |)입니다.

for each u 
    indegree[u] = 0; 

for each u 
    for each v \in Adj[u] 
    indegree[v]++; 

첫 번째 루프는 선형 복잡성 O (| V |)를가집니다. 두 번째 부분 : 각 v에 대해, 가장 안쪽의 루프는 최대로 | E |를 실행합니다. 가장 바깥 쪽 루프는 | V | 타임스. 따라서 두 번째 파트는 복잡성 O (| V || E |)를 갖는 것으로 나타납니다. 실제로 코드는 각 모서리에 대해 한 번만 연산을 수행하므로보다 정확한 복잡도는 O (| E |)입니다.

+0

나는 분명하지 않다. 두 번째 부분의 외부 루프는 | V | 시간과 우리는 그것을 바로 피할 수 없어? 나는 그때 어떻게 O. VE | O | E |가된다. ? – vijayashankard

+0

예 외부 루프는 | V | 시간이지만 내부 루프의 실행은 해당 정점에 인접한 모서리의 수에 의존합니다. | E |보다 작습니다. (완전한 그래프 경우 제외). 이것을 시각화하려면, 모든 가장자리를 바라 보는 것 같이 동경을 찾는 것을 생각하십시오. 그래서 복잡도는 비례 적이 지요. 그래프의 모서리 수는 O (| E |)입니다. – smasher

+0

안녕하세요, O (| E |)가되어야한다고 생각합니다. 하지만 말했듯이 바깥 쪽 루프는 | V |를 실행합니다. 타임스. 따라서 복잡도 계산을 수행하는 동안 아무 일도 일어나지 않는 루프를 고려하지 않습니까? 'for i in (0, n) : do nothing'처럼 복잡성은'n' 또는'1'입니까? – Anshul