Preflow-push with excess scaling: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 27: Line 27:
'''Abstract view:'''
'''Abstract view:'''
Run the [[Preflow-push|preflow-push algorithm]] with two modifications:
Run the [[Preflow-push|preflow-push algorithm]] with two modifications:
# Ignore all active nodes whose excess is smaller than <math>\Delta/2</math>.
# Ignore all active nodes whose excess is smaller than <math>\Delta/2</math>. In particular, an iteration of the main loop is finished once no node has an excess of <math>\Delta/2</math> or more.
# Among the nodes with excess at least <math>\Delta/2</math>, choose one with minimum <math>d</math>-label.
# Among the nodes with excess at least <math>\Delta/2</math>, choose one with minimum <math>d</math>-label.
# Do not push more than <math>\Delta-e_f(w)</math> units of flow over an arc <math>(v,w)</math>.
# Do not push more than <math>\Delta-e_f(w)</math> units of flow over an arc <math>(v,w)</math>.
# At the end, set <math>\Delta:=\Delta/2</math>.
'''Proof:'''
obvious.
== Correctness ==
Whenever an iteration is finished, no excess of <math>\Delta/2</math> or more is left at any node. When the break condition applies, no excess is left at all. termination of the main loop follows from the following complexity considerations.
== Complexity ==

Revision as of 14:01, 10 November 2014

Abstract view

Algorithmic problem: max-flow problem (standard version)

Type of algorithm: a variation of the generic preflow-push algorithm.

Invariant: Before and after each iteration:

  1. All points of the invariant of the preflow-push algorithm.
  2. There is a nonnegative, integral value [math]\displaystyle{ \Delta }[/math], and the excess [math]\displaystyle{ e_f(v) }[/math] of no active node [math]\displaystyle{ v }[/math] exceeds [math]\displaystyle{ \Delta }[/math].

Variant: [math]\displaystyle{ \Delta }[/math] is divided by two (integral division).

Break condition: [math]\displaystyle{ \Delta=0 }[/math].

Induction basis

  1. All steps in the induction basis of the preflow push algorithm.
  2. Set [math]\displaystyle{ \Delta:=2^L }[/math], where [math]\displaystyle{ L:=\lceil\log_2U\rceil }[/math] and [math]\displaystyle{ U:=\max\{u(a)|a\in A\} }[/math].

Induction step

Abstract view: Run the preflow-push algorithm with two modifications:

  1. Ignore all active nodes whose excess is smaller than [math]\displaystyle{ \Delta/2 }[/math]. In particular, an iteration of the main loop is finished once no node has an excess of [math]\displaystyle{ \Delta/2 }[/math] or more.
  2. Among the nodes with excess at least [math]\displaystyle{ \Delta/2 }[/math], choose one with minimum [math]\displaystyle{ d }[/math]-label.
  3. Do not push more than [math]\displaystyle{ \Delta-e_f(w) }[/math] units of flow over an arc [math]\displaystyle{ (v,w) }[/math].
  4. At the end, set [math]\displaystyle{ \Delta:=\Delta/2 }[/math].

Proof: obvious.

Correctness

Whenever an iteration is finished, no excess of [math]\displaystyle{ \Delta/2 }[/math] or more is left at any node. When the break condition applies, no excess is left at all. termination of the main loop follows from the following complexity considerations.

Complexity