์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ก 

[ Algorithm ] ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ( Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜

KIMHYEYUN 2021. 9. 16. 18:54
๋ฐ˜์‘ํ˜•

Floyd-Warshall ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ?

Floyd-Warshall ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€, ๋ณ€์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์Œ์ด๊ฑฐ๋‚˜ ์–‘์ธ ( ์Œ์ˆ˜ ์‚ฌ์ดํด์€ ์—†๋Š” ) ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด๋‹ค.

Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์ •ํ•ด์ง„ ์ถœ๋ฐœ์ง€ vertex ์—์„œ ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ชจ๋“  vertex์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๊ฐ€์žฅ ์ž‘์€ ๊ฐ€์ค‘์น˜๋ฅผ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•ด๋‚˜๊ฐ„๋‹ค. ( ์šฐ์„ ์ˆœ์œ„ ํ ์ด์šฉ )

Floyd-Warshall ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ชจ๋“  vertex ์—์„œ ๋ชจ๋“  vertex ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ•œ๋ฒˆ์— ๊ตฌํ•œ๋‹ค. ์ฆ‰, ๋ชจ๋“  vertex ์Œ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค.
    • ๋ชจ๋“  ์Œ์„ ํ‘œํ˜„ํ•˜๋Š” ์ด์ฐจ์› ๋ฐฐ์—ด ์„ ์„ ์–ธํ•˜๊ณ , Dynamic Programming ๋ฐฉ์‹์œผ๋กœ ๊ฐ ์Œ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ง„ํ–‰ ๊ณผ์ •

  • iํ–‰๊ณผ j์—ด์˜ ์›์†Œ์ธ (i, j) ์›์†Œ๋Š” vertex i๋กœ๋ถ€ํ„ฐ vertex j๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์ด๋‹ค.
  • ์ ํ™”์‹ ๐Ÿ‘‰ dist[i, j] = min(dist[i, j], dist[i,k] + dist[k,j])
    • vertex i์—์„œ vertex k๋ฅผ ๊ฑฐ์ณ์„œ vertex j๋กœ ๊ฐˆ ๋•Œ, i์—์„œ ๋ฐ”๋กœ j๋กœ ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค ์งง๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ

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

vertex์˜ ๊ฐฏ์ˆ˜ V ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์ด 3์ค‘์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— O(V3)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐ„์„ ๋“ค์˜ ์ •๋ณด๋ฅผ V * V ํฌ๊ธฐ์˜ ํ–‰๋ ฌ์— ์ €์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— O(V2)์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

728x90
๋ฐ˜์‘ํ˜•