Maximum matching by Edmonds: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 24: Line 24:
# Apply the modified repeated graph search from the [[Classical bipartite cardinality matching#Induction step|classical algorithm]] for the restriction to [[Basic graph definitions#Bipartite and k-partite graphs|bipartite graphs]].
# Apply the modified repeated graph search from the [[Classical bipartite cardinality matching#Induction step|classical algorithm]] for the restriction to [[Basic graph definitions#Bipartite and k-partite graphs|bipartite graphs]].
# However, in addition:
# However, in addition:
# Choose a [[Breadth-first search|BFS]] or another grah traversal strategy that will never return to the start node (this requirement excludes [[Depth-first search|DFS]])
## The search maintains a boolean flag even/odd, which indicates the parity of the distance of the current node from the start node of the current search.
## The search maintains a boolean flag even/odd, which indicates the parity of the distance of the current node from the start node of the current search.
## Also, each node has a boolean label even/odd. Whenever this node is seen (not only the first time when it is seen), its label is set according to the flag.
## Also, each node has a boolean label even/odd. Whenever this node is seen (not only the first time when it is seen), its label is set according to the flag.
Line 38: Line 39:


'''Implementation of step 3.2:'''
'''Implementation of step 3.2:'''
 
Let <math>w</math> be the node on which the two different parities occur, and let <math>v</math> be the node from which <math>w</math> is seen at that moment. In the arborescence constructed so far, let <math>u</math> denote the node such that the paths from the start node to <math>v</math> and <math>w</math> coincide up to <math>u</math> and part at <math>u</math>.  Note that the incoming edge of <math>u</math> in the arborescence is matched because, otherwise, the arborescence could mot branch at <math>u</math>. Therefore, the concatenation of the two branches from <math>u</math> to <math>v</math> an <math>w</math>, respectively, with <math>\{v,w\}</math> is a blossom, and the search entered this blossom via its stem.


'''Proof:'''
'''Proof:'''
Basically, we have to show that
Basically, we have to show: If <math>M</math> is not maximum, the graph search will either find an augmenting path or run into a blossom via its stem. Suppose the search does not find an augmenting path. Due to the proof in the [[Classical bipartite cardinality matching#Induction step|induction step]] of the [[Classical bipartite cardinality matching|classical bipartite cardinality algorithm]]), the graph search runs into an odd cycle. Since we chose a graph search strategy that never returns to the start node, the remark on that proof implies that this odd cycle is a blossom, and that the search entered  this blossom via its stem.

Revision as of 09:31, 22 November 2014

Abstract view

Algo

Type of algorithm: recursion

Invariant: The current selection [math]\displaystyle{ M }[/math] of edges is a matching.

Variant: Either the cardinality of [math]\displaystyle{ M }[/math] increases, or the number of nodes of [math]\displaystyle{ G }[/math] decreases.

Break condition: There is no more augmenting path.

Induction basis

Abstract view: Start with some matching, for example, the empty matching.

Induction step

Abstract view:

  1. Apply the modified repeated graph search from the classical algorithm for the restriction to bipartite graphs.
  2. However, in addition:
  3. Choose a BFS or another grah traversal strategy that will never return to the start node (this requirement excludes DFS)
    1. The search maintains a boolean flag even/odd, which indicates the parity of the distance of the current node from the start node of the current search.
    2. Also, each node has a boolean label even/odd. Whenever this node is seen (not only the first time when it is seen), its label is set according to the flag.
  4. If a labeled node is seen again, but with another distance parity than before:
    1. The repeated graph search is terminated.
    2. A blossom [math]\displaystyle{ B }[/math] is identified.
    3. [math]\displaystyle{ C }[/math] is shrunken, giving [math]\displaystyle{ G'=(V',E') }[/math] and the restriction [math]\displaystyle{ M' }[/math] of [math]\displaystyle{ M }[/math] to [math]\displaystyle{ G' }[/math].
    4. The procedure is called recursively with [math]\displaystyle{ G' }[/math] and [math]\displaystyle{ M' }[/math].
    5. Exactly one node of [math]\displaystyle{ C }[/math] is matched by [math]\displaystyle{ M' }[/math], so extend [math]\displaystyle{ M' }[/math] in the obvious, unique way by [math]\displaystyle{ \lfloor|C|/2\rfloor }[/math] edges of [math]\displaystyle{ C }[/math].
    6. Return this extension of [math]\displaystyle{ M' }[/math].

Remark: In typical formulations of this algorithm, the graph search is not left open but the search strategy applied in Hopcroft-Karp is hard-coded.

Implementation of step 3.2: Let [math]\displaystyle{ w }[/math] be the node on which the two different parities occur, and let [math]\displaystyle{ v }[/math] be the node from which [math]\displaystyle{ w }[/math] is seen at that moment. In the arborescence constructed so far, let [math]\displaystyle{ u }[/math] denote the node such that the paths from the start node to [math]\displaystyle{ v }[/math] and [math]\displaystyle{ w }[/math] coincide up to [math]\displaystyle{ u }[/math] and part at [math]\displaystyle{ u }[/math]. Note that the incoming edge of [math]\displaystyle{ u }[/math] in the arborescence is matched because, otherwise, the arborescence could mot branch at [math]\displaystyle{ u }[/math]. Therefore, the concatenation of the two branches from [math]\displaystyle{ u }[/math] to [math]\displaystyle{ v }[/math] an [math]\displaystyle{ w }[/math], respectively, with [math]\displaystyle{ \{v,w\} }[/math] is a blossom, and the search entered this blossom via its stem.

Proof: Basically, we have to show: If [math]\displaystyle{ M }[/math] is not maximum, the graph search will either find an augmenting path or run into a blossom via its stem. Suppose the search does not find an augmenting path. Due to the proof in the induction step of the classical bipartite cardinality algorithm), the graph search runs into an odd cycle. Since we chose a graph search strategy that never returns to the start node, the remark on that proof implies that this odd cycle is a blossom, and that the search entered this blossom via its stem.