Classical bipartite cardinality matching: Difference between revisions
Line 29: | Line 29: | ||
'''Implementation of step 1:''' | '''Implementation of step 1:''' | ||
In a loop over all exposed | In a loop over all exposed nodes <math>v</math>, a [[graph traversal]] algorithm is started at <math>v</math>. An algorithm must be chosen that generates an [[Basic graph definitions#Forests, trees, branchings, arborescences|arborescence]] rooted at the start node <math>v</math>, for example, a [[Depth-first search|DFS]] or a [[Breadth-first search|BFS]]. This terminates once an augmenting path has been found. To find an augmenting path, the graph search algorithm is modified as follows: | ||
# Whenever the current node <math>v</math> has been reached via an edge in <math>M</math>, only incident edges in <math>E\setminus M</math> are considered for seeing new nodes. | # Whenever the current node <math>v</math> has been reached via an edge in <math>M</math>, only incident edges in <math>E\setminus M</math> are considered for seeing new nodes. | ||
# Mirror-symmetrically, whenever the current node <math>v</math> has been reached via an edge in <math>E\setminus M</math>, only the (unique) incident edge in <math>M</math>, if existing, is considered for seeing a new node. | # Mirror-symmetrically, whenever the current node <math>v</math> has been reached via an edge in <math>E\setminus M</math>, only the (unique) incident edge in <math>M</math>, if existing, is considered for seeing a new node. |
Revision as of 09:26, 21 November 2014
Abstract view
Algorithmic problem: Cardinality-maximal matching in bipartite graphs.
Type of algorithm: loop.
Invariant: [math]\displaystyle{ M }[/math] is a matching in [math]\displaystyle{ G }[/math].
Variant: [math]\displaystyle{ |M| }[/math] is increased by one.
Break condition: There is no more augmenting path.
Induction basis
Abstract view: Initialize [math]\displaystyle{ M }[/math] to be a feasible matching, for example, the empty matching.
Induction step:
Abstract view:
- Search for an augmenting path.
- If there is none, the loop terminates.
- Let [math]\displaystyle{ p }[/math] denote the augmenting path found in step 1.
- Augment [math]\displaystyle{ M }[/math] along [math]\displaystyle{ p }[/math].
Implementation of step 1: In a loop over all exposed nodes [math]\displaystyle{ v }[/math], a graph traversal algorithm is started at [math]\displaystyle{ v }[/math]. An algorithm must be chosen that generates an arborescence rooted at the start node [math]\displaystyle{ v }[/math], for example, a DFS or a BFS. This terminates once an augmenting path has been found. To find an augmenting path, the graph search algorithm is modified as follows:
- Whenever the current node [math]\displaystyle{ v }[/math] has been reached via an edge in [math]\displaystyle{ M }[/math], only incident edges in [math]\displaystyle{ E\setminus M }[/math] are considered for seeing new nodes.
- Mirror-symmetrically, whenever the current node [math]\displaystyle{ v }[/math] has been reached via an edge in [math]\displaystyle{ E\setminus M }[/math], only the (unique) incident edge in [math]\displaystyle{ M }[/math], if existing, is considered for seeing a new node.
Proof: Basically, we have to show that there is no more augmenting path if this repeated graph search does not find one. So suppose for a contradiction that a search from an exposed node [math]\displaystyle{ u }[/math] fails although there is an augmenting path [math]\displaystyle{ p }[/math] from [math]\displaystyle{ u }[/math] to some other exposed node [math]\displaystyle{ v }[/math]. Then [math]\displaystyle{ v }[/math] is not seen by this graph search. Let [math]\displaystyle{ x }[/math] be the last node on [math]\displaystyle{ p }[/math] seen by this graph search and let [math]\displaystyle{ \{x,y\} }[/math] be the next edge on [math]\displaystyle{ p }[/math] (as seen in the direction from [math]\displaystyle{ u }[/math] to [math]\displaystyle{ v }[/math]). Since [math]\displaystyle{ \{x,y\} }[/math] was not considered by the graph search, it is [math]\displaystyle{ \{x,y\}\in E\setminus M }[/math]. The edge over which [math]\displaystyle{ x }[/math] was seen is not in [math]\displaystyle{ M }[/math], either. Let [math]\displaystyle{ p' }[/math] be the path from [math]\displaystyle{ u }[/math] to [math]\displaystyle{ x }[/math] in the arborescence. The concatenation [math]\displaystyle{ p+p' }[/math] is a (usually non-simple) cycle of odd length. In particular, [math]\displaystyle{ G }[/math] is not bipartite.
Remark: This modified graph traversal in an undirected graph could be implemented as a regular graph traversal in a directed graph:
- Duplicate each matched node [math]\displaystyle{ v }[/math] giving [math]\displaystyle{ v_1 }[/math] and [math]\displaystyle{ v_2 }[/math].
- Replace each edge [math]\displaystyle{ \{v,w\} }[/math] by two arcs, [math]\displaystyle{ (v,w) }[/math] and [math]\displaystyle{ (w,v) }[/math].
- For each matched node [math]\displaystyle{ v }[/math]:
- Let all incoming arcs of [math]\displaystyle{ v }[/math] in [math]\displaystyle{ M }[/math] point to [math]\displaystyle{ v_1 }[/math] and all outgoing arcs in [math]\displaystyle{ E\setminus M }[/math] leave [math]\displaystyle{ v_1 }[/math].
- Mirror-symmetrically, let all incoming arcs of [math]\displaystyle{ v }[/math] in [math]\displaystyle{ E\setminus M }[/math] point to [math]\displaystyle{ v_2 }[/math] and all outgoing arcs of [math]\displaystyle{ v }[/math] in [math]\displaystyle{ M }[/math] leave [math]\displaystyle{ v_2 }[/math].