그래프 지름 를 찾는 데 시간이 얼마나 복잡 합니까?
그래프 의 지름은 그래프의 모든 정점 쌍 사이의 최단 경로 거리의 최대 값입니다.
어떻게해야할지 모르겠습니다. 이와 같은 문제를 해결하는 방법에 대한 완전한 분석이 필요합니다.
그래프 지름 를 찾는 데 시간이 얼마나 복잡 합니까?
그래프 의 지름은 그래프의 모든 정점 쌍 사이의 최단 경로 거리의 최대 값입니다.
어떻게해야할지 모르겠습니다. 이와 같은 문제를 해결하는 방법에 대한 완전한 분석이 필요합니다.
답변:
이 솔루션은 정확하지 않습니다.
해결책은 불행히도 나무에 대해서만 진실하고 간단합니다! 나무의 지름을 찾는 것은 이것을 필요로하지 않습니다. 다음은 그래프에 대한 반례입니다 (직경은 4,이 를 선택하면 알고리즘이 3을 반환 함 ).
그래프가 지시되는 경우 다소 복잡하면 모든 쌍의 최단 경로에 알고리즘을 사용하는 것보다 밀도가 높은 경우에 더 빠른 결과를 주장 하는 논문이 있습니다.
그러나 나의 주요 요점은 그래프가 지시 되지 않고 음이 아닌 weigth와 관련된 경우에 관한 것입니다.
그것의 복잡성은 두 개의 연속적인 넓이의 첫 번째 탐색 ¹과 동일하다 . 즉, 그래프가 연결되어 있다면 ²
그것은 민속적인 것처럼 보였지만 지금은 여전히 참조를 얻 거나 그 교정을 증명하기 위해 고심하고 있습니다. 이 목표 중 하나를 달성하면 업데이트하겠습니다. 내가 지금 답변을 게시하는 것은 매우 간단 해 보입니다. 아마 누군가가 더 빨리 얻을 수 있습니다.
그래프가 가중되는 경우 ¹, 위키 피 디아는 말을 보인다 하지만 난에 대해 단지 확신 .O ( | E | log | V | )
² 그래프가 연결되어 있지 않으면 되지만 연결된 각 구성 요소에서 하나의 요소를 선택 하기 위해 를 추가해야 할 수도 있습니다 . 이것이 필요한지 확실하지 않으며 어쨌든이 경우 직경이 무한하다고 결정할 수 있습니다.
난 당신이 의미하는 가정 직경 의 최단 경로에서 발견 된 가장 긴 .G
가장 짧은 경로를 모두 찾아서 찾은 최대 길이를 결정하면 직경을 찾을 수 있습니다. Floyd-Warshall 알고리즘 은 시간 안에이를 수행합니다. 시간 을 달성하기 위해 Johnson의 알고리즘 을 구현할 수 있습니다 .
고려할 거리가 있고 각각이 힘들어 질 서브 라인 (아마존 화) 시간으로 그 거리를 계산 하기 때문에 최악의 런타임 한계는 더 작게 달성하기 어려운 것 같습니다 . 관련 범위는 여기 를 참조 하십시오 . 참고 이 다른 접근 방식을 사용하고 (약간) 알고리즘을 빠르게 획득 용지.
대수 그래프 이론적 접근을 고려할 수도 있습니다. 직경 최소 정수 성을 행렬 모든 항목이 있다는 속성 갖고 제로가있다. 행렬 곱셈의 반복으로 를 찾을 수 있습니다 . 그런 다음 지름 알고리즘은 시간이 필요합니다. 여기서 은 행렬 곱셈의 경계입니다. 예를 들어 Vassilevska Williams의 Coppersmith-Winograd 알고리즘을 일반화하면 직경 알고리즘은 됩니다. 빠른 소개는 Fan Chung의 책 3 장을 참조 하십시오 .
주의를 적합한 그래프 클래스로 제한하면 최적의 시간에 APSP 문제를 해결할 수 있습니다 . 이 클래스에는 최소한 구간 그래프, 원호 그래프, 순열 그래프, 이분자 순열 그래프, 강렬한 코드 그래프, 코드 이분자 그래프, 거리 유전 그래프 및 이중 화음 그래프가 포함됩니다. 예를 들어 Dragan, FF (2005)를 참조하십시오 . 제한된 그래프 패밀리에서 모든 쌍의 최단 경로 추정 : 통합 접근법. 알고리즘 저널, 57 (1), 1-21 및 그 참고 문헌.
가정 :
1. 그래프가 가중되지 않음
2. 그래프가 향함
O (| V || E |) 시간 복잡성.
연산:
ComputeDiameter(G(V,E)):
if ( isCycle( G(v,E) ) ) then
return INFINITY
if ( not isConnected( G(V,E) )) then
return INFINITY
diameter = 0
for each vertex u in G(V,E):
temp = BFS(G,u)
diameter = max( temp , diameter )
return diameter
설명 :
사이클을 점검합니다. 그래프에 사이클이 포함되어 있으면 루프에서 계속 움직이므로 무한 거리가 유지됩니다. 연결되어 있는지 확인합니다. 그래프가 연결되어 있지 않으면 G1의 정점 u를 G2의 정점 v로 의미합니다. 여기서 G1과 G2는 연결되지 않은 두 개의 하위 그래프입니다. 그래서 우리는 다시 무한한 거리를 가질 것입니다. BFS를 사용하여 u에서 도달 할 수있는 특정 노드 (u)와 다른 모든 노드 (v) 사이의 최대 거리를 계산합니다. 그런 다음 이전에 계산 된 최대 직경과 결과를 BFS로 가져옵니다. 그래서 우리는 현재 최대 직경을 갖게 될 것입니다.
실행 시간 분석 :
총 시간 = O (| v || E |) + O (| E |) + O (| E |)
| V || E | > | E |
그래서 우리는 O (| v || E |)로 실행 시간을 갖습니다.
참고 : 이것은이 문제에 대한 우아한 해결책이 아닙니다.