728x90
Flow Networks
- ๊ฐ์ค๊ทธ๋ํ G (๋ชจ๋ ๊ฐ์ค์น๋ ์์)
- ์์ง์ ๊ฐ์ค์น = c(e)
- ์์์ s์๋ ๋ค์ด์ค๋ ์์ง ์๊ณ , ๋์ฐฉ์ t์๋ ๋๊ฐ๋ ์์ง๊ฐ ์๋ค
- Flow : ์ด์ฉ๊ฐ๋ฅํ ์ฉ๋์ ๊ธฐ๋ฐ์ผ๋ก, ๊ฐ์ ์ ๋ฐ๋ผ ์ด๋ํ๋ ๊ฐ
- ๋ชจ๋ ์์ง์ ๋ํด์, 0 ≤ f(e) ≤ c(e)
- flow ๊ฐ ( |f| )์ s์์ ๋๊ฐ๋ ํ๋ก์ฐ ์ด๋ = t๋ก ๋ค์ด์ค๋ ํ๋ก์ฐ ์ด๋
์ต๋ ํ๋ก์ฐ = ์ต์ cut
์ปท(cut)
- ์ฃผ์ด์ง ๋ ธ๋ V๋ฅผ ๋ ์งํฉ์ผ๋ก ๋ถํ
- ์ปท X์ ๋ํด์, f(X)๋ X๋ฅผ ์ง๋๋ flow ์ด๋
- c(X)๋ X๋ฅผ ์ง๋๋ ์์ง์ c๊ฐ ์ด๋
์ต๋ ํ๋ก์ฐ ๊ตฌํ๊ธฐ
- Ford-Fulkerson algorithm
- s→t ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค. BFS ์งํ
- ๊ฐ ๊ฒฝ๋ก์ c(e) ์ต์๊ฐ์ m์ด๋ผ๊ณ ํ์
- ๊ฐ ๊ฒฝ๋ก์ ์์ง๋ง๋ค, c(e) -= m์ผ๋ก ๊ฐฑ์ . ๋ฐ๋๋ฐฉํฅ ์์ง๋ c(e’) += m์ผ๋ก ๊ฐฑ์
- ๋๋ ๋๊น์ง ๋ฐ๋ณต → ์๋ฐฉํฅ ์ฉ๋์ด ๊ฝ ์ฐผ๊ฑฐ๋, ์ญ๋ฐฉํฅ์ ์ ๋์ด 0์ผ ๋ ์งํ ๋ถ๊ฐ
int fordFulkerson(int graph[V][V], int s, int t){ while (bfs(rGraph,s,t,parent)){ // bfs๋ก ๊ฒฝ๋กํ์ ์งํ // ๊ฒฝ๋ก๋ง๋ค ๊ฐ์ค์น ์ต์๊ฐ ์ฐพ๊ธฐ (๋ฐ๋ณต๋ฌธ 1) // ๊ฒฝ๋ก ์์ง๋ง๋ค -m, ๋ฐ๋๋ฐฉํฅ ์์ง๋ +m (๋ฐ๋ณต๋ฌธ2) max_flow += path_flow; } }
- ์์ฉ : m๋ช ์ด n์๋ฆฌ์ ์ผ์ ์ง์ํ ๋, 1์ธ 1์ ๋ฌด๋ผ๋ฉด ์ต๋ ๋ช๋ช ์ ์ฌ๋์๊ฒ ์ผ์ ์ค ์ ์๋๊ฐ?(2) dfs๋ฅผ ์ด์ฉํ ๋ฐฑํธ๋ํน์ ์งํํ๋ค.
- (1) ์ฃผ์ด์ง ๊ทธ๋ํ์ s, t๋ฅผ ์ถ๊ฐํ๊ณ ๋ชจ๋ ์์ง๋ ๊ฐ์ค์น๊ฐ 1์ด๋ผ๊ณ ๊ฐ์ ํ๋ค. ์ดํ ๊ทธ๋ํ์ ์ต๋ ํ๋ก์ฐ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
- Dinitz algorithm
- Edmonds-Karp(ํด๋ํฌ์ปค์จ ์๊ณ ๋ฆฌ์ฆ์ ๋งค๋ฒ ์ต๋จ๊ฒฝ๋ก๋ก ์ ์ฉ) ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ์ง๋ง, ๊ฒฝ๋ก ํ๋๋ฅผ ์ฐพ๋๊ฒ ์๋๋ผ BFS๋ก ๊ฐ์ฅ ์งง์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค. (์์ง>0)
- ๊ฐ ๊ฒฝ๋ก๋ง๋ค c(e)์ ์ต์๊ฐ์ m์ด๋ผ ํ๊ณ , ๊ฐ ์์ง๋ง๋ค c(e)-=m์ผ๋ก ๊ฐฑ์ ํ๋ค. ๋ํ, ๋ฐ๋๋ฐฉํฅ์ ์์ง๋ c(e’)+=m์ผ๋ก ๊ฐฑ์
- ๋๋ ๋๊น์ง ๋ฐ๋ณต
728x90
'๐ ์ ๊ณต ๊ณต๋ถ > ๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 11. ๋์ ๊ณํ๋ฒ (0) | 2023.06.16 |
---|---|
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 10. ๊ณ์ฐ ๊ธฐํ (1) | 2023.06.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 8. ์๋ก์์ธ ์งํฉ์ ํํ (Disjoint Sets) (0) | 2023.06.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 7. ์ด๋ถ ํ์ (0) | 2023.04.19 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 6. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (0) | 2023.04.18 |