๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ_๋‹ค์ต์ŠคํŠธ๋ผ & ๋ฒจ๋งŒํฌ๋“œ

๋ฐ˜์‘ํ˜•

๋‹ค์ต์ŠคํŠธ๋ผ & ๋ฒจ๋งŒํฌ๋“œ

์ด ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

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

์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋ฒจ๋งŒํฌ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

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

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์—†์„ ๋•Œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

V๊ฐœ์˜ ์ •์ ๊ณผ ์–‘์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง„ E๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„์—์„œ ์ถœ๋ฐœ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  1. ํ˜„์žฌ ์ •์ ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๋“ค์„ ๋ชจ๋‘ ๋ณธ๋‹ค.
  2. ํ˜„์žฌ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๋‹ค์Œ ์ •์ ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ์™€ ์‹œ์ž‘ ์ •์ ๊ณผ ํ˜„์žฌ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์ด ์‹œ์ž‘ ์ •์ ๊ณผ ๋‹ค์Œ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ•ฉ๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  3. ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ตœ๋‹จ ๊ฒฝ๋กœ ํ…Œ์ด๋ธ”์„ ์™„์„ฑํ•œ๋‹ค.

ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด O(V^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ , ์šฐ์„ ์ˆœ์œ„ ํž™์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด O(ElogV)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Bellman-Ford-Algorithm)

๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์–ด๋„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

V๊ฐœ์˜ ์ •์ ๊ณผ E๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„์—์„œ ์ถœ๋ฐœ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , ์Œ์˜ ์‚ฌ์ดํด๋„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  1. ๊ทธ๋ž˜ํ”„๋‚ด์— ๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•ด์„œ 2๋ฒˆ ์‹œํ–‰ํ•œ๋‹ค.
  2. ์ •์  A์—์„œ ์ •์  B๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์—์„œ ํ˜„์žฌ B๋กœ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ณด๋‹ค A๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ์™€ ํ˜„์žฌ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ๋” ์ ๋‹ค๋ฉด ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  3. ๋” ์ด์ƒ ๊ฐฑ์‹ ์ด ์ด๋ฃจ์–ด ์ง€์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, (์ •์ ์˜ ์ˆ˜)๋ฒˆ ์‹œํ–‰์ด ์ด๋ฃจ์–ด์ง„ ํ›„์—๋„ ๊ฐฑ์‹ ์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ์Œ์˜ ์ˆœํ™˜์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

์ด ์—ฐ์‚ฐํšŸ์ˆ˜๋Š” V*E์ด๋ฏ€๋กœ, O(VE)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

๊ตฌํ˜„

๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฑ์ค€ 1916๋ฒˆ ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ์— ์ ์šฉํ•ด ๋ณด์•˜๋‹ค.

[Algorithm/Java][๋ฐฑ์ค€] 1916๋ฒˆ ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•