2011-08-02 8 views

답변

2

Wikipedia에 따르면 그래프의 직경을 계산하려면 먼저 모든 쌍의 최단 경로를 찾아야합니다. 모든 쌍 최단 경로를 계산 한 후에 두 알고리즘 모두 O (V^2) 계산으로 축소되므로 계산 복잡도는 동일합니다.

0

아니요 둘 사이의 시간 복잡도에 차이가 없어야합니다.

가장 짧은 경로 인 algo를 조정하여 두 꼭지점 간의 가장 긴 경로를 찾을 수 있습니다.

1

나는이 주제에 관한 많은 문헌을 읽지 않았지만 나는 둘이 동일하다고 생각한다. 그러나 불일치가 있다면, 그래프의 직경을 계산하는 것이 점근적으로 빠를 것이라고 말할 수 있습니다.

내 알고리즘은 모두 V*(E+V*log(V))에서 실행되는 Dijkstra 알고리즘을 사용하여 모든 쌍 최단 경로를 계산하는 것입니다. 그런 다음이 모든 값에 대해 산술 평균을 취합니다. 나는 당신이 이것을 빠르게 할 수있는 방법을 보지 못합니다.

그러나 그래프의 직경을 계산할 때이 프로세스의 속도를 높이는 데 사용할 수있는 영리한 트릭이있을 수 있습니다. 그러나 상한선으로, 모든 쌍의 최단 경로를 통해 상향 점을 취하면 지름을 구할 수 있습니다.이 평균 직경은 평균 최단 경로 계산과 동일한 런타임 복잡성이 있습니다.

+0

Dijkstra의 알고리즘은 단일 소스 최단 경로 만 계산하며 모든 쌍 최단 경로는 계산하지 않습니다. 모든 쌍의 최단 경로를 계산하는 Dijkstra 알고리즘의 수정은 Johnson의 알고리즘이며, Floyd-Warshall을 능가하는 경우도 있습니다. – templatetypedef

+0

모든 단일 소스에서 Dijkstra 알고리즘을 실행하십시오. FW보다 여전히 빠릅니다. – tskuzzy

+0

@ tskuzzy- Johnson의 알고리즘은 본질적으로 그래프를 전처리 한 후에 음의 - 가장자리를 제거합니다. :-) – templatetypedef

관련 문제