Ford-Fulkerson: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 51: Line 51:
  5    '''for''' each each edge (''u,v'') in ''p''  
  5    '''for''' each each edge (''u,v'') in ''p''  
  6        '''if''' (''u,v'') ∈ ''E''
  6        '''if''' (''u,v'') ∈ ''E''
  7              (''u,v'').''f'' = (''v,u'').''f'' + ''c<sub>f</sub>''(''p'')   
  7              (''u,v'').''f'' = (''u,v'').''f'' + ''c<sub>f</sub>''(''p'')   
  8        '''else''' (''v,u'').''f'' = (''v,u'').''f'' - ''c<sub>f</sub>''(''p'')   
  8        '''else''' (''v,u'').''f'' = (''v,u'').''f'' - ''c<sub>f</sub>''(''p'')   


</code>
</code>

Revision as of 15:48, 22 January 2015

General information

Algorithmic problem: Max-flow problems (standard version)

Type of algorithm: loop

Abstract view

Invariant: After [math]\displaystyle{ i \ge 0 }[/math] iterations:

  1. The flow [math]\displaystyle{ f }[/math] is a feasible flow.
  2. If all upper bounds are integral, [math]\displaystyle{ f }[/math] is integral as well.

Variant: The flow value of [math]\displaystyle{ f }[/math] increases.

Break condition: There is no flow-augmenting path.

Induction basis

Abstract view: We start with some feasible flow, for example, the zero flow.

Implementation: Obvious.

Proof: Obvious.

Induction step

Abstract view: Find a flow-augmenting path and increase [math]\displaystyle{ f }[/math] along this path up to saturation. If no path is found, the break condition applies, and the loop is terminated.

Proof: If the graph traversal does not hit [math]\displaystyle{ t }[/math], the break condition is fulfilled, and nothing is to show. So consider the case that the graph traversal does hit [math]\displaystyle{ t }[/math]. Then an [math]\displaystyle{ (s,t) }[/math]-path is found. Augmenting along this path up to saturation preserves feasibility of the flow.

Correctness

Due to the invariant, the flow is feasible before and after each iteration. Termination results from the complexity considerations below. Due to the max-flow min-cut theorem, the break condition implies that the final flow is maximum.

Complexity

Statement: If all capacity values are integral, the asymptotic worst-case complexity is [math]\displaystyle{ \mathcal{O} (m\cdot F) }[/math], where [math]\displaystyle{ m = |A| }[/math] and [math]\displaystyle{ F }[/math] is the maximum total flow value.

Proof: A graph search from [math]\displaystyle{ s }[/math] requires [math]\displaystyle{ \Omicron (m) }[/math] . Obviously, determining [math]\displaystyle{ x }[/math] and [math]\displaystyle{ y }[/math] and changing the flow values along [math]\displaystyle{ p }[/math] requires [math]\displaystyle{ \mathcal{O}(m) }[/math] as well. It is also evident that, before and after each iteration, the flow values on all arcs are integral. In particular, the total flow value is integral. The variant implies that, in case of integral capacity values, the total flow value increases by at least one unit in every iteration. Since the total flow value is always in the interval [math]\displaystyle{ [0...F] }[/math], this may happen at most [math]\displaystyle{ F }[/math] times.

Remark: The number of nodes is irrelevant because at most [math]\displaystyle{ m }[/math] nodes are reachable from [math]\displaystyle{ s }[/math] (not including [math]\displaystyle{ s }[/math] itself).

Pseudocode

FORD-FULKERSON(G,s,t)
1 for each edge (u,v)  ∈ G.E
2    (u,v).f = 0
3 while there exists a path p from s to t in the residual Network Gf
4    cf(p) = min{cf(u,v) : (u,v) is in p}  
5    for each each edge (u,v) in p 
6        if (u,v) ∈ E
7              (u,v).f = (u,v).f + cf(p)  
8        else (v,u).f = (v,u).f - cf(p)