Minimum Spanning Trees - Kruskalโ€™s Alg, Primโ€™s Alg

๐Ÿ’ก Spanning Tree : ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ -> n๊ฐœ์˜ ์ •์  - (n-1)๊ฐœ์˜ ๊ฐ„์„ 

๐Ÿ’ก Minimum Spanning Tree (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ): Spanning Tree ์ค‘์—์„œ ์‚ฌ์šฉ๋œ ๊ฐ„์„ ๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ

๐Ÿ”ปSpanning Tree

Untitled

  • DFS, BFS์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์—์„œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํƒ์ƒ‰ ๋„์ค‘์— ์‚ฌ์šฉ๋œ ๊ฐ„์„ ๋งŒ ๋ชจ์œผ๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„์—๋Š” ๋งŽ์€ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Spanning Tree๋Š” ํŠธ๋ฆฌ์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์ด๋ฏ€๋กœ ๋ชจ๋“  ์ •์ ๋“ค์ด ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๊ณ  ์‚ฌ์ดํด์„ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ Spanning Tree๋Š” ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” n๊ฐœ์˜ ์ •์ ์„ ์ •ํ™•ํžˆ (n-1)๊ฐœ์˜ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ ํ•œ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ > ํ†ต์‹ ๋„คํŠธ์›Œํฌ ๊ตฌ์ถ•(ํšŒ์‚ฌ ๋‚ด์˜ ๋ชจ๋“  ์ „ํ™”๊ธฐ๋ฅผ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ์ผ€์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ)

๐Ÿ”ปMST

Untitled

  • ๊ฐ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์„ ๋•Œ ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ์ ์€ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ตœ์†Œ ๋น„์šฉ์ด ์–ป์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • MST๋Š” ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ์˜ Spanning Tree๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ์ฆ‰, ๋„คํŠธ์›Œํฌ(๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ„์„ ์— ํ• ๋‹นํ•œ ๊ทธ๋ž˜ํ”„)์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ๋“ค์„ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ๊ฐ„์„ ๊ณผ ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํŠน์ง• 3๊ฐ€์ง€
    • ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ์—ฌ์•ผ ํ•œ๋‹ค.
    • n๊ฐœ์˜ ์ •์ ์„ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ (n-1)๊ฐœ์˜ ๊ฐ„์„ ๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์‚ฌ์ดํด์ด ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ > ํ†ต์‹ ๋ง, ๋„๋กœ๋ง, ์œ ํ†ต๋ง์—์„œ ๊ธธ์ด, ๊ตฌ์ถ• ๋น„์šฉ, ์ „์†ก ์‹œ๊ฐ„ ๋“ฑ์„ ์ตœ์†Œ๋กœ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ

๐Ÿ”ปMST ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Kruskalโ€™s Alg, Primโ€™s Alg)

Generic MST Algorithm (๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณตํ†ต์ ์ธ ํŠน์ง•)

Untitled

1) ์ฒ˜์Œ์— A = ๊ณต์ง‘ํ•ฉ ์œผ๋กœ ๋‘”๋‹ค.

2) ์ง‘ํ•ฉ A์— ๋Œ€ํ•ด์„œ ์•ˆ์ „ํ•œ ์—์ง€๋ฅผ ํ•˜๋‚˜ ์ฐพ์€ ํ›„ ์ด๊ฒƒ์„ A์— ๋”ํ•œ๋‹ค. (MST์˜ ๊ทœ์น™์„ ์–ด๊ธฐ์ง€ ์•Š๋Š” ์—์ง€๋ฅผ ์ฐพ์€ ํ›„)

3) ์—์ง€์˜ ์ˆ˜ (n-1)์ด ๋  ๋•Œ ๊นŒ์ง€ 2๋ฒˆ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

โ–ถ๏ธ์•ˆ์ „ํ•œ ์—ฃ์ง€ ์ฐพ๊ธฐ?

  1. ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๋“ค์„ ๋‘ ๊ฐœ์˜ ์ง‘ํ•ฉ S์™€ V-S๋กœ ๋ถ„ํ• ํ•œ ๊ฒƒ์„ cut(S, V-S)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  2. ์—์ง€ (u, v)์— ๋Œ€ํ•ด์„œ u๊ฐ€ s์— ์†ํ•˜๊ณ  v๊ฐ€ v-s์— ์†ํ•  ๋•Œ ์—์ง€ (u, v)๋Š” ์ปท (S, V-S)๋ฅผ ํฌ๋กœ์Šคํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.
  3. ์—์ง€๋“ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ A์— ์†ํ•œ ์–ด๋–ค ์—์ง€๋„ ์ปท(S, V-S)๋ฅผ ํ•˜์ง€ crossํ•˜์ง€ ์•Š์„ ๋•Œ ์ปท (S, V-S)๋Š” A๋ฅผ ์กด์ค‘ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

Untitled

โ‡’ A๊ฐ€ MST์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๊ณ  (S, V-S)๋Š” A๋ฅผ ์กด์ค‘ํ•˜๋Š” ์ปท์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ์ปท์„ crossํ•˜๋Š” ์—์ง€๋“ค ์ค‘ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ์—์ง€ (u, v)๋Š” A์— ๋Œ€ํ•ด์„œ ์•ˆ์ „ํ•˜๋‹ค.

Untitled

