Hello Ocean! ๐ŸŒผ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณธ๋ฌธ

Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

bba_dda 2020. 9. 21. 20:22
๋ฐ˜์‘ํ˜•

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Dijkstra)

์ตœ๋‹จ ๊ฒฝ๋กœ(shortest path)๋ฌธ์ œ ๋ž€?

์ž„์˜์˜ ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ๋กœ ์ค‘, ๊ฐ„์„ ๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์ค‘์น˜๋Š” ๋น„์šฉ, ๊ฑฐ๋ฆฌ, ์‹œ๊ฐ„ ๋“ฑ์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์—์„œ A -> B๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

A->B๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋Š” ๋งค์šฐ ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ๋…ธ๋“œ E๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๊ฒฝ๋กœ์ด๋‹ค.

์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ํ•˜๋‚˜์˜ ๋…ธ๋“œ -> ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋…ธ๋“œ ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
  2. ํ•˜๋‚˜์˜ ๋…ธ๋“œ -> ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
  3. ํ•˜๋‚˜์˜ ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Š” ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ
  4. ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ

Dijkstra์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐœ๋…

Dijkstra์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€, ์œ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋“ค ์ค‘์—์„œ 2๋ฒˆ. ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๊ธฐ๋ณธ ๋กœ์ง

  • ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฐ์—ด dis ์ด์šฉ
  • ์‹œ์ž‘ ๋…ธ๋“œ v
  • ์ง‘ํ•ฉ S ={์ตœ๋‹จ ๊ฑฐ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ๋…ธ๋“œ๋“ค์ด ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€๋จ}
  1. dis[v] = 0 , S={v}

    ์ž๊ธฐ ์ž์‹ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” 0

  2. v์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•œ dis ๊ฐ’ = v์™€ ํ•ด๋‹น ๋…ธ๋“œ ์‚ฌ์ด ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜

    v์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•œ dis ๊ฐ’ = ๋ฌดํ•œ๋Œ€์˜ ๊ฐ’

  3. ๋งค ๋‹จ๊ณ„์—์„œ S์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์— dis๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ S์— ์ถ”๊ฐ€

  4. ์ƒˆ๋กœ์šด ๋…ธ๋“œ u๊ฐ€ S์— ์ถ”๊ฐ€๋˜๋ฉด, S์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์˜ dis๊ฐ’์„ ์ˆ˜์ •

    • ์‹œ์ž‘์ ์ด u๋กœ ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, u๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ์™€ ๊ธฐ์กด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ dis๋ฅผ ๊ฐฑ์‹ 
    • dis[w] = min(dis[w], dis[u] + weight[u][w])

๊ตฌํ˜„

  1. ์šฐ์„ ์ˆœ์œ„ ํ
  2. visited[] ์ด์šฉ
    • ์ •์ ์˜ ์ˆ˜๊ฐ€ ์ ๊ฑฐ๋‚˜, ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์€ ๊ฒฝ์šฐ ์ด ๋ฐฉ์‹์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค

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

  • ๋…ธ๋“œ ๊ฐœ์ˆ˜ V, ๊ฐ„์„  ๊ฐœ์ˆ˜ E์ผ ๋•Œ

     

1) ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š”๊ฒฝ์šฐ

์‹œ๊ฐ„๋ณต์žก๋„ : O(V^2)

2) ํž™(์šฐ์„ ์ˆœ์œ„ ํ)๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒฝ์šฐ 

์‹œ๊ฐ„๋ณต์žก๋„ :  O(ElogV)

์ฐธ๊ณ  ์ž๋ฃŒ

https://hsp1116.tistory.com/42

https://mattlee.tistory.com/50

https://sungjk.github.io/2016/05/13/Dijkstra.html

https://wordbe.tistory.com/entry/%EC%B5%9C%EB%8B%A8%EA%B2%BD%EB%A1%9C-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

๋ฐ˜์‘ํ˜•