๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ_ Kruskal & Prim

๋ฐ˜์‘ํ˜•

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ (MST, Minimum Spanning Tree)

์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ž€, ๊ทธ๋ž˜ํ”„์—์„œ ์ˆœํ™˜ ์—†์ด ๋ชจ๋“  ์ •์ ์„ ์ž‡๋Š” ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ž€, ์ด๋Ÿฌํ•œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์ค‘์—์„œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํฌ๋ฃจ์Šค์นผ(Kruskal)๊ณผ ํ”„๋ฆผ(Prim) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.

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

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ๊ฐ„์„  ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฐ„์„ ๋ถ€ํ„ฐ ์—ฐ๊ฒฐํ•ด ์ฃผ๋ฉด์„œ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ฐ„์„ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ์ˆœํ™˜์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ„์„ ์„ ๋ฒ„๋ฆฌ๊ณ  ๋‹ค์Œ ๊ฐ„์„ ์„ ์„ ํƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ, Union-Find ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  2. ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฐ„์„ ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํ™˜์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ๊ณ ๋ฅธ๋‹ค.
  3. ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์œ„ ๊ณผ์ •์—์„œ ๊ฐ„์„ ์ด ์ˆœํ™˜์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ง€๋ฅผ Union-Find ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด์„œ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹œ์ž‘ ์ •์ ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ ์ •์ ์ค‘์— ๊ฐ€์žฅ ์ž‘์€ ๊ฐ€์ค‘์น˜๋กœ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ์„ ํƒํ•˜๋ฉด์„œ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ฐ„์„ ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ํฌ๋ฃจ์Šค์นผ๊ณผ ๋‹ฌ๋ฆฌ ํ”„๋ฆผ์€ ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜

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

ํฌ๋ฃจ์Šค์นผ VS ํ”„๋ฆผ

์–ด๋–ค ๊ฒฝ์šฐ์— ํฌ๋ฃจ์Šค์นผ์„ ์“ฐ๊ณ , ํ”„๋ฆผ์„ ์“ธ์ง€๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํฌ๋ฃจ์Šค์นผ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ„์„ ์„ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„(ํ€ต์ •๋ ฌ_ O(logE))๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์—ฐ์‚ฐ์ด ์‹คํ–‰(O(E))๋˜๊ธฐ ๋•Œ๋ฌธ์— O(ElogE)๊ฐ€ ๋œ๋‹ค.

ํ”„๋ฆผ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ชจ๋“  ์ •์ ์„ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ํ™•์ธ(O(logV)) ํ•˜๊ณ , ๊ทธ ์ •์ ๋“ค์— ๋Œ€ํ•œ ๊ฐ„์„ ๋“ค์„ ํ™•์ธ(O(E))ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(ElogV)๊ฐ€ ๋œ๋‹ค.

์ฆ‰ ํฌ๋ฃจ์Šค์นผ O(ElogE) vs ํ”„๋ฆผ O(ElogV)์ด๊ธฐ ๋•Œ๋ฌธ์—,

๊ฐ„์„ ์ด ๋งŽ์„ ๋•Œ๋Š” ํ”„๋ฆผ, ๊ฐ„์„ ์ด ์ ์„๋•Œ๋Š” ํฌ๋ฃจ์Šค์นผ์ด ๋” ์œ ๋ฆฌํ•ด ๋ณด์ธ๋‹ค.

์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ๋ฐฑ์ค€ 1197๋ฒˆ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.

[Algorithm/Java][๋ฐฑ์ค€] 1197๋ฒˆ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

 

[Algorithm/Java][๋ฐฑ์ค€] 1197๋ฒˆ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

[BOJ] 1197๋ฒˆ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ https://www.acmicpc.net/problem/1197 ๋ฌธ์ œ ์ ‘๊ทผ ๋ชจ๋“  ์ •์ ์„ ์ตœ์†Œ ๊ฐ’์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Kruskal๊ณผ Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ์•Œ๊ณ ๋ฆฌ

kkmdailylog.tistory.com

 

๋ฐ˜์‘ํ˜•