그래프의 직경을 찾는 시간 복잡성


27

그래프 지름 를 찾는 데 시간이 얼마나 복잡 합니까?G=(V,E)

  • O(|V|2)
  • O(|V|2+|V||E|)
  • O(|V|2|E|)
  • O(|V||E|2)

그래프 의 지름은 그래프의 모든 정점 쌍 사이의 최단 경로 거리의 최대 값입니다.G

어떻게해야할지 모르겠습니다. 이와 같은 문제를 해결하는 방법에 대한 완전한 분석이 필요합니다.


4
좀 더 정교하게 작성하십시오. 이 문제가 왜 관심이 있습니까? 힌트, 완전한 분석 또는 참조가 필요하십니까? 최악의 시간이나 평균 시간에 관심이 있습니까? 가요 감독? G
라파엘

@Raphael : 분명히 힌트가 필요하지 않습니다. 완전한 분석이 필요합니다. 어쨌든 내 질문을 편집했습니다.
Gigili

1
@Gigili 모든 경우에 를 의미 합니까? 그렇지 않으면 모든 것은 마지막 가능성 ( 과 같은 일반적인 그래프에 )으로 간주되며 적어도 하나의 대답이 정확하다고 가정하면 정답입니다. 추가 문제는주기가있는 그래프에서 가장 긴 경로가 없다는 것입니다. "장거리"란 무엇입니까? ΘO(|V|5)
라파엘

@Gigili 네 가지 선택은 어디에서 오는가?
uli

답변:


5

최신 정보:

이 솔루션은 정확하지 않습니다.

해결책은 불행히도 나무에 대해서만 진실하고 간단합니다! 나무의 지름을 찾는 것은 이것을 필요로하지 않습니다. 다음은 그래프에 대한 반례입니다 (직경은 4,이 를 선택하면 알고리즘이 3을 반환 함 ).v

여기에 이미지 설명을 입력하십시오


그래프가 지시되는 경우 다소 복잡하면 모든 쌍의 최단 경로에 알고리즘을 사용하는 것보다 밀도가 높은 경우에 더 빠른 결과를 주장 하는 논문이 있습니다.

그러나 나의 주요 요점은 그래프가 지시 되지 않고 음이 아닌 weigth와 관련된 경우에 관한 것입니다.

  1. 정점 선택v
  2. 찾기 되도록 최대 인d ( v , u )ud(v,u)
  3. 찾기 되도록 최대 인d ( u , w )wd(u,w)
  4. 반환d(u,w)

그것의 복잡성은 두 개의 연속적인 넓이의 첫 번째 탐색 ¹과 동일하다 . 즉, 그래프가 연결되어 있다면 ²O(|E|)

그것은 민속적인 것처럼 보였지만 지금은 여전히 ​​참조를 얻 거나 그 교정을 증명하기 위해 고심하고 있습니다. 이 목표 중 하나를 달성하면 업데이트하겠습니다. 내가 지금 답변을 게시하는 것은 매우 간단 해 보입니다. 아마 누군가가 더 빨리 얻을 수 있습니다.

그래프가 가중되는 경우 ¹, 위키 피 디아는 말을 보인다 하지만 난에 대해 단지 확신 .O ( | E | log | V | )O(|E|+|V|log|V|)O(|E|log|V|)

² 그래프가 연결되어 있지 않으면 되지만 연결된 각 구성 요소에서 하나의 요소를 선택 하기 위해 를 추가해야 할 수도 있습니다 . 이것이 필요한지 확실하지 않으며 어쨌든이 경우 직경이 무한하다고 결정할 수 있습니다.O(|V|+|E|)O(α(|V|))


지정된 시간 내에 Dijsktra 작업을 수행하려면 일반적인 구현이 아닌 피보나치 힙을 사용해야합니다.
Suresh

8
이것은 강력하게 잘못된 대답입니다.이 알고리즘은 민속적이지만 나무에서는 일반적인 그래프가 아닙니다. 추신 : 귀하의 카운터 예를 볼 수 있지만 답변으로 표시되는 것은 좋은 답변이 아닙니다.

잘못된 솔루션에 대한 두 가지 질문이 있습니다. 1. 이것은 적어도 정답이 있어야하는 범위를 제공합니까? 예를 들어, 방법이 지름 d를 찾으면 올바른 해가 d2d 사이에 있습니까? 2. 다른 간접 지시를 추가하고 간접 지시에 의해 발견 된 모든 노드를 고려하면 어떻게됩니까? 포스트에 주어진 카운터 예제는 진정한 주변 정점이 두 번째 간접적으로 찾은 노드 중 하나이므로 작동합니다.
mafu

