Algorithm

[Algorithm] ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ : ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

yevdev 2021. 10. 11. 23:38

๐Ÿ’ก์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ?

  • ์ฃผ์–ด์ง„ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ์–ด๋Š ํ•œ ์ถœ๋ฐœ์ ์—์„œ ๋˜ ๋‹ค๋ฅธ ๋„์ฐฉ์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ’ก์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ?

  1. ๋ฌด์ž‘์œ„ ๋ฐฉ๋ฒ• : ๋ชจ๋“  ๋„์‹œ๋“ค์ด ๋‹ค ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ถœ๋ฐœ์ ์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ์˜ ์ˆ˜๋Š” θ(n!)
  2. ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • (๊ฒฐ๊ณผ์ ์œผ๋กœ) ์ถœ๋ฐœ์ ์—์„œ ๊ฐ€๊นŒ์šด ๋„์‹œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰
    • ํ•œ๋ฒˆ ๊ฒฐ์ •๋œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ์ ˆ๋Œ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉฐ ์ถœ๋ฐœ์ ์—์„œ ๋” ๋จผ ๋„์‹œ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๋•Œ ์ด์šฉ

 

 

โžฐ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜

  1. ๋‹จ์ผ ์‹œ์ž‘์  ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ถœ๋ฐœ์ง€์ ์„ ํ•˜๋‚˜ ์„ ํƒํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์œ ํ˜•
  2. ๋ชจ๋“  ์Œ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋ชจ๋“  ์ง€์ ๋“ค๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์œ ํ˜•

์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”„๋ฆผ์˜ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฑฐ์˜ ํก์‚ฌํ•œ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

 

โ—๏ธํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ์˜ 2๊ฐ€์ง€ ์ฐจ์ด์ 

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

๐Ÿ’ก๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐœ์š” (MST๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์›๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ๋™์ผ)

  1. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํŠธ๋ฆฌ๋ฅผ ์œ ์ง€
    • ์ถœ๋ฐœ์ ์„ ์‹œ์ž‘ ํŠธ๋ฆฌ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋งค ๋‹จ๊ณ„์—์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์™€ ๊ฐ„์„ ์„ ๋ถ™์—ฌ๋‚˜๊ฐ
  2. ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค = ๊ทธ ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ•œ๋‹ค.
    • ์ฒ˜์Œ์—๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ํ™•์ •๋œ ๋…ธ๋“œ ์ง‘ํ•ฉ = {์ถœ๋ฐœ ๋…ธ๋“œ}
    • ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋…ธ๋“œ๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํฌํ•จํ•  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
  3. ์š•์‹ฌ์Ÿ์ด ๋ฐฉ๋ฒ•์ด๋‹ˆ ๋งŒํผ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•ต์‹ฌ
    • ๊ธฐ์ค€ : ์ถœ๋ฐœ๋„์‹œ๋กœ๋ถ€ํ„ฐ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ
    • ๋‹จ, ์ด๋ฏธ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋ฐํ˜€์ง„ ๋…ธ๋“œ๋“ค๋งŒ ๊ฒฝ์œ 

 

๐Ÿ’ก๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์ตœ๋‹จ๊ฒฝ๋กœ ์ฐพ๊ธฐ

// ShortestPath(G,s)
// ์ž…๋ ฅ : ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ G = (V,E), |V| = n, |E| = m
// ์ถœ๋ ฅ : ์ถœ๋ฐœ์  s๋กœ๋ถ€ํ„ฐ (n-1)๊ฐœ์˜ ์ ๊นŒ์ง€ ๊ฐ๊ฐ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•œ ๋ฐฐ์—ด D
1. ๋ฐฐ์—ด D๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค. ๋‹จ, D[s] = 0 ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
	// ๋ฐฐ์—ด D[v]์—๋Š” ์ถœ๋ฐœ์  s๋กœ๋ถ€ํ„ฐ ์  v๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
    // ๊ฐ ์  v์— ๋Œ€ํ•ด์„œ D[v]=๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™” 
2. while(s๋กœ๋ถ€ํ„ฐ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ํ™•์ •๋˜์ง€ ์•Š์€ ์ ์ด ์žˆ์œผ๋ฉด) {
3. 	ํ˜„์žฌ๊นŒ์ง€ s๋กœ๋ถ€ํ„ฐ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ํ™•์ •๋˜์ง€ ์•Š์€ ๊ฐ ์  v์— ๋Œ€ํ•ด์„œ ์ตœ์†Œ์˜ D[v]์˜ ๊ฐ’์„ ๊ฐ€์ง„ ์  v(min)์„ ์„ ํƒํ•˜๊ณ ,
    ์ถœ๋ฐœ์  s๋กœ๋ถ€ํ„ฐ ์  v(min)๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ D[v(min)]์„ ํ™•์ •
4.  s๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ๋ณด๋‹ค ์งง์€ ๊ฑฐ๋ฆฌ๋กœ ์  v(min)์„ ํ†ตํ•ด ์šฐํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ ์  w์— ๋Œ€ํ•ด์„œ D[w]๋ฅผ ๊ฐฑ์‹ 
   }
5. return D
  • Line 2~4์˜ while ๋ฃจํ”„๋Š” (n-1)ํšŒ ์ˆ˜ํ–‰๋จ.
  • ํ˜„์žฌ๊นŒ์ง€ s๋กœ๋ถ€ํ„ฐ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ํ™•์ •๋œ ์ ๋“ค์˜ ์ง‘ํ•ฉ์„ T๋ผ๊ณ  ํ•˜๋ฉด V-T๋Š” ํ˜„์žฌ๊นŒ์ง€ s๋กœ๋ถ€ํ„ฐ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ํ™•์ •๋˜์ง€ ์•Š์€ ์ ๋“ค์˜ ์ง‘ํ•ฉ.
  • ๋”ฐ๋ผ์„œ, V-T์— ์†ํ•œ ๊ฐ ์  v์— ๋Œ€ํ•ด์„œ D[v]๊ฐ€ ์ตœ์†Œ์ธ ์  v(min)์„ ์„ ํƒํ•˜๊ณ , v(min)์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์ • ์‹œํ‚จ๋‹ค.
    • ์ฆ‰, D[v(min)] <= D[v], v ∈ V-T ์ด๋‹ค.
  • 'ํ™•์ •ํ•œ๋‹ค'๋Š” ๊ฒƒ์˜ ๋‘๊ฐ€์ง€ ์˜๋ฏธ
    1. D[v(min)]์ด ํ™•์ •๋œ ํ›„์—๋Š” ๋‹ค์‹œ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    2. ์  v(min)์ด T์— ํฌํ•จ๋œ๋‹ค.

 

๐Ÿฅบ๊ณต๋ถ€ ํ”์ 


๐Ÿ’ก์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ - ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„

  • while ๋ฃจํ”„๊ฐ€ (n-1)๋ฒˆ ๋ฐ˜๋ณต๋˜๊ณ ,
    • 1ํšŒ ๋ฐ˜๋ณต๋  ๋•Œ line3์—์„œ์˜ ์ตœ์†Œ D[v]๋ฅผ ๊ฐ€์ง„ ์  v(min)์„ ์ฐพ๋Š”๋ฐ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐฐ์—ด D์—์„œ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ๋˜ํ•œ line 4์—์„œ๋„ v(min)์— ์—ฐ๊ฒฐ๋œ ์ ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€ (n-1)๊ฐœ ์ด๋ฏ€๋กœ, ๊ฐ D[w]๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(n)์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” (n-1) x {O(n) + O(n)} = O(n^2)์ด๋‹ค.

 

์‘์šฉ

  • ๋งตํ€˜์ŠคํŠธ์™€ ๊ตฌ๊ธ€ ์›น์‚ฌ์ดํŠธ์˜ ์ง€๋„ ์„œ๋น„์Šค
  • ์ž๋™์ฐจ ๋„ค๋น„๊ฒŒ์ด์…˜
  • ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ๋ถ„์•ผ ๋ฐ ๋ชจ๋ฐ”์ผ ๋„คํŠธ์›Œํฌ
  • ์‚ฐ์—… ๊ณตํ•™
  • ๊ฒฝ์˜ ๊ณตํ•™์˜ ์šด์˜ ์—ฐ๊ตฌ
  • ๋กœ๋ด‡ ๊ณตํ•™
  • ๊ตํ†ต ๊ณตํ•™
  • VLSI ๋””์ž์ธ ๋ถ„์•ผ ๋“ฑ

 


Reference 

์„œ์šธ๊ณผํ•™๊ธฐ์ˆ ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—