이번 포스트에서는 파이썬으로 크루스칼 알고리즘을 구현해 보도록 하겠습니다.
(게시글의 자료들은 잔재미코딩(https://www.fun-coding.org/Chapter20-prim-live.html) 사이트를 참조하였습니다)
먼저 앞선 포스트에서 다룬 그래프를 다음과 같은 그래프를 딕셔너리 형태로 구현하도록 하겠습니다.
이제 구현까지 살펴 보았으니 시간복잡도를 살펴봅시다.
시간 복잡도
- 크루스컬 알고리즘의 시간 복잡도는 O(E log E)
- 다음 단계에서 2번, 간선을 비용 기준으로 정렬하는 시간에 좌우됨
(즉 간선을 비용 기준으로 정렬하는 시간이 가장 많이 든다) - 모든 정점을 독립적인 집합으로 만든다. - 복잡도 O(V)
- 모든 간선을 비용을 기준으로 정렬하고, 비용이 작은 간선부터 양 끝의 두 정점을 비교한다.
- 퀵소트를 사용한다면 시간 복잡도는 O(n log n) 이며, 간선이 n 이므로 O(E log E)
- 두 정점의 최상위 정점을 확인하고, 서로 다를 경우 두 정점을 연결한다. (최소 신장 트리는 사이클이 없으므로, 사이클이 생기지 않도록 하는 것임)
- union-by-rank 와 path compression 기법 사용시 시간 복잡도가 결국 상수값에 가까움, O(1)
- 다음 단계에서 2번, 간선을 비용 기준으로 정렬하는 시간에 좌우됨
이상으로 크루스칼 알고리즘에 대한 포스트를 마치도록하겠습니다.
'알고리즘 > 알고리즘 이론' 카테고리의 다른 글
[알고리즘, C++]백 트래킹 (Backtracking) (0) | 2020.05.09 |
---|---|
[알고리즘, 파이썬] 프림 알고리즘 - 2 (0) | 2020.04.27 |
[알고리즘 , 파이썬] 프림 알고리즘 - 1 (0) | 2020.04.27 |
[알고리즘, 파이썬] 크루스칼 알고리즘 - 2 (0) | 2020.04.23 |
[알고리즘 , 파이썬] 크루스칼 알고리즘 - 1 (0) | 2020.04.23 |