탐욕적인 방법(greedy method) 을 이용하여
네트워크(가중치를 간선에 할당한 그래프)의 모든 정점을 최소 비용으로 연결하는 최적 해답을 구하는 것
1) cost 기준으로 오름차순 정렬
2) 정렬된 그래프를 기준으로 간선연결
- 간선은 필요한 간선만 연결
- 필요한 간선이란? 기 연결된 정점은 해당 간선을 이용해 연결하지 않는다
즉, 어떤 두 정점이 연결됐는지 안됐는지 확인하는 연산필요 -> union find 이용
1) find(a) != find(b) => 연결 (union(a,b))
2) find(a) = find(b) => 연결 X
static long kruskal(int startIdx) {
initParent();
for (int i = startIdx; i < M; i++) {
Edge edge = list.get(i);
if (find(edge.e) == find(edge.s)) { // 같은 그룹이면 연결 안함
continue;
}
union(edge.s, edge.e); // 다른그룹이므로 연결함
}
return -1; // 연결 안되어 있음
}
'DEVELOP > ALGORITHM' 카테고리의 다른 글
단절점 (Articulation Point) (0) | 2021.03.08 |
---|---|
위상정렬 (DAG - Directed Acyclic Graph) (0) | 2021.03.08 |
Union Find (서로소 집합) (0) | 2021.03.08 |
Graph 최단거리 알고리즘(4) 트리 - LCA( Lowest Common Ancestor) 최소 공통 조상 (0) | 2021.03.08 |
Graph 최단거리 알고리즘 (3) 플로이드 워셜 (0) | 2021.03.08 |