위와 같은 입력이 주어졌을 때, 모든 컴퓨터를 연결할 수 있는 최소 비용을 찾는 문제입니다.
풀이
MST를 찾는 문제입니다.
MST는 Minimum Spanning Tree 최소 신장트리를 뜻하며, 모든 정점을 잇는 최소 비용의 트리입니다.
MST를 찾기 위해서 크루스칼(kruskal) 알고리즘을 사용합니다.
크루스칼 알고리즘 1. 비용순으로 edge들을 정렬한다. 2. 두 정점의 최상위 정점을 확인하고 서로 다를 경우 정점을 연결한다. - 여기서 주의할 점은 사이클이 생기지 않아야 한다. 3. 모든 정점이 포함되면 종료한다.
크루스칼 알고리즘에는 Union-Find 알고리즘이 사용됩니다.
모든 원소를 개별 집합으로 두고 두 집합을 하나로 합추는 방식을 뜻합니다. Union = 두 집합을 하나의 집합으로 합침 Find = 각 집합의 루트노드를 확인 Union 하는 순서에따라 최악의 경우 아래와 같이 root까지 찾아가야 하는 경우가 생김. 그래서 path compression과 union-by-rank 방식을 사용합니다. path-compression은 a-b-c-d를 루트에 다이렉트로 연결하여 a - b, c, d처럼 만드는 것 union-by-rank은 Union시 두 트리의 높이(rank)가 다르면, 높이가 작은 트리를 높이가 큰 트리에 붙임