Hello Ocean! ๐ŸŒผ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] MST (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) ๋ณธ๋ฌธ

Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] MST (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ)

bba_dda 2020. 9. 21. 19:59
๋ฐ˜์‘ํ˜•

Spanning Tree(์‹ ์žฅ ํŠธ๋ฆฌ) ?

๊ฐœ๋…

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

  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‚ฌ์ดํด ์—†์ด ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ๋“ค์„ ๋ชจ์•„๋†“์€ ํŠธ๋ฆฌ

  • ๊ทธ๋ž˜ํ”„์˜ ์ตœ์†Œ ์—ฐ๊ฒฐ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„

    • ์ตœ์†Œ ์—ฐ๊ฒฐ = ์ตœ์†Œ์˜ ๊ฐ„์„ 

      n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ n-1๊ฐœ์˜ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ

ํŠน์ง•

  • DFS, BFS๋ฅผ ์ด์šฉํ•ด์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํƒ์ƒ‰ ๋„์ค‘์— ์ด์šฉ๋œ ๊ฐ„์„  ๋ชจ์œผ๊ธฐ
  • ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„ -> ์—ฌ๋Ÿฌ๊ฐœ์˜ spanning tree
  • ์‚ฌ์ดํด X

MST(Minimum Spanning Tree) ?

๊ฐœ๋…

  • Spanning Tree์ค‘์— ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ
  • ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฐ„์„ ์„ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ตœ์†Œ ๋น„์šฉ์ด ์–ป์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹˜

ํŠน์ง•

  • ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ
  • n๊ฐœ์˜ ๋…ธ๋“œ์„ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„, n-1๊ฐœ์˜ ๊ฐ„์„ ๋งŒ ์ด์šฉ
  • ์‚ฌ์ดํด X

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

1. Kruskal(ํฌ๋ฃจ์Šค์นผ) MST ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • greddy method๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ์ ์˜ MST๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ

๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์•„๋ž˜ ์กฐ๊ฑด์— ๊ทผ๊ฑฐํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค

  1. MST๊ฐ€ ์ตœ์†Œ ๋น„์šฉ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ตฌ์„ฑ๋จ
  2. ์‚ฌ์ดํด์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ
  • ๊ฐ„์„  ์„ ํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ด์ „ ๋‹จ๊ณ„๊นŒ์ง€ ๋งŒ๋“ค์–ด์ง„ ์‹ ์žฅ ํŠธ๋ฆฌ์™€๋Š” ์ƒ๊ด€ ์—†์ด ๋ฌด์กฐ๊ฑด ์ตœ์†Œ ๊ฐ„์„ ๋งŒ์„ ์„ ํƒ
๊ณผ์ •
  1. ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๊ฐ„์„ ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  2. ์ •๋ ฌ๋œ ๊ฐ„์„ ๋“ค ์ค‘์—์„œ, ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ์„ ํƒ
    • ์ž‘์€ ๊ฐ„์„ ์„ ๋จผ์ € ์„ ํƒ
    • ์‚ฌ์ดํด ํ˜•์„ฑํ•˜๋Š” ๊ฐ„์„  ์ œ์™ธ
      • Union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ
      • ์ถ”๊ฐ€ํ•  ์ƒˆ๋กœ์šด ๊ฐ„์„ ์˜ ์–‘ ๋ ๋…ธ๋“œ์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ
        • ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ์œผ๋ฉด ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋จ
  3. 2์—์„œ ์„ ํƒ๋œ ๊ฐ„์„ ์„ MST์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•œ๋‹ค

์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์‚ฌ์ดํด ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๊ฒ€์‚ฌํ•˜๋ฉด, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ฐ„์„ ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์— ์˜ํ•ด ์ขŒ์šฐ๋œ๋‹ค

    • ํšจ์œจ์ ์ธ ํ€ต ์ •๋ ฌ์„ ์ด์šฉํ•˜๋ฉด O(eloge)

      ๊ฐ„์„  ๊ฐœ์ˆ˜ e๊ฐœ

2. Prim(ํ”„๋ฆผ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์ค‘์ฒฉ๋˜์žˆ๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ๊ฐ๊ฐ n๋ฒˆ์”ฉ ๋ฐ˜๋ณต

  • O(n^2)

    ๋…ธ๋“œ ๊ฐœ์ˆ˜ n๊ฐœ

์ฐธ๊ณ  ์ž๋ฃŒ

https://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html

๋ฐ˜์‘ํ˜•