32

난 당신이 의미하는 가정 직경 의 최단 경로에서 발견 된 가장 긴 .GGG

가장 짧은 경로를 모두 찾아서 찾은 최대 길이를 결정하면 직경을 찾을 수 있습니다. Floyd-Warshall 알고리즘 은 시간 안에이를 수행합니다. 시간 을 달성하기 위해 Johnson의 알고리즘 을 구현할 수 있습니다 .Θ(|V|3)O(|V|2log|V|+|V||E|)

고려할 거리가 있고 각각이 힘들어 질 서브 라인 (아마존 화) 시간으로 그 거리를 계산 하기 때문에 최악의 런타임 한계는 더 작게 달성하기 어려운 것 같습니다 . 관련 범위는 여기 를 참조 하십시오 . 참고 다른 접근 방식을 사용하고 (약간) 알고리즘을 빠르게 획득 용지.O(|V|2)


2
해당 논문에 월급을 받으면 Google Scholar를 확인하십시오.
라파엘

또한이 예외는 방향이없는 나무에 주목할 가치가 있습니다. 한 번의 dfs 통과로.
azam

15

대수 그래프 이론적 접근을 고려할 수도 있습니다. 직경 최소 정수 성을 행렬 모든 항목이 있다는 속성 갖고 제로가있다. 행렬 곱셈의 반복으로 를 찾을 수 있습니다 . 그런 다음 지름 알고리즘은 시간이 필요합니다. 여기서 은 행렬 곱셈의 경계입니다. 예를 들어 Vassilevska Williams의 Coppersmith-Winograd 알고리즘을 일반화하면 직경 알고리즘은 됩니다. 빠른 소개는 Fan Chung의 책 3 장을 참조 하십시오 .diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)O(n2.3727logn)

주의를 적합한 그래프 클래스로 제한하면 최적의 시간에 APSP 문제를 해결할 수 있습니다 . 이 클래스에는 최소한 구간 그래프, 원호 그래프, 순열 그래프, 이분자 순열 그래프, 강렬한 코드 그래프, 코드 이분자 그래프, 거리 유전 그래프 및 이중 화음 그래프가 포함됩니다. 예를 들어 Dragan, FF (2005)를 참조하십시오 . 제한된 그래프 패밀리에서 모든 쌍의 최단 경로 추정 : 통합 접근법. 알고리즘 저널, 57 (1), 1-21 및 그 참고 문헌.O(n2)


2
이 알고리즘은 가중치가없는 경우에만 작동한다는 점은 주목할 가치가 있습니다.
GMB

-2

가정 :
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로 가져옵니다. 그래서 우리는 현재 최대 직경을 갖게 될 것입니다.

실행 시간 분석 :

  1. DFS를 사용하는 O (| E |)
  2. DFS를 사용하는 O (| E |)
  3. BFS는 O (| E |) 시간에 실행됩니다.
  4. 각 정점마다 BFS 함수를 호출해야하므로 총 O (| V || E |) 시간이 걸립니다.

총 시간 = O (| v || E |) + O (| E |) + O (| E |)
| V || E | > | E |
그래서 우리는 O (| v || E |)로 실행 시간을 갖습니다.

BFS
DFS

참고 : 이것은이 문제에 대한 우아한 해결책이 아닙니다.


비순환 연결된 그래프는 트리로, 문제가 더 쉽습니다 (직경이 가장 긴 경로로 주어지기 때문에). 더 빠른 알고리즘이 제공되는 여기여기 에서 처리되었습니다 . (한 재귀 순회 또는 대체 BFS이면 충분합니다.)
Raphael

1
@Raphael 아니오, 비순환 무 방향 그래프는 나무입니다. DAG는 DAG입니다.
David Richerby

@DavidRicherby 맞습니다. (기술적으로는 정답 또는 방향이 지정되지 않은 사이클을 제외하면 대답이 나오지 않습니다.)) 어쨌든, 이것은 이전 답변에서 이미 일반적인 경우에 적용되었던 APSPP (순진한 접근 방식)를 해결하는 것입니다.
라파엘

@Raphael 비순환 그래프가 나무인지 확실합니까? Graph is Acyclic은 그래프가 항상 트리임을 의미하지는 않습니다. 트리는이 경우의 특별한 경우 일 뿐이며,이 알고리즘은 간단한 알고리즘이며 시간 복잡도는 O (| V || E |)입니다.
sonus21

예, 확실합니다. (아마도 당신은 뿌리 가 다른 나무를 생각하고 있습니다. 다른 맛입니다.)
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.