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

๐Ÿ“š ์ „๊ณต ๊ณต๋ถ€/๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•

[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 9. Flow Networks

 

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๊ฐ’ ์ด๋Ÿ‰

์ตœ๋Œ€ ํ”Œ๋กœ์šฐ ๊ตฌํ•˜๊ธฐ

 

  1. Ford-Fulkerson algorithm
    1. s→t ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค. BFS ์ง„ํ–‰
    2. ๊ฐ ๊ฒฝ๋กœ์˜ c(e) ์ตœ์†Ÿ๊ฐ’์„ m์ด๋ผ๊ณ  ํ•˜์ž
    3. ๊ฐ ๊ฒฝ๋กœ์˜ ์—์ง€๋งˆ๋‹ค, c(e) -= m์œผ๋กœ ๊ฐฑ์‹ . ๋ฐ˜๋Œ€๋ฐฉํ–ฅ ์—์ง€๋Š” c(e’) += m์œผ๋กœ ๊ฐฑ์‹ 
    4. ๋๋‚ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต → ์ˆœ๋ฐฉํ–ฅ ์šฉ๋Ÿ‰์ด ๊ฝ‰ ์ฐผ๊ฑฐ๋‚˜, ์—ญ๋ฐฉํ–ฅ์˜ ์œ ๋Ÿ‰์ด 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์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์ดํ›„ ๊ทธ๋ž˜ํ”„์˜ ์ตœ๋Œ€ ํ”Œ๋กœ์šฐ๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.
  2. Dinitz algorithm
    1. Edmonds-Karp(ํด๋“œํฌ์ปค์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งค๋ฒˆ ์ตœ๋‹จ๊ฒฝ๋กœ๋กœ ์ ์šฉ) ๋ฐฉ๋ฒ•๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฒฝ๋กœ ํ•˜๋‚˜๋ฅผ ์ฐพ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ BFS๋กœ ๊ฐ€์žฅ ์งง์€ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค. (์—์ง€>0)
    2. ๊ฐ ๊ฒฝ๋กœ๋งˆ๋‹ค c(e)์˜ ์ตœ์†Ÿ๊ฐ’์„ m์ด๋ผ ํ•˜๊ณ , ๊ฐ ์—์ง€๋งˆ๋‹ค c(e)-=m์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋˜ํ•œ, ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์˜ ์—์ง€๋Š” c(e’)+=m์œผ๋กœ ๊ฐฑ์‹ 
    3. ๋๋‚ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต