๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ–ฅ dev-ruby

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

algorithm

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

ruby_s 2021. 11. 25. 03:39
728x90
๋ฐ˜์‘ํ˜•
SMALL

Dijkstra

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹œ์ž‘์ ์œผ๋กœ ๋ถ€ํ„ฐ ๋‚˜๋จธ์ง€ ์ •์ ๊นŒ์ง€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ 1:N ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋‹จ, ๊ฐ€์ค‘์น˜๋Š” ์Œ์ˆ˜(-) ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.

 

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

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ๊ฐ์˜ ์ •์ ์— ๋Œ€ํ•ด์„œ ์ •์  s์—์„œ ์ •์  v๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ d[v]์— ์ €์žฅํ•˜๋ฉด์„œ ํƒ์ƒ‰ํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ์ž‘ ์‹œd[s] = 0์ด๊ณ , s๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•ด์„œ๋Š” d[v] = ํ•ด๋‹น๊ฐ€์ค‘์น˜ ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ข…๋ฃŒ ์‹œd[v]๋Š” s์—์„œ v๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋œ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Graph[A][B]๋Š” A์—์„œ B๊นŒ์ง€ ๊ฐ€๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ ์ด๋ผ๊ณ  ํ•˜์ž.
 

1. ์ฃผ์–ด์ง„ N๊ฐœ์˜ ์ •์  ๊ทธ๋ž˜ํ”„์—์„œ NxN 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— ๊ฐ ์ •์  ์‚ฌ์ด์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

2. ๋ณธ์ธ ๋…ธ๋“œ์—๋Š” 0, ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์—๋Š” Infinity(๋ฌดํ•œ๋Œ€)๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
 
3. ์ถœ๋ฐœ์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด distance[v]๋ฅผ ๋งŒ๋“ค๊ณ , ์ถœ๋ฐœ ๋…ธ๋“œ์—๋Š” 0์œผ๋กœ, ์ถœ๋ฐœ์ ์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์—๋Š” Infinity(๋ฌดํ•œ๋Œ€)๋กœ ์„ ์–ธํ•œ๋‹ค.
 
4. ๋ฐฉ๋ฌธ ์™„๋ฃŒ๋œ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  visited[i]๋ฅผ ๋งŒ๋“ค๊ณ , ๋ฐฉ๋ฌธ ์™„๋ฃŒ๋œ ๋…ธ๋“œ๋Š” true๋กœ ๋งŒ๋“ ๋‹ค.
 
5. "๋ฏธ๋ฐฉ๋ฌธ" ์ƒํƒœ์ธ ๋ชจ๋“  ๋…ธ๋“œ๋“ค ์ค‘, ์ถœ๋ฐœ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ œ์ผ  ์งง์€ ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ๊ทธ ๋…ธ๋“œ๋ฅผ curr์— ์ €์žฅํ•œ๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•ด ๊ฑฐ๋ฆฌ๊ฐ€ ์ œ์ผ ์งง์€ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค. (์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ด ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.)
6. ์ถœ๋ฐœ ๋…ธ๋“œ๋ถ€ํ„ฐ curr๊นŒ์ง€ distance[curr]+Graph[curr][B] ๋ฅผ distance[B]์™€ ๋น„๊ตํ•˜์—ฌ, ๋” ์ž‘์„ ๊ฒฝ์šฐ ์ถœ๋ฐœ ๋…ธ๋“œ์—์„œ B๋…ธ๋“œ ๊นŒ์ง€ ์ตœ์†Œ ๋น„์šฉ์ธ distance[B]๋ฅผ distance[curr]+Graph[curr][B]๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
 
7. curr์˜ ๋ชจ๋“  ์ด์›ƒ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋…ธ๋“œ ๊ฐœ์ˆ˜๋งŒํผ ๊ณ„์† ์ˆ˜ํ–‰ํ•œ๋‹ค.
 
8. curr๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ "๋ฐฉ๋ฌธ ์™„๋ฃŒ"๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋” ์ด์ƒ curr์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
 
9. ์ด๋ ‡๊ฒŒ distance[] ๋ฐฐ์—ด์ด ๋ชจ๋‘ ๋ฐฉ๋ฌธ ์™„๋ฃŒ ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
 

10. ์ตœ์ข…, distance[] ๋ฐฐ์—ด์ด ์ถœ๋ฐœ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋น„์šฉ์ด ๋œ๋‹ค.

 
 

์‹ค์ œ ์˜ˆ์‹œ

์œ„์™€ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ค€๋น„๋˜์–ด์žˆ๋‹ค.

์ปดํ“จํ„ฐ์—์„œ๋Š” ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.

0 2 5 1 Infinity Infinity
2 0 3 2 Infinity Infinity
5 3 0 3 1 5
1 2 3 0 1 Infinity
Infinity Infinity 1 1 0 2
Infinity Infinity 5 Infinity 2 0

์ง์ ‘ ์—ฐ๊ฒฐ๋ผ ์žˆ๋Š” ์ •์ ์€ ํ•ด๋‹น ๊ฐ€์ค‘์น˜๋กœ, ๊ฑฐ์ณ๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” Infinity๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

์ด ์ƒํƒœ์—์„œ 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.

1๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ์ตœ์†Œ ๋น„์šฉ distance[]์€ ๋‹ค์Œ์ด ๋œ๋‹ค. ์ด ๋ฐฐ์—ด์„ ๊ฐฑ์‹ ํ•˜์—ฌ 1๋ฒˆ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ ์ตœ์†Œ ๋น„์šฉ์„ ์•Œ์•„๋‚ธ๋‹ค.

0 2 5 1 Infinity Infinity

distance[0]์€ ๋ฐฉ๋ฌธ์™„๋ฃŒ๋œ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.

๋ฐฉ๋ฌธ ์™„๋ฃŒ๋œ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ฐ€์žฅ ์ž‘์€ ๋น„์šฉ์„ ๊ฐ€์ง€๋Š” 4๋ฒˆ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.

4๋ฒˆ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๋…ธ๋“œ๋“ค์˜ ๋น„์šฉ์„ ํ™•์ธํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ ๋ฐฐ์—ด( distance[] )์„ ๊ฐฑ์‹ ํ•˜๋ฉด ๋œ๋‹ค.

0 2 5 1 2 Infinity

1->4->3๋ฅผ ๊ฑฐ์ณ๊ฐˆ ๋•Œ ์ตœ์†Œ ๋น„์šฉ์ด 1+3<5 ์ด๋ฏ€๋กœ 4๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

1->4->5๋ฅผ ๊ฑฐ์ณ ๊ฐˆ๋•Œ ์ตœ์†Œ ๋น„์šฉ์ด 2<Infinity ์ด๋ฏ€๋กœ 2๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

2๋ฒˆ์˜ ๊ฒฝ์šฐ 4๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹ค์ด๋ ‰ํŠธ๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ๋” ๋น„์šฉ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด์ œ ๋‹ค์Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ 2๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

0 2 4 1 2 Infinity

2๋ฒˆ์„ ๊ฑฐ์ณ 4๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ๊ฒฝ์šฐ ๋น„์šฉ์€ 4๋กœ 1๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๊ณ ,
3๋ฒˆ ๋…ธ๋“œ๋Š” 2๋ฒˆ์„ ๊ฑฐ์ณ๊ฐ€๋ฉด 2+3๋กœ 4๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๊ฐฑ์‹  ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

์ด์ œ ๋‹ค์Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ 5๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

0 2 4 1 2 Infinity

5๋ฒˆ์„ ๊ฑฐ์ณ 3๋ฒˆ์œผ๋กœ ๊ฐˆ ๊ฒฝ์šฐ, (5๋ฒˆ๊นŒ์ง€ ๋น„์šฉ 2 + 5๋ฒˆ์—์„œ 3๋ฒˆ๊นŒ์ง€ ๋น„์šฉ 1)= 3 < 4 ์ด๊ณ ,

5๋ฒˆ์„ ๊ฑฐ์ณ 6๋ฒˆ์œผ๋กœ ๊ฐˆ ๊ฒฝ์šฐ, (5๋ฒˆ๊นŒ์ง€ ๋น„์šฉ 2 + 5๋ฒˆ์—์„œ 6๋ฒˆ๊นŒ์ง€ ๋น„์šฉ 2)=4 < Infinity ์ด๋ฏ€๋กœ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐฑ์‹ ๋œ๋‹ค.

0 2 3 1 2 4

์ด์ œ ๋‹ค์Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ 3๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

0 2 3 1 2 4

์ตœ์†Œ ๋น„์šฉ์€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, 6๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ๋„ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๊ณ , ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋œ๋‹ค.

0 2 3 1 2 4

 

๋‹ค์Œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ถ€ํ–ˆ๋‹ค.

https://m.blog.naver.com/ndb796/221234424646

 

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

๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ™œ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ํƒ...

blog.naver.com

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค <๋ฐฐ๋‹ฌ> ๋ฌธ์ œ ํ‘ธ๋ ค๊ณ  ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ–ˆ๋Š”๋ฐ, ์Šฌ์Šฌ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋„ ํ’€ ๋•Œ์ธ ๊ฑฐ ๊ฐ™์•„์„œ

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ, ๋ฒจ๋งŒ ํฌ๋“œ  ๋„ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค...

๋‹ค ๊นŒ๋จน์—ˆ๋‹ค .. ! ๊ทธ๋ž˜ํ”„ ๋„˜ ์–ด๋ ค์šด ๊ฒƒ..

 

์šฐ์„ ์ˆœ์œ„ ํ ์ฐธ๊ณ ํ•˜๊ธฐ. ๋น„ํšจ์œจ์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ ๋ง๊ณ .

https://velog.io/@lre12/%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%98Dijkstra-Algorithm

 

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

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฐฑ์ค€ 1753๋ฒˆ

velog.io

https://www.apexcel.blog/algorithm/graph/shortest-path/dijkstra/

 

์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) 1 - ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's Algorithm)

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra’s Algorithm) ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Edsger Dijkstra๊ฐ€ ๊ณ ์•ˆํ–ˆ์œผ๋ฉฐ ์‹œ์ž‘ ์ •์ ์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •

www.apexcel.blog

 

728x90
๋ฐ˜์‘ํ˜•
LIST