약 1 년 전에 친구와 나는 밀도가 높은 그래프에 대한 Kruskal 알고리즘을 일반적인 경계 보다 미리 구현하는 방법을 생각했습니다 (사전 정렬 된 가장자리를 가정하지 않음). 특히, 인접 행렬을 사용하여 구현할 때 Prim과 유사하게 모든 경우에 를 달성 합니다.
C ++ 코드 및 벤치 마크를 포함하여 블로그 의 알고리즘 에 대해 약간 게시 했지만 일반적인 아이디어는 다음과 같습니다.
연결된 각 구성 요소마다 하나의 대표 노드를 유지하십시오. 처음에는 모든 노드가 자신을 나타냅니다.
dist[i]
모든 구성 요소i
에 대해 가장 밝은 구성 요소 교차 모서리가 입사하도록 벡터를 유지하십시오i
.파티션을 가로 지르는 가장 밝은 모서리를 찾을 때 간단히 선형 시간으로
i
가중치를 최소화하십시오dist[i]
.
가장 가벼운 에지의 수축 및 상기 에지의 발견은 모두 선형 시간으로 수행 될 수있다. 우리는 MST를 찾기 위해이 번을합니다. MST에 추가하려는 에지를 실제로 찾으려면 약간의 부기가 필요하지만 복잡성을 증가 시키지는 않습니다. 따라서 런타임은 입니다. 구현은 단지 두 개의 for 루프입니다.
이 버전의 Kruskal은 문헌에 잘 알려져 있습니까?