[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ(Bellman-Ford Algorithm)
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก SSP๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด์. ์ฒ์์ผ๋ก ์๊ฐํ ์๊ณ ๋ฆฌ์ฆ์ Bellman-Ford ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ฐ๋ฆฌ ๋ง๋ก๋ ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ค.
Bellman-Ford Algorithm
๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง์ SSP๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ ์ค ์ ์ผํ๊ฒ negative weight ์ด ์กด์ฌํ๋ ๊ทธ๋ํ์์๋ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ์ง๋ง negative weight cycle์ด ์กด์ฌํ ๋๋ ํด๋ต์ ์ฐพ์ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฒจ๋งํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ Negative Cycle์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ ์กด์ฌํ ๋๋ FALSE
, Negative Cylcle์ด ์์ ๋๋ TRUE
๋ฅผ ๋ฐํํ๋ค.
Algorithm Steps
๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋จ๊ณ๋ณ๋ก ๋๋์ด์ ์งํํด๋ณด์.
Step 1 : Initialization - ๐ฉ(# of vertice)
์ผ๋จ ํ์ฌ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ด๊ธฐํ ํ๋ค. ์ด ๋ ์์์ ์ ์ ์ธํ ๋ชจ๋ ์ ์ ๋ค์ ์ต๋จ๊ธธ์ด๋ฅผ ์์ ๋ฌดํ๋๋ก ๋ง๋ค๊ณ ๋ชจ๋ ์ ์ ๋ค์ ๋ถ๋ชจ๋ ธ๋๋ NIL ๋ก ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ ์ ์ต๋จ๊ธธ์ด๋ 0์ผ๋ก ๋ง๋ ๋ค.
for each vertice in V
do d[v] = INFINITE
p[v] = NIL
d[s] = 0
Step 2 : Rexation - ๐ฉ(# of edges)
๋ชจ๋ ์ ์ ์ ๋ํด์ relaxation์ ์งํํ๋ค. ๊ฐ ์ ์ ๋ง๋ค ์ด์ด์ง ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ๊ทธ ์ ์ ์ ์ ์ฅํ๋ค.
for i = 1 to N(number of edges)
for each edge(u, v) in set of edges
if (d[v] > d[u]+w)
d[v] = d[u]+w
p[v] = u
Step 3 : Test for Negative Weight Cycle - ๐ฉ(# of edges)
์ด๋ฏธ Step 2์์ Relaxation์ด ์งํ๋์๊ธฐ ๋๋ฌธ์, ๋ง์ฝ์ ํ๋ฒ ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ๋ฉด์ relaxation์ ์ํํ์ ๋, ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ ์ ์ ์ด ๋ฐ๊ฒฌ๋๋ค๋ฉด, ํด๋น ์ ์ ์ Negative Weight Cycle์ ๋ง๋๋ ์ ์ ์ผ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ false ๋ฅผ ๋ฐํํ๋ค.
for each edge in set of edges
if d[v] > d[u] + w(u, b)
return False
Example
์ ๊ทธ๋ํ๋ฅผ ์์๋ก ๋ฒจ๋งํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด๋ณด์.
Phase 1
๋จผ์ ์์์ ์ ์ ์ ํ๊ณ ๊ฐ ์ ์ ๋ค์ ๊ฐ์ ์ด๊ธฐํ ํด์ฃผ์ด์ผ ํ๋ค. ์ด ์์์์๋ ์์์ ์ A๋ก ์ ํ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ A๋ง ๊ธธ์ด ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํ๊ณ ๋๋จธ์ง ์ ์ ๋ค์ ๋ํด์๋ ์์ ๋ฌดํ๋๋ฅผ ์ง์ ํ๋ค.
Phase 2
์์์ ์ธ A ์ ์ ์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋์ด ์๋ ๋ ธ๋๋ค์ ๋ํด Relaxtion ์ ์งํํ๋ค.
- B ์ ์ ์ ์ ์ฅ๋ ์ต๋จ๊ฑฐ๋ฆฌ ๊ฐ์ ์์ ๋ฌดํ๋์๋๋ฐ, A๋ก๋ถํฐ B๊น์ง์ ๊ฑฐ๋ฆฌ์ธ 6์ด ๋ ์๊ธฐ ๋๋ฌธ์ d[B]๋ 6์ด ๋๊ณ , p[B]๋ A๊ฐ ๋๋ค. p[v]๋ ์ต๋จ๊ฒฝ๋ก์์ ์ ์ v ๋ฐ๋ก ์ง์ ์ ๋์จ ์ ์ ์ ์๋ฏธํ๋ค.
- ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก A๋ก๋ถํฐ D๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ฒ ๋๋ฉด d[D]๋ 7์ด ๋๋ค.
Phase 3
์ด์ ์ ์ A์ ๋ํ Relaxation ์ด ๋๋ฌ์ผ๋, ๋ค๋ฅธ ์ ์ ๋ค๋ ๋ชจ๋ Relaxation์ ์งํํด์ผํ๋ค. ๋ค์ ์ ์ ์ B ์ ์ ์ด๋ค(์ฌ์ค ์์๋ ์๊ด์๋ค). ์ฐ๋ฆฌ๋ ์์์ A๋ก๋ถํฐ B์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ๋ค ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
- B์ ์ฐ๊ฒฐ๋ C์ ์ ๊น์ง ๋๋ฌํ๊ธฐ ์ํด์๋ A์์ B๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ์ธ 6์ B์์ C๋ก ์ด๋ํ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค. ํ ์์ ์์ C๊น์ง ๋๋ฌํ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ ์์ ๋ฌดํ๋๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก ๊ฐ์ BC๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ์ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ d[C]๋ 6+5 ์ธ 11์ด ๋๋ค.
- B์ ์ฐ๊ฒฐ๋ ์ ์ E์ ๋๋ฌํ๋ ์ต๋จ๊ฑฐ๋ฆฌ ์ญ์ ์์ ๊ฐ์ ๊ณผ์ ์ ํตํด 6-2๋ก 4๊ฐ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
- B์ ์ฐ๊ฒฐ๋ ๋ง์ง๋ง ์ ์ D์ ๋๋ฌํ๊ธฐ ์ํด์๋ ๊ฑฐ๋ฆฌ AB์ ๊ฑฐ๋ฆฌ BD๋ฅผ ๋ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ผ ๊ฑฐ๋ฆฌ๊ฐ 6+8=14๊ฐ ๋๋๋ฐ, ์ด ๊ฑฐ๋ฆฌ๋ A์์ ๊ณง๋ฐ๋ก D๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ํฌ๋ค. ์ฐ๋ฆฌ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์งํด์ผํ๊ธฐ ๋๋ฌธ์ D๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ A์์ ๊ณง์ฅ ์ด๋ํ๋ 7๋ก ์ ์งํ๋ค.
Phase 4
์ด์ ์ ์ D์ ๋ํ Relaxation์ ์งํํด๋ณด์. ์ ์ D๋ C์ E๋ก ์ฐ๊ฒฐ๋๋ค.
- ์ ์ D๋ฅผ ๊ฑฐ์ณ์ C๋ก ์ด๋ํ๊ฒ ๋๋ฉด ์ด ๊ฑฐ๋ฆฌ๊ฐ
7 - 3 = 4
๊ฐ ๋๋ค. ๊ธฐ์กด์ C๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ B๋ฅผ ํตํด๊ฐ๋ 11๋ก ์ค์ ๋์ด์์๊ธฐ ๋๋ฌธ์ ๋ ์งง์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋์์ผ๋ฏ๋ก d[C]๋ฅผ ์๋ก์ด ๊ฐ์ผ๋ก ๊ฐฑ์ ํด์ค๋ค. - ์ ์ D๋ฅผ ๊ฑฐ์ณ์ ์ ์ E๋ก ์ด๋ํ๊ฒ ๋๋ฉด ์ด ๊ฑฐ๋ฆฌ๊ฐ
7 + 9 + 11
์ด ๋๋ค. ์ด ๊ฑฐ๋ฆฌ๋ ๊ธฐ์กด์ ์ต๋จ๊ฑฐ๋ฆฌ์๋ ์ ์ B๋ฅผ ๊ฑฐ์ณ์ E๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์๋ก ๊ฐฑ์ ํ์ง ์๊ณ ๋์ด๊ฐ๋ค.
Phase 5
C์ ๋ํ Relaxation์ ์งํํด๋ณด์. ํ์ฌ ์ ์ C๊น์ง์ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ฑฐ์ณ์ B๋ก ์ด๋ํ๊ฒ ๋๋ฉด, A์์ ๋ฐ๋ก B๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ์งง๋ค. ๋ฐ๋ผ์ B์ ์๋ก์ด ์ต๋จ๊ฑฐ๋ฆฌ๋ 4 - 2 = 2
๊ฐ ๋๋ค.
Phase 6
E์ ์ ์ ๋ํ Relaxation์ ์งํํ๋ฉด E๋ฅผ ๊ฑฐ์ณ C๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ 9์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ C๊น์ง ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ณด๋ค ํฌ๋ค. ๋ฐ๋ผ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์
๋ฐ์ดํธ ํ์ง ์๊ณ ๋๋ธ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ฒ์ relaxation ์ธํธ๊ฐ ๋๋๊ฒ ๋๋ค. ์ด ์์
์ ์์ ๋
ธ๋๋ฅผ ์ ์ธํ ๋
ธ๋์ ์ ๋งํผ
๋ฐ๋ณตํ๋ค.
Phase 7
relaxation์ V-1 ๋ฒ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ๋ค๋ฅธ ๊ฐ์ ๋ค์ ๊ฐ์ ๋ณํ์ง ์๊ณ B์์ E๋ก ๊ฐ๋ ๊ฐ์ ์ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ค. ์ด ์ดํ๋ก ๋ชจ๋ rexlation ๊ฐ์ ๋ณํ์ง ์์ผ๋ฏ๋ก ๊ทธ๋ํ ๋์์ ์๋ตํ๊ธฐ๋ก ํ๊ฒ ๋ค.
Phase 8
Relaxation์ ๋๋ฌ์ง๋ง, negative weight cycle์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด์ ์ ์์ ์ ํ๋ฒ ๋ ๊ฑฐ์ณ์ผ ํ๋ค. ํ์ฌ ๊ฐ ์ ์ ์ ๋ํ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๊ธฐ๋ก๋์ด ์๋๋ฐ ๋ง์ฝ ์ด ๊ฑฐ๋ฆฌ๊ฐ ์๋ก์ด ์ต๋จ๊ฑฐ๋ฆฌ๋ก ๊ฐฑ์ ๋ ์ ์๋ค๋ฉด, negative weight cycle์ด ์กด์ฌํ๋ค๋ ์๋ฏธ์ผ ๊ฒ์ด๋ค. ์ด๋๋ false ๋ฅผ ๋ฐํํด์ ์ง๊ธ๊น์ง ๊ตฌํ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์๋ฏธ๊ฐ ์์์ ์๋ฆฐ๋ค.
Algorithm Analysis
๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ๋
ธ๋ ์ด๊ธฐํ(๐ฉ(V)) + Rexlaxation์ v-1๋ฒ ๋ฐ๋ณต(๐ฉ(E * (V-1))) + ์์ ์ฌ์ดํด ์ฒดํฌ(๐ฉ(E)) ์ ์ฐ์ฐ์ ์ํํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ ๐ฉ(VE)
๊ฐ ๋๋ค.
'๐ฎ ์จ-์์ค > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] DAG์์ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฒ (0) | 2021.07.18 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ(Dijkstra Algorithm) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ์ต๋จ๊ฒฝ๋ก(Shortest Path) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ(Prim's Algorithm) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal Algorithm) (0) | 2021.07.18 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote