Preflow-push with excess scaling: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 37: Line 37:
== Correctness ==
== 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.
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 ==
== Complexity ==

Revision as of 15:30, 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