Floyd-Warshall

Floyd-Warshall : ๊ทธ๋ž˜ํ”„์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ(Floyd-Warshall)

  • ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๊ธฐ๋Šฅ : ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ„์— ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰

  • ํŠน์ง• : ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜ ์—์ง€๊ฐ€ ์žˆ์–ด๋„ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์‚ฌ์šฉํ•ด๋ณผ๋งŒ ํ•จ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N^3)

ํŠน์ง•

A โ†’ B ๋…ธ๋“œ๊นŒ์ง€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ตœ๋‹จ ๊ฒฝ๋กœ ์œ„์— C๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ถ€๋ถ„ ๊ฒฝ๋กœ ์—ญ์‹œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ด๋‹ค.

  • ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋งค์šฐ ์งง๊ณ , 3์ค‘ for๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ์ ํ™”์‹ : D[S][T] = Math.min(D[S][T], D[S][K] + D[K][T]

    • K : ๊ฑฐ์ณ๊ฐ€๋Š” ์ •์ 

    • if (D[S][T] > D[S][K] + D[K][E]) D[S][T] = D[S][K] + D[K][T]

  • S -> T ๊นŒ์ง€ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๊ฒฝ๋กœ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  K๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (๋ธŒ๋ฃจํŠธํฌ์Šค์ฒ˜๋Ÿผ)

  • ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  K๋ฅผ ํƒ์ƒ‰ํ•ด ๋ณด๊ณ  ๊ทธ์ค‘ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ K๋ฅผ ์„ ํƒ

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  1. ์ธ์ ‘ ํ–‰๋ ฌ ์ƒ์„ฑ

  • i ๋Š” ์ถœ๋ฐœ ๋…ธ๋“œ, j ๋Š” ๋„์ฐฉ ๋…ธ๋“œ, k๋Š” ๊ฒฝ์œ  ๋…ธ๋“œ, ๊ฐ€์ค‘์น˜๋Š” w

    • (i == j) D[i][j] = 0

    • (i โ‰  j) D[i][j] = INF

    • D[i][j] = w

  1. ์ ํ™”์‹์œผ๋กœ ๊ทธ๋ž˜ํ”„ ์—…๋ฐ์ดํŠธ

  • ์ตœ์ข… ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ’์ด ๋ฌดํ•œ๋Œ€(INF)๋Š” ์ ˆ๋Œ€ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ฌธ์ œ :

Last updated