[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: MST (Prim/Dijkstra, Kruskal, ์‹œ๊ฐ„๋ณต์žก๋„)

MST

Spanning Tree

: ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ

 

 ์šฐ์„  ํŠธ๋ฆฌ์˜ ์ •์˜๋Š” connected undirected acyclic graph (์—ฐ๊ฒฐ ๋น„๋ฐฉํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์ด๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉฐ, ๋ฐฉํ–ฅ์„ฑ์€ ์—†๊ณ  ์ˆœํ™˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค.

 ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ค‘ ํŠน๋ณ„ํ•˜๊ฒŒ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ Spanning Tree๋ผ๊ณ  ํ•œ๋‹ค.

 ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด Spanning tree(์‹ ์žฅ ํŠธ๋ฆฌ)๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋ฉด์„œ ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€(์ตœ์†Œ ์—ฐ๊ฒฐ) ๊ทธ๋ž˜ํ”„์ด๋‹ค.

 

 ๊ฐ์ด ์•ˆ์˜จ๋‹ค๋ฉด ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

 

 ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์†Œํ•œ์˜ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋Š” ์ตœ์†Œํ•œ์˜ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ Spanning tree๋ผ๊ณ  ํ•œ๋‹ค.

 

ํŠน์ง•

Spanning tree๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ n๊ฐœ์˜ ์ •์ ์„ n-1๊ฐœ์˜ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค. ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„์—๋„ ๋งŽ์€ Spanning tree๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ DFS, BFS ๋“ฑ์˜ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์‘์šฉ

Spanning tree๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™” ํ•˜๋ฏ€๋กœ ๊ฐ„์„ ์— ๋“œ๋Š” ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฐ์— ๋„์›€์„ ์ค€๋‹ค. ๋”ฐ๋ผ์„œ ๋„คํŠธ์›Œํฌ๋ง ๋“ฑ์˜ ๋ถ„์•ผ์—์„œ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

MST

: Minimum Spanning Tree

Spanning Tree ์ค‘์—์„œ ๊ฐ„์„ ๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์ผ ๋•Œ๋Š” ๋‹จ์ˆœํžˆ ์ ์€ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋น„์šฉ์„ ์ ๊ฒŒ ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ ์€ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ๋„ ์ ์€ MST๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค.

 

ํŠน์ง•

MST๋Š” ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ด๋ฉฐ, Spanning tree์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

์‘์šฉ

ํ†ต์‹ ๋ง, ๋„๋กœ๋ง, ์œ ํ†ต๋ง ์—์„œ ๊ธธ์ด, ๊ตฌ์ถ• ๋น„์šฉ, ์ „์†ก ์‹œ๊ฐ„ ๋“ฑ์„ ์ตœ์†Œ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.


Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜

kruskal์€ greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ MST๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. MST์˜ ํŠน์ง• ์ค‘ (์ตœ์†Œ๋น„์šฉ), (๋น„์ˆœํ™˜) ์„ ์ง€ํ‚ค๋ฉฐ ๊ฐ ๋‹จ๊ณ„์—์„œ์˜ ์ตœ์„ ์˜ ๋‹ต์„ ํƒํ•œ๋‹ค. ๊ฐ ๋‹จ๊ณ„์˜ ์ตœ์„ ์˜ ๋‹ต์ด ์ „์ฒด์˜ ์ตœ์„ ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐ˜๋“œ์‹œ ์ฆ๋ช…ํ•ด์•ผํ•œ๋‹ค.

 

๊ณผ์ •

  1. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  2. ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ„์„ ์„ ํƒํ•˜๋˜, ์‚ฌ์ดํด์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ํƒํ•œ๋‹ค.
  3. ๊ฐ„์„ ์ด n-1๊ฐœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณด์ž.

์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์—์„œ kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ MST๋ฅผ ์ฐพ์•„๋ณด์ž.

์ฒ˜์Œ์—๋Š” graph ์˜ค๋ฅธ์ชฝ์˜ ํ‘œ์™€ ๊ฐ™์ด ๊ฐ„์„ ์„ ์ •๋ ฌํ•œ๋‹ค. ์ •๋ ฌ๋œ ๊ฐ„์„  ์ค‘ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ„์„ ์„ ํƒํ•œ๋‹ค.

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ ๊ฐ„์„ ์„ ํƒํ•œ๋‹ค.

 

(A,D) ๊ฐ„์„ ์ด ๋“ค์–ด๊ฐ€๋ฉด (A,C)=>(C,D)=>(D,A)์˜ cycle์ด ์ƒ๊ธฐ๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ๊ฐ„์„ ์„ ํƒํ•œ๋‹ค.

cycle์ด ์ƒ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์˜ '์˜ˆ์‹œ(union-find)'๋ฅผ ์ฐธ์กฐํ•˜์ž.

 

n-1๊ฐœ์˜ ๊ฐ„์„ ์ด ํƒํ•ด์กŒ์œผ๋ฏ€๋กœ MST๋ฅผ ์ฐพ์•˜๋‹ค.

 

๊ตฌํ˜„

 ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ํ•ด๋‹น ๊ฐ„์„ ์ด cycle์„ ๋งŒ๋“œ๋Š” ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์ด ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค.

 ์ด๋Š” dfs๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™•์ธํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„์„ ์— ์—ฐ๊ฒฐ๋œ ์ •์  2๊ฐœ๊ฐ€ ์ด๋ฏธ tree์— ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ํ™•์ธํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๋ฐฉ๋ฒ•์€ union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ disjoint set(๊ณตํ†ต๋œ ์š”์†Œ๊ฐ€ ์—†๋Š” ์ง‘ํ•ฉ๋“ค)์„ ์ด์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. union์€ ์ง‘ํ•ฉ์„ ํ•ฉ์น˜๋Š” ๊ณผ์ •์ด๊ณ , find๋Š” ์ง‘ํ•ฉ์˜ ๋Œ€ํ‘ฏ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. union-find๋Š” ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์—์„œ๋Š” union๊ณผ์ •์ด O(N), find๊ฐ€ O(1)์ด๊ณ  ํŠธ๋ฆฌ์—์„œ๋Š” union๊ณผ์ •๊ณผ find๊ณผ์ •์ด ๋ชจ๋‘ O(lgN)์ด๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(union-find : https://gmlwjd9405.github.io/2018/08/31/algorithm-union-find.html)

 

 MST์˜ cycle์„ ์ฐพ๋Š” ๊ณผ์ •๊ณผ ์—ฐ๊ด€์ง€์–ด ์„ค๋ช…ํ•ด๋ณด์ž. ์ฃผ์–ด์ง„ 2๊ฐœ์˜ tree A, B๊ฐ€ ์žˆ์„ ๋•Œ, ์ •์  x,y๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ด๋ฏธ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด (x,y)์˜ ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น ์ง‘ํ•ฉ์— cycle์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” x, y ๊ฐ๊ฐ์ด ์†ํ•œ tree์˜ ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ์ด ๊ณผ์ •์€ ํŠธ๋ฆฌ๋ฅผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(lgN)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ์‹œ(union-find)

์œ„์˜ ๊ณผ์ •์—์„œ ๋ณด์•˜๋˜ ์˜ˆ์‹œ๋ฅผ union-find ๊ณผ์ •๋งŒ ์ž์„ธํžˆ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์ž.

 

 

ํ•ด๋‹น ๊ทธ๋ž˜ํ”„์—์„œ ์ฒ˜์Œ์—๋Š” root ์ •์  ๊ฐ’์ด ์ž๊ธฐ ์ž์‹ ์ด๋‹ค. ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ์ฒซ ๊ฐ„์„  (A,C)๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, A ์ •์ ๊ณผ C ์ •์ ์˜ root๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ cycle์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ ํ›„, (C,D) ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ C ์ •์ ๊ณผ D ์ •์ ์˜ root๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ cycle์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

(์ฝ”๋“œ ๊ตฌํ˜„ ์ถ”๊ฐ€)

 

DFS vs Union Find

 ๋งŒ์•ฝ cycle์„ ์ฐพ์„ ๋•Œ DFS๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์™„์ „ ๊ทธ๋ž˜ํ”„์ผ ๋•Œ ํ•œ ์ •์ ์—์„œ์˜ ๊ฐ„์„ ์€ n-1๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜ ์ˆœ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•ด์•ผํ•œ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๊ฐ„์„ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ„์„ ์ด cycle์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•ด dfs๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋ฏ€๋กœ n-1์— dfs์˜ ์‹œ๊ฐ„๋ณต์žก๋„ n์„ ๊ณฑํ•ด์„œ O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด ๊ณผ์ •์„ n-1๊ฐœ์˜ ๊ฐ„์„ ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๋ฏ€๋กœ, dfs ์ด์šฉ์‹œ ์ด O(n^3)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. E๋ฅผ ๊ฐ„์„ ์˜ ๊ฐฏ์ˆ˜๋กœ, V๋ฅผ ์ •์ ์˜ ๊ฐฏ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด O(EV)๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 ํ•˜์ง€๋งŒ Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ๋‹ค๋ฉด, cycle์„ ์ฐพ๋Š”๋ฐ์— ์ตœ๋Œ€ lgn ๋ฐ–์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•ด ์ฒดํฌ๋ฅผ ํ–ˆ์„ ๋•Œ, O(nlgn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚˜์˜ค๋ฉฐ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2lgn)์ด ๋œ๋‹ค. O(ElgV)๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„

Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” cycle์„ ์ฐพ๋Š” ๋ฐ์—์„œ O(n^2lgn)์ด ์†Œ์š”๋˜๊ณ , ๊ฐ„์„ ์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ์— O(ElgE)๊ฐ€ ์†Œ์š”๋˜๋ฏ€๋กœ ๊ฐ„์„  ์ •๋ ฌ ์‹œ๊ฐ„๋ณต์žก๋„์— ๋”ฐ๋ผ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(ElgE)๊ฐ€ ๋œ๋‹ค.

์ฆ‰, O(n^2lgn)์ด๋‹ค.

 

์ •๋ฆฌ

  • ๊ฐ„์„  ์„ ํƒ์ด ๊ธฐ๋ฐ˜์ด๋‹ค.
  • greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ, ์ด๋ฏธ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ์ด ์ฆ๋ช…๋˜์–ด์žˆ๋‹ค.
  • cycle์„ ์ฐพ์„ ๋•Œ๋Š” Union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ฐ„์„  ์ •๋ ฌ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ O(n^2lgn)์ด๋‹ค.

Prim(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ณผ์ •

  1. ์‹œ์ž‘ ์ •์ ์„ ํฌํ•จํ•œ๋‹ค.
  2. ์ธ์ ‘ ์ •์  ์ค‘ ์ตœ์†Œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค.
  3. n-1๊ฐœ์˜ ๊ฐ„์„ ์ด ๋ชจ์ด๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณด์ž.

 

์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์—์„œ Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ MST๋ฅผ ์ฐพ์•„๋ณด์ž.

์ฒ˜์Œ์—๋Š” ์‹œ์ž‘ ์ •์ ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.

 

์‹œ์ž‘์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์ ์ธ (B, C, D) ์ค‘ ๊ฐ€์žฅ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ (A,C)์˜ C ์ •์ ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.

 

๊ทธ ํ›„, ์ด๋ฏธ ํฌํ•จ๋œ ์ •์ ๋“ค๊ณผ ์ธ์ ‘ํ•œ ์ •์ ์ธ (B,D,E) ์ค‘ ๊ฐ€์žฅ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ (C,D) ์˜ D ์ •์ ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.

 

์ •์ ์ด ๋ชจ๋‘ ํฌํ•จ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

๊ตฌํ˜„

vertice(์ •์ )๋Š” 3๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค.

  • tree vertice(T) : tree์— ์†ํ•ด ์žˆ๋Š” ์ •์ 
  • fringe vertice (F) : tree์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด์„œ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์ •์ 
  • unseen vertice (U) : ๋‚˜๋จธ์ง€
  1. ๋ชจ๋“  ์ •์ ์„ U ์ง‘ํ•ฉ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ์‹œ์ž‘ ์ •์ ์€ T์— ๋„ฃ๊ณ , ํ•ด๋‹น ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์ ์„ F์— ๋„ฃ๋Š”๋‹ค.
  3. F๊ฐ€ ์กด์žฌํ•˜๋Š” ๋™์•ˆ, T-F์˜ minimum weight edge๋ฅผ ์ฐพ๋Š”๋‹ค.
    • ํ•ด๋‹น ๊ฐ„์„ ์— ์—ฐ๊ฒฐ๋œ ์ •์ (V)์„ T์— ํฌํ•จ์‹œํ‚จ๋‹ค.
    • tree์— ํ•ด๋‹น ๊ฐ„์„ ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.
    • V์˜ ์ธ์ ‘ ์ •์ ๋“ค์„ F์— ํฌํ•จ์‹œํ‚จ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„

Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ ์ฐพ๋Š” ๊ฒƒ์— ์˜์กดํ•œ๋‹ค.

 

T ์ง‘ํ•ฉ์— k๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๊ณ , ์ด ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ n์ด๋ผ๊ณ  ํ•˜๋ฉด ์™„์ „ ๊ทธ๋ž˜ํ”„์ผ ๋•Œ T-F ๊ฐ„์„ ์˜ ๊ฐฏ์ˆ˜๋Š” (n-k)*k์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ ์ฐพ์œผ๋ ค๋ฉด (n-k)*k -1๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ ์ฐพ๋Š” ๊ณผ์ •์„ n๊ฐœ์˜ ์ •์ ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๋ฏ€๋กœ, ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค๋ฉด Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^3)์ผ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ T์— ์†ํ•œ ๋…ธ๋“œ๋“ค์„ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋กœ ๋ณด์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ T๋ผ๋Š” ๋…ธ๋“œ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ ์€ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ฆ‰, ์œ„์— ํ‘œ์‹œ๋œ ๋‘๊ฐœ์˜ ๊ฐ„์„ ์„ ๋น„๊ตํ•ด์„œ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฐ„์„ ๋งŒ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๋‹ค.

 

 ์ด๋ ‡๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฉด n-k๊ฐœ์˜ ๊ฐ„์„ ๋งŒ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ๋ฐฐ์—ด์ด Fringe์— ์†ํ•˜๋Š” ์ •์ ์— ๋Œ€ํ•ด์„œ T์™€์˜ ์ตœ์†Œ ๊ฐ€์ค‘์น˜๋งŒ์„ ์œ ์ง€ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ •์ ์ด T์— ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํ•ด๋‹น ์ •์ ๊ณผ ์ด์–ด์ง€๋Š” ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด ๊ฐฑ์‹ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 ์ •์ ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œ ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฏ€๋กœ ์ด๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” O(nlgn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ด O(n^2lgn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋ฆฌ

  • ์ •์  ์„ ํƒ์ด ๊ธฐ๋ฐ˜์ด๋‹ค.
  • ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด๋กœ ์ด๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ฐ„์„  ์ •๋ ฌ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ O(n^2lgn)์ด๋‹ค.

Prim vs Kruskal

prim๊ณผ kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ MST๋Š” ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•