Kruskal's MST Algorithm

์‹ ์žฅํŠธ๋ฆฌ(Spanning Tree)๋Š” ๋ชจ๋“  vertex๊ฐ€ edge๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ edge ์‚ฌ์ด์— ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค. vertex์ˆ˜๋Š” edge์ˆ˜ + 1์ด ๋œ๋‹ค. ๋ชจ๋“  vertex๊ฐ€ ๋‹ค ์—ฐ๊ฒฐ์€ ๋˜์–ด ์žˆ์ง€๋งŒ, ์ผ๋ถ€ edge๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ ์„ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(Minimum Spanning Tree)๋ผ ํ•œ๋‹ค.

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋Œ€ํ‘œ์ ์€ ํƒ์š•์  ๋ฐฉ๋ฒ•์œผ๋กœ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋™์ž‘ ๊ณผ์ •์€ ๋จผ์ € ๋ถ€๋ชจํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋ถ€๋ชจ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๊ฐ„์„ ์„ ๋น„์šฉ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  (sorted), ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๊นŒ์ง€ (for i in range(V)), ๊ฐ„์„ ์„ ์ˆœ์„œ๋ฐ๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  (exist_cycle), ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋งŒ ๋ถ€๋ชจํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํŠธ๋ฆฌ์— ํฌํ•จ์‹œํ‚ค๊ณ  (union) ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ฐ„์„ ์„ ๋น„์šฉ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

edge
2-3
0-3
0-2
0-1
1-3

cost

4

5

6

10

15

๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๊นŒ์ง€ (for i in range(V)), ๊ฐ„์„ ์„ ์ˆœ์„œ๋ฐ๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  (exist_cycle), ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋งŒ ํŠธ๋ฆฌ์— ํฌํ•จ์‹œํ‚ค๊ณ  (union) ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค.

step 0

node
0
1
2
3

p[n]

0

1

2

3

step 1

node
0
1
2
3

p[n]

0

1

2

2

step 2

node
0
1
2
3

p[n]

0

1

0

2

step 3

node
0
1
2
3

p[n]

0

1

0

2

step 4

node
0
1
2
3

p[n]

0

0

0

2

์ฝ”๋“œ

์ฐธ๊ณ ์ž๋ฃŒ

https://velog.io/@ming/MST์ตœ์†Œ-์‹ ์žฅํŠธ๋ฆฌ-์•Œ๊ณ ๋ฆฌ์ฆ˜ https://www.geeksforgeeks.org/kruskals-minimum-spanning-tree-algorithm-greedy-algo-2/ https://github.com/chaminhye/Algorithm/blob/master/src/concept/graph/Kruskal.java https://deep-learning-study.tistory.com/592

Last updated

Was this helpful?