알고리즘/알고리즘

알고리즘 강의 19일차 - 최소 신장 트리(Kruskal)

Jayy 2023. 3. 30. 21:07

오늘은 최소신장 트리와 알고리즘에 대해 수강하였다.

최소 신장 트리란?

신장트리란 그래프 내 모든정점을 포함하는 최소연결부분 그래프이다. 최소한의 간선으로 모두 연결된 그래프라고 생각하면 된다. 최소신장트리는 최소한의 간선으로 모든정점이 연결되어있어야 하고, 모든 신장 트리 중 가중치값이 최소이며 사이클이 발생해서는 안된다.

크루스칼 알고리즘은 그리디 개념으로 구현할 수 있고, 모든 그래프를 부분 집합으로 분리한다.

가장 가중치가 낮은 간선을 선택하고 부분 집합을 연결한다.

Union-Find 알고리즘을 통해 사이클을 방지할 수 있다.

Union-Find 알고리즘 이란 서로 다른 두 집합을 합쳐주는 Union이라는 로직과 집합의 원소가 어떤 집합에 속해있는지 

판단하는 Find로직을 통해 판단해주는 데이터셋이라고 할 수 있다.

Union 연산의 예시는 아래와 같다.

초기에는 자기 자신을 부모 정점으로 설정하고, 특정 정점이 시작 정점에 속할 경우 간선의 방향을 부모정점으로 옮긴다.

아래에는 B가 A의 속할 경우로 표기 된걸 볼 수  있다.

D가 B에 속할경우 B의 부모정점인 A를 D의 부모로 설정한다.

집합의 최상위 요소를 부모로 설정한다는 뜻이다.

위와 같은 방법으로 계속 진행 해 나가다보면 집합이 완성되지만, 각원소가 어떤 집합에 속해있는지 알 수 없다.

 

 

Find 연산은 아래와 같이 동작한다.

 

이미지 출처: https://school.programmers.co.kr/learn/courses/13213/13213-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B4%91%ED%83%88-%EB%B0%A9%EC%A7%80-a-to-z-javascript