2020-1ํ•™๊ธฐ, ๋Œ€ํ•™์—์„œ โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜โ€™ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•œ ๋ฐ”๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ง€์ ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค :)

2 minute read

2020-1ํ•™๊ธฐ, ๋Œ€ํ•™์—์„œ โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜โ€™ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•œ ๋ฐ”๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ง€์ ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค :)


์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„ $G$์—์„œ ์ตœ๋Œ€ $k$๊ฐœ์˜ edge๋ฅผ ๊ฑฐ์ณ ๋…ธ๋“œ $s$์—์„œ ๋…ธ๋“œ $t$๋กœ ๊ฐ€๋Š” shortest path๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค. ์ด์ „์˜ <Dijkstra Algothm>์˜ ์ƒํ™ฉ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์ตœ๋Œ€ $k$๊ฐœ์˜ edge๋ฅผ ๊ฑฐ์นœ๋‹ค๋Š” ์กฐ๊ฑด์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด, $B$์—์„œ $T$๋กœ ๊ฐˆ ๋•Œ, ์ตœ๋Œ€ $1$๊ฐœ์˜ edge๋งŒ ๊ฑฐ์น  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋น„์šฉ์ด $4$์ธ edge๋ฅผ ๊ฑฐ์ณ์„œ ๋„์ฐฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์€ โ€œat most $k$ edgeโ€๋ผ๋Š” ์กฐ๊ฑด ๋•Œ๋ฌธ์— the shortest path์ธ $(B, D, T)$์˜ ๋น„์šฉ $2$๋ณด๋‹ค ๋” ํฐ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ์ œ๋Š” <DP> ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด $k$๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์‹œ์ž‘๋…ธ๋“œ $s$์—์„œ ๊ฐ ๋…ธ๋“œ $v$๊นŒ์ง€ $k$๊ฐœ์˜ edge๋ฅผ ๊ฑฐ์ณค์„ ๋•Œ, ์ฆ‰ $k$-hop์„ ํ–ˆ์„ ๋•Œ์˜ shortest cost๋ฅผ dist[v][k]์— ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

Let $\text{dist}(v, i)$ be the shortest path from $s$ to $v$ that uses $i$ edges.

(Initialize) set $\text{dist}(v, 0) = \infty$ and $\text{dist}(s, *) = 0$.

Then,

\[\text{dist}(v, i) = \min_{(u, v) \in E} \left\{ \text{dist}(u, i-1) + \ell(u, v) \right\}\]

์‹œ์ž‘๋…ธ๋“œ $s$์—์„œ ์‹œ์ž‘ํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด, ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ชจ๋“  $v$์— ๋Œ€ํ•ด $\text{dist}(v, 1) = \ell(s, v)$๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.

for a nodes $v$ with $(s, v) \in E$, $\text{dist}(v, 1) = \ell(s, v)$

๋‹ค์Œ์€ $s$์˜ ์ธ์ ‘ ๋…ธ๋“œ์˜€๋˜ $v$ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด ๊ทธ๋“ค์˜ ์ธ์ ‘ ๋…ธ๋“œ $u$๋“ค์˜ $\text{dist}(u, 2)$ ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

<Dijkstraโ€™s Algorithm>์˜ ๊ฒฝ์šฐ ๋ช‡ ๋ฒˆ hop ํ–ˆ๋Š”์ง€๋ฅผ ๋”ฐ๋กœ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  dist[v]๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ต์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— hop ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋ฌผ๋ก  ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜๋ฉด <Dijkstraโ€™s Algorithm>์—์„œ dist[v] = (cost, hop)๋ฅผ ์ €์žฅํ•ด์„œ hop ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฒˆ ๊ฒฝ์šฐ๋Š” dist[v][hop]์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์ฐฉ๋…ธ๋“œ $t$์— ๋Œ€ํ•ด dist[t][hop]์—์„œ ์›ํ•˜๋Š” hop ์ˆ˜์— ๋”ฐ๋ฅธ cheapest cost๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒฐ๊ตญ 1์ฐจ์› dist[] ๋ฐฐ์—ด์„ 2์ฐจ์› dist[][]๋กœ ํ™•์žฅ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•ด์„œ hop ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ๊ฒƒ์ด๋‹ค. <Dijkstraโ€™s Algorithm>์˜ ์›๋ฆฌ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

* ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ๊ฒŒ โ€œexact $k$ edgesโ€๊ฐ€ ์•„๋‹ˆ๋ผ โ€œat most $k$ edgeโ€๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์ž!


์ถ”์ฒœ ๋ฌธ์ œ

์•ˆํƒ€๊น๊ฒŒ๋„ ๋ฐฑ์ค€์—์„œ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ฐพ์ง€ ๋ชป ํ–ˆ๋‹ค ๐Ÿ˜ฅ

Categories:

Updated: