본문 바로가기

Development

Kruskal 알고리즘을 사용한 최소 신장 트리 찾기와 C# 구현

안녕하세요! 오늘의 기술 면접 지식은 그래프 이론의 한 부분인 Kruskal 알고리즘에 관한 것입니다. 이 포스팅에서는 Kruskal 알고리즘의 기본 개념과 C#으로 구현한 예제 코드를 살펴봅니다.

 

  1. Kruskal 알고리즘 개요 Kruskal 알고리즘은 가중치가 있는 무방향 그래프에서 최소 신장 트리를 찾는 알고리즘입니다. 최소 신장 트리는 그래프의 모든 정점을 연결하는데 필요한 최소 비용을 갖는 트리입니다.
  2. C#을 사용한 Kruskal 알고리즘 구현 아래 예제 코드는 Kruskal 알고리즘을 C#으로 구현한 것입니다.

 

public class UnionFind
{
    private int[] parent;

    public UnionFind(int size)
    {
        parent = new int[size];
        for (int i = 0; i < size; i++)
        {
            parent[i] = i;
        }
    }

    public int Find(int x)
    {
        if (parent[x] == x)
        {
            return x;
        }
        else
        {
            parent[x] = Find(parent[x]);
            return parent[x];
        }
    }

    public void Union(int x, int y)
    {
        int rootX = Find(x);
        int rootY = Find(y);

        if (rootX != rootY)
        {
            parent[rootY] = rootX;
        }
    }
}

public static List<Tuple<int, int, int>> Kruskal(List<Tuple<int, int, int>> edges, int numVertices)
{
    edges.Sort((x, y) => x.Item3.CompareTo(y.Item3));
    UnionFind uf = new UnionFind(numVertices);

    List<Tuple<int, int, int>> result = new List<Tuple<int, int, int>>();

    foreach (var edge in edges)
    {
        int u = edge.Item1;
        int v = edge.Item2;

        if (uf.Find(u) != uf.Find(v))
        {
            uf.Union(u, v);
            result.Add(edge);
        }
    }

    return result;
}

 

이 코드는 그래프의 간선들을 가중치의 오름차순으로 정렬한 뒤, Union-Find 자료구조를 사용하여 최소 신장 트리를 찾습니다.

 

Kruskal 알고리즘은 최소 신장 트리를 찾는 데 사용되는 중요한 알고리즘입니다. 기술 면접에서 그래프 이론과 Kruskal 알고리즘에 대한 질문이 나올 경우, 이러한 원리와 구현 예시를 활용하여 답변할 수 있습니다. 다음 포스팅에서 또 다른 주제로 찾아뵙겠습니다!