Kruskalโ€™s Algorithm

  • ๋„คํŠธ์›Œํฌ(๊ฐ€์ค‘์น˜๋ฅผ๊ฐ„์„ ์—ํ• ๋‹นํ•œ๊ทธ๋ž˜ํ”„)์˜ ๋ชจ๋“  ์ •์ ์„ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ตœ์ ํ•ด๋‹ต์„ ๊ตฌํ•˜๋Š” ๊ฒƒ. safe ํ•˜๊ณ  lightํ•œ Edge๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฐพ์•„๊ฐ€๋Š” ๊ธฐ๋ฒ•
  • ๊ฐ„์„ ์„ ํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๋ฌด์กฐ๊ฑด ์ตœ์†Œ ๊ฐ„์„ ๋งŒ์„ ์„ ํƒ
  • MST(์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ) ๊ฐ€ 1) ์ตœ์†Œ ๋น„์šฉ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ตฌ์„ฑ๋จ 2) ์‚ฌ์ดํด์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ ์˜ ์กฐ๊ฑด์— ๊ทผ๊ฑฐํ•˜์—ฌ ๊ฐ ๋‹จ๊ณ„์—์„œ ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š๋Š” ์ตœ์†Œ ๋น„์šฉ ๊ฐ„์„ ์„ ์„ ํƒ ํ•œ๋‹ค.
  • ๊ณผ์ •
    1. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
    2. ์ •๋ ฌ๋œ ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค.

      โ†’ ์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.

      โ†’ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜๋Š” ๊ฐ„์„ ์„ ์ œ์™ธํ•œ๋‹ค.

    3. ํ•ด๋‹น ๊ฐ„์„ ์„ ํ˜„์žฌ์˜ MST(์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ)์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    4. (n-1)๊ฐœ์˜ ๊ฐ„์„ ๋“ค์ด ์„ ํƒ๋˜๋ฉด ์ข…๋ฃŒ

Untitled

โ†’ ๋‹ค์Œ ๊ฐ„์„ ์„ ์ด๋ฏธ ์„ ํƒ๋œ ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์ดํด์„ ์ƒ์„ฑํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌ

โ†’ ์ƒˆ๋กœ์šด ๊ฐ„์„ ์ด ์ด๋ฏธ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๋“ค์„ ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋œ๋‹ค.

โ†’ ์ฆ‰, ์ถ”๊ฐ€ํ•  ์ƒˆ๋กœ์šด ๊ฐ„์„ ์˜ ์–‘๋ ์ •์ ์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด ์žˆ์œผ๋ฉด ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋œ๋‹ค

โ‡’ Union Find Algorithm ์‚ฌ์šฉ

  • ์‹œ๊ฐ„๋ณต์žก๋„
    • union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋ฉด Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ„์„ ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„์— ์ขŒ์šฐ๋œ๋‹ค.
    • ์ฆ‰, ๊ฐ„์„  e๊ฐœ๋ฅผ ํ€ต ์ •๋ ฌ๊ณผ ๊ฐ™์€ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๋ฉด Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(elogโ‚‚e) ์ด ๋œ๋‹ค.

Primโ€™s Algorithm

  • ์‹œ์ž‘ ์ •์ ์—์„œ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜์—ฌ ์ง‘ํ•ฉ์„ ๋‹จ๊ณ„์ ์œผ๋กœ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • ์ •์  ์„ ํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ์‹ ์žฅํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ณผ์ •
    1. ์‹œ์ž‘ ๋‹จ๊ณ„์—์„œ๋Š” ์‹œ์ž‘ ์ •์ ๋งŒ์ด MST(์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ) ์ง‘ํ•ฉ์— ํฌํ•จ๋œ๋‹ค.
    2. ์•ž ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ MST ์ง‘ํ•ฉ์— ์ธ์ ‘ํ•œ ์ •์ ๋“ค ์ค‘์—์„œ ์ตœ์†Œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ์„ ํƒํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•œ๋‹ค.

      โ†’ ์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.

    3. ์œ„์˜ ๊ณผ์ •์„ ํŠธ๋ฆฌ๊ฐ€ (N-1)๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Untitled

  • ์‹œ๊ฐ„๋ณต์žก๋„
    • ์ฃผ ๋ฐ˜๋ณต๋ฌธ์ด ์ •์ ์˜ ์ˆ˜ n๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ณ , ๋‚ด๋ถ€ ๋ฐ˜๋ณต๋ฌธ์ด n๋ฒˆ ๋ฐ˜๋ณต Prim์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2) ์ด ๋œ๋‹ค.
  • Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(elogโ‚‚e) ์ด๋ฏ€๋กœ
    • ๊ทธ๋ž˜ํ”„ ๋‚ด์— ์ ์€ ์ˆซ์ž์˜ ๊ฐ„์„ ๋งŒ์„ ๊ฐ€์ง€๋Š” โ€˜ํฌ์†Œ ๊ทธ๋ž˜ํ”„(Sparse Graph)โ€™์˜ ๊ฒฝ์šฐ Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ํ•ฉํ•˜๊ณ 
    • ๊ทธ๋ž˜ํ”„์— ๊ฐ„์„ ์ด ๋งŽ์ด ์กด์žฌํ•˜๋Š” โ€˜๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„(Dense Graph)โ€™ ์˜ ๊ฒฝ์šฐ๋Š” Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ํ•ฉํ•˜๋‹ค.

์ถœ์ฒ˜https://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html