๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Problem Solving/Algorithm, Tips

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

by ํ–‰๋ฑ 2020. 6. 2.

https://www.youtube.com/watch?v=_lHSawdgXpI : ์ง๊ด€์  ์ดํ•ด ๋„์™€์ฃผ๋Š” 3๋ถ„์งœ๋ฆฌ ์˜์ƒ

https://code.google.com/archive/p/eclipselu/downloads : algorithm.pdf์˜ Dijkstra algorithm ๋ถ€๋ถ„ (Pseudocode ์ถœ์ฒ˜)

์•„๋ž˜ ๊ทธ๋ฆผ์˜ ํŒŒ๋ž€์ƒ‰ ํ•œ๊ธ€ ๊ธ€์”จ ์ถœ์ฒ˜๋Š” ๋‚˜

 

Pseudocode

 

์ด ์ˆ˜๋„์ฝ”๋“œ์—์„œ๋Š” dist๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค priority queue H์— push ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฒ˜์Œ๋ถ€ํ„ฐ H์— ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  dist๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด H์—๋„ ๊ทธ๋ฅผ ์•Œ๋ฆฐ๋‹ค๋Š” ์ปจ์…‰์ด๋‹ค. ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” H์—์„œ ์‚ฌ๋ผ์ง€๋ฏ€๋ฅด unvisited ๋ผ๋Š” ์…‹์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์‹ค์ œ ๊ตฌํ˜„ํ•  ๋•Œ dist๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ๊ฒƒ์„ H์— ์•Œ๋ฆฌ๋ ค๋ฉด (๊ฐ€๋ น v์˜ dist๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ์นœ๋‹ค๋ฉด) H์—์„œ value๊ฐ€ v์ธ ์›์†Œ๋ฅผ ์ฐพ๊ณ , ๊ทธ ์›์†Œ์˜ key๋ฅผ ์ƒˆ๋กœ์šด dist๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ STL์˜ priority_queue๋Š” ๋‚ด๋ถ€ ์›์†Œ๋ฅผ traverse ํ•˜๋„๋ก ์งœ์—ฌ์žˆ์ง€๋„ ์•Š์œผ๋ฏ€๋กœ value๊ฐ€ v์ธ ์›์†Œ๋ฅผ ์ฐพ๊ณ  key๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์–ด๋ ต๋‹ค.

 

๋”ฐ๋ผ์„œ dist๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค H์— push ํ•˜๊ณ , H์—์„œ delete_min() ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ์ •๋ณด๋ผ๋ฉด ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ๋Š” unvisited ๋ผ๋Š” ์…‹์„ ๋‘๊ณ  delete_min() ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ์ง€, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ์ด๋ฒˆ์— ๋ฐฉ๋ฌธํ•˜์˜€๋‹ค๋ฉด unvisited์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ“๊ธ€