๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

๋งํฌ ์ƒํƒœ(LS) ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณธ๋ฌธ

Network (๋„คํŠธ์›Œํฌ)/Computer Network (์ปดํ“จํ„ฐ๋„คํŠธ์›Œํฌ)

๋งํฌ ์ƒํƒœ(LS) ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜

9taetae9 2024. 12. 18. 14:32
728x90

๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋งํฌ์˜ ์‹๋ณ„์ž์™€ ๋น„์šฉ์„ ํฌํ•จํ•˜๋Š” ๋งํฌ ์ƒํƒœ ํŒจํ‚ท์„ ๋„คํŠธ์›Œํฌ์ƒ์˜ ๋ชจ๋“  ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…

=> ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€์™€ ๋ชจ๋“  ๋งํฌ ๋น„์šฉ์ด ์•Œ๋ ค์ ธ ์žˆ์–ด ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋…ธ๋“œ๋“ค์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ๋™์ผํ•˜๊ณ  ์™„๋ฒฝํ•œ ๊ด€์ ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๊ฐ ๋…ธ๋“œ๋Š” LS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ๋˜‘๊ฐ™์€ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ ์ง‘ํ•ฉ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์—์„œ ์„ค๋ช…ํ•  ๋งํฌ ์ƒํƒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's algorithm)์ด๋ผ ํ•˜๊ณ , ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Prim's algorithm)๋„ ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค.

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's algorithm)

ํ•˜๋‚˜์˜ ๋…ธ๋“œ(์ถœ๋ฐœ์ง€, u๋ผ๊ณ  ์ง€์นญ)์—์„œ ๋„คํŠธ์›Œํฌ ๋‚ด ๋ชจ๋“  ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ์˜ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐ

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

๊ธฐํ˜ธ ์ •์˜

D(v) : ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜„์žฌ ๋ฐ˜๋ณต ์‹œ์ ์—์„œ ์ถœ๋ฐœ์ง€ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ชฉ์ ์ง€ v๊นŒ์ง€ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ์˜ ๋น„์šฉ

p(v) : ์ถœ๋ฐœ์ง€์—์„œ v๊นŒ์ง€์˜ ํ˜„์žฌ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ์—์„œ v์˜ ์ง์ „ ๋…ธ๋“œ(v์˜ ์ด์›ƒ)

N' : ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ. ์ถœ๋ฐœ์ง€์—์„œ v๊นŒ์ง€์˜ ์ตœ์†Œ ๋น„์šฉ ๊ฒฝ๋กœ๊ฐ€ ๋ช…ํ™•ํžˆ ์•Œ๋ ค์ ธ ์žˆ๋‹ค๋ฉด, v๋Š” N'์— ํฌํ•จ

 

์ค‘์•™ ์ง‘์ค‘ํ˜• ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜ => ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์™€ ๋ฐ˜๋ณต ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ

๋ฐ˜๋ณต ๋ถ€๋ถ„์˜ ์ˆ˜ํ–‰ ํšŸ์ˆ˜ : ๋„คํŠธ์›Œํฌ์˜ ๋…ธ๋“œ ์ˆ˜

๋ฃจํ”„ ์ˆ˜ํ–‰ ์ข…๋ฃŒ ํ›„ : ์ถœ๋ฐœ์ง€ ๋…ธ๋“œ u์—์„œ ๋„คํŠธ์›Œํฌ์ƒ์˜ ๋ชจ๋“  ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์‚ฐ์ถœ

 

์ถœ๋ฐœ์ง€ ๋…ธ๋“œ u๋ฅผ ๋Œ€ํ•œ ๋งํฌ ์ƒํƒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ดˆ๊ธฐํ™” ๋‹จ๊ณ„

Initialization :
    N' = {u}
    for all nodes v
        if v is a neighbor of u
            then D(v) = c(u, v)
        else D(v) = INF

 

  • N'๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ํ™•์ •๋œ ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ
  • ์‹œ์ž‘ ๋…ธ๋“œ u๋ฅผ N'์— ๋จผ์ € ํฌํ•จ
  • ๋ชจ๋“  ๋…ธ๋“œ v์— ๋Œ€ํ•ด:
    • v๊ฐ€ u์˜ ์ด์›ƒ ๋…ธ๋“œ๋ผ๋ฉด → D(v)๋Š” u์—์„œ v๊นŒ์ง€์˜ ์ง์ ‘ ๋งํฌ ๋น„์šฉ c(u, v)๋กœ ์„ค์ •
    • v๊ฐ€ u์˜ ์ด์›ƒ์ด ์•„๋‹ˆ๋ผ๋ฉด → D(v)๋Š” ๋ฌดํ•œ๋Œ€(INF)๋กœ ์„ค์ •

๋ฐ˜๋ณต ๋‹จ๊ณ„ (Loop)

Loop
    find w not in N' such that D(w) is a minimum
    add w to N'
    update D(v) for each neighbor v of w and not in N' :
        D(v) = min(D(v), D(w) + c(w, v))

 

 

  • N'์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ํ˜„์žฌ D(w)๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ w ์ฐพ๊ธฐ
  • ์ฐพ์€ ๋…ธ๋“œ w๋ฅผ N'์— ์ถ”๊ฐ€ 
  • w์˜ ์ด์›ƒ ๋…ธ๋“œ๋“ค ์ค‘ N'์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๋…ธ๋“œ v์— ๋Œ€ํ•ด ๊ฑฐ๋ฆฌ ๊ฐ’ ๊ฐฑ์‹ :
    • ๊ธฐ์กด D(v) ๊ฐ’๊ณผ (D(w) + c(w, v))๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ 
    • D(w) + c(w, v)๋Š” u์—์„œ w๋ฅผ ๊ฑฐ์ณ v๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๋น„์šฉ

์ข…๋ฃŒ ์กฐ๊ฑด

until N' = N

 

 

  • N'์ด ์ „์ฒด ๋…ธ๋“œ ์ง‘ํ•ฉ N๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
  • ์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ํ™•์ •๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋จ

์ฃผ์š” ํŠน์ง•:

  • ๊ฐ ๋ผ์šฐํ„ฐ๋Š” ์ž์‹ ์„ ์ถœ๋ฐœ์ ์œผ๋กœ ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐ
  • ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ํ™•์ •
  • ๊ทธ๋ฆฌ๋””(Greedy) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ํ•ญ์ƒ ํ˜„์žฌ๊นŒ์ง€ ์•Œ๋ ค์ง„ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒ
  • ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘

 

์‹œ๊ฐ„ ๋ณต์žก๋„ : 

์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต : ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ N'์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ w๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  n๊ฐœ์˜ ๋…ธ๋“œ ๊ฒ€์‚ฌ

๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต : ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ N'์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ w๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  n-1๊ฐœ์˜ ๋…ธ๋“œ ๊ฒ€์‚ฌ

...

=> ์ตœ์•…์˜ ๊ฒฝ์šฐ n(n+1)/2 ๊ฐœ ๋…ธ๋“œ ๊ฒ€์‚ฌ, O(n^2) 

 

ํž™ ์ž๋ฃŒ ๊ตฌ์กฐ ํ™œ์šฉํ•œ ๊ฐœ์„ ๋œ ๋ฐฉ์‹์€ ์„ ํ˜• ์‹œ๊ฐ„์ด ์•„๋‹Œ ๋กœ๊ทธ๊ธ‰์ˆ˜ ์‹œ๊ฐ„์œผ๋กœ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์„ ์žˆ์–ด ์‹œ๊ฐ„๋ณต์žก๋„ : O(nlogn)์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

 

 

 

์ฐธ๊ณ  ๋„์„œ :

์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํ‚น : ํ•˜ํ–ฅ์‹ ์ ‘๊ทผ(7ํŒ) - James F. Kurose , Keith W.Ross ์ง€์Œ

728x90