2009-06-12 4 views

답변

10

당신은이 그래프에서 가장 먼 연결된 노드 사이의 단락 지을 알아낼 정확히 측정입니다 diameter of the graph. 을 측정하고자합니다.

Google의 알고리즘이 많습니다. Boost graph도 있습니다.

+0

6도가 최대입니까 평균입니까? 내가 읽은 실제 분석의 대부분은 평균이 아닌 평균을 사용합니다. –

+0

"6 도의 분리"라는 일반적인 개념은 최대 값이라는 것입니다. 물론 현실에서는 그렇지 않습니다. 그런 식으로 말하면 반박하는 것이 더 인상적입니다. –

4

아마도 그래프를 메모리에 저장할 수 있습니다 (각 버텍스가 이웃들의 목록을 알고 있다는 표현으로).

각 정점 n에서 깊이 6까지 너비 우선 탐색 (대기열 사용) 및 방문한 정점 수를 계산할 수 있습니다. 모든 꼭지점을 방문한 것이 아니라면, 당신은 정리를 반증했습니다. 다른 경우에는 다음 버텍스 n으로 계속하십시오.

사용자가 평균 100 개의 연결을 갖는 경우 O (N * (N + #edges)) = N * (N + N * 100) = 100N^2이며 N은 2,000 만에 이상적입니다. 언급 한 라이브러리가 더 나은 시간 복잡도 (일반적인 알고리즘은 O (N^3))에서 지름을 계산할 수 있는지 궁금합니다.

개별 정점에 대한 계산은 독립적이므로 병렬로 수행 할 수 있습니다.

약간의 경험적 연구 : 가장 낮은 학위를 가진 꼭지점부터 시작하십시오 (정리를 반증 할 수있는 더 좋은 기회).

+0

이것은 O (n^2)보다 상당히 나쁘다고 생각합니다. 심지어 각 노드가 3 개의 다른 노드에만 연결되었다고 가정하면 깊이 6의 스택 추적은 3 * 2^0 + 3 * 2^1 + 3 * 2^2 + 3 * 2^3 + 3 * 2^4 + 3 * 2^5. 지수 성장 – patros

+1

각 꼭지점마다 최대 한 번씩 각 꼭지점을 방문하므로 하나의 꼭지점에 대한 실행에는 O (N)이 필요합니다. –

+1

아, 사실, 그게 한계입니다. 나는 이것이 아직도 O (N^3)라고 생각한다. 그렇지 않니? 정점 A에서 정점 B까지의 경로를 찾으면 O (N)이므로 O (N^2) 번 수행해야합니다. – patros

2

가장 효율적인 방법 (최악의 경우)이 거의 N^3이라고 생각합니다. 인접 행렬을 만들고^2,^3,^4,^5 및^6 행렬을 가져옵니다. 매트릭스에서 행렬^6을 통해 0 인 그래프의 항목을 찾습니다.

경험적으로 하위 그래프 (상대적으로 적은 수의 "브리지"노드로 다른 덩어리에만 연결되어있는 사람들의 큰 덩어리)를 추출 할 수는 있지만 절대적으로 보장 할 수는 없습니다.

+0

메모리 크기가 20x20 million 인 인접성 매트릭스를 구축 할 수 없습니다. 또한, 곱셈은 O (N^3)이고, N은 2,000 만입니다. –

+0

strassen 알고리즘의 경우 대략 정사각형이기 때문에 대략 n^2.8입니다. 또한 전체 matix를 메모리에 유지할 필요가 없으며 적극적으로 곱하는 부분 만 유지해야합니다. 나머지는 디스크에 놓습니다. – patros

+0

순진한 접근을 위해서는 400 TB가 필요합니다. 압축을위한 많은 공간. – patros

2

더 나은 대답은 이미 주어졌지만 내 머리 꼭대기에서 O (n^3) 인 모든 쌍의 최단 경로 알고리즘 인 Floyd-Warshall으로 갔을 것입니다. 나는 그래프 직경 알고리즘의 복잡성을 확신 할 수 없지만, 이것 또한 O (n^3)와 같은 "소리"처럼 들린다. 나는 누군가가 알면 이것을 명확히하고 싶습니다.

사이드 노트에는 실제로 이러한 데이터베이스가 있습니까? 무서운.