Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜] MST(Minimum Spanning Tree, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) - Prim(ํ”„๋ฆผ), Kruskal(ํฌ๋ฃจ์Šค์นผ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

meeeeejin 2021. 1. 26. 16:02

 

๋ชฉ์ฐจ

  • Spanning Tree ๊ฐœ๋…
  • MST(์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) ๊ฐœ๋…
  • Prim's Algorithm
  • Kruskal's Algorithm

 

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

  • ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ๋“ค์„ ํฌํ•จํ•˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ(subgraph) Tree
  • ์ตœ์†Œํ•œ์˜ ๊ฐ„์„ ๋“ค๋กœ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จ
    - ๋”ฐ๋ผ์„œ Spanning Tree๋Š” cycle์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ
    - ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์ •์ ์˜ ์ˆ˜๊ฐ€ n๊ฐœ์ด๋ฉด, Spanning Tree๋Š” (n-1) ๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง
  • ํ•œ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Spanning Tree๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ

์ถœ์ฒ˜: https://www.tutorialspoint.com/data_structures_algorithms/spanning_tree.htm

 

 

 

MST (Minimum Spanning Tree, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ)

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„(weighted graph)์—์„œ ์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง„ Spanning Tree
  • ์ฆ‰, ํ•œ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Spanning Tree ์ค‘ minimum weight์„ ๊ฐ€์ง„ Spanning Tree
  • MST๋ฅผ ๊ตฌํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” Prim๊ณผ Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์Œ

 

 

 

 

Prim's Algorithm

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Tree์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ •์ ๋“ค ๊ฐ€์šด๋ฐ, ์ด๋ฏธ ํฌํ•จ๋œ ์ •์ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ ์„ ์„ ํƒํ•ด์„œ ํ•ด๋‹น ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

 

V : ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ๋“ค์˜ ์ง‘ํ•ฉ

F : MST์— ํฌํ•จ๋œ ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ

Y : MST์— ํฌํ•จ๋œ ์ •์ ๋“ค์˜ ์ง‘ํ•ฉ, Y = V๊ฐ€ ๋˜๋ฉด MST๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ

 

์ฒซ ๋ฒˆ์งธ ์ •์ ์„ v1์ด๋ผ๊ณ  ํ•˜๋ฉด F = { }, Y = { v1 }์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. ์ด๋Š” ์•„์ง ์„ ํƒ๋œ ๊ฐ„์„ ์ด ์—†๊ณ , v1๋ถ€ํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

 

Y=V๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

  1. (V - Y)์˜ ์ •์ ๋“ค ์ค‘ Y์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์  A๋ฅผ ์„ ํƒํ•œ๋‹ค. 
  2. Y์— ์ •์  A๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 
  3. F์— ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. 

 

Y=V๊ฐ€ ๋˜์–ด์„œ MST๊ฐ€ ์™„์„ฑ๋˜๋ฉด F๋Š” MST์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํฌํ•จํ•œ ์ง‘ํ•ฉ์ด ๋˜๋ฏ€๋กœ F์˜ ์›์†Œ ๊ฐœ์ˆ˜๋Š” (n-1)๊ฐœ๊ฐ€ ๋œ๋‹ค. 

 

Prim's Algorithm

 

 

 

 

Kruskal's Algorithm

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ ์ •์ ์„ ํ•˜๋‚˜์˜ ์›์†Œ๋กœ ๊ฐ–๋Š” V์˜ ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด์„œ ์‹œ์ž‘ํ•œ๋‹ค.

 

n๊ฐœ์˜ ์ •์ ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„๋ผ๋ฉด ์ฒ˜์Œ์— n๊ฐœ์˜ ์„œ๋กœ์†Œ ๋ถ€๋ถ„์ง‘ํ•ฉ๋“ค๋กœ ์‹œ์ž‘ํ•˜๊ณ , ์ด ์ง‘ํ•ฉ๋“ค์€ ๊ฐ ์ •์ ๋งŒ์„ ์›์†Œ๋กœ ๊ฐ€์ง„๋‹ค. ์ดํ›„ ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ E๋ฅผ ๊ฐ€์ค‘์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์ด ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

  1. ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ E์—์„œ ๋‹ค์Œ ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค. 
  2. ๋งŒ์•ฝ ๊ฐ„์„ ์ด ์„œ๋กœ์†Œ ๋ถ€๋ถ„์ง‘ํ•ฉ์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ •์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด
    1) ๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์นœ๋‹ค. 
    2) ๊ฐ„์„ ์„ F์— ์ถ”๊ฐ€ํ•œ๋‹ค. (F๋Š” MST์— ํฌํ•จ๋˜๋Š” ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ)

 

๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ๋“ค์ด ํ•ฉ์ณ์ง€๊ณ  ๋‚˜๋ฉด F๋Š” MST์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํฌํ•จํ•œ ์ง‘ํ•ฉ์ด ๋˜๋ฏ€๋กœ F์˜ ์›์†Œ ๊ฐœ์ˆ˜๋Š” (n-1)๊ฐœ๊ฐ€ ๋œ๋‹ค. 

 

Kruskal's Algorithm

 

 

 

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

 

728x90