Content deleted Content added
→Blossoms and contractions: illustration |
Added |
||
(95 intermediate revisions by 58 users not shown) | |||
Line 1:
{{short description|Algorithm for finding max graph matchings}}
<ref name = "algorithm">▼
In [[graph theory]], the '''blossom algorithm''' is an [[algorithm]] for constructing [[maximum matching]]s on [[Graph (discrete mathematics)|graph]]s. The algorithm was developed by [[Jack Edmonds]] in 1961,<ref name = "glimpse">{{Citation
| last = Edmonds
| first = Jack
| contribution = A glimpse of heaven
| title = History of Mathematical Programming --- A Collection of Personal Reminiscences
| editor = J.K. Lenstra |editor2=A.H.G. Rinnooy Kan |editor3=A. Schrijver
| publisher = CWI, Amsterdam and North-Holland, Amsterdam
▲}}</ref> and published in 1965.<ref name = "algorithm">
{{cite journal
| doi = 10.4153/CJM-1965-045-4
| author = Edmonds, Jack
| title = Paths, trees, and flowers
| journal =
| volume = 17
| year = 1965
| pages =
| doi-access = free
The algorithm runs in time {{math|[[Big O notation|''O'']]({{abs|''E''}}{{abs|''V''}}{{sup|2}})}}, where {{math|{{abs|''E''}}}} is the number of [[edge (graph)|edges]] of the graph and {{math|{{abs|''V''}}}} is its number of [[vertex (graph)|vertices]]. A better running time of <math>O( |E| \sqrt{ |V| } )</math> for the same task can be achieved with the much more complex algorithm of Micali and Vazirani.<ref name = "micali">{{cite conference
| author1 = Micali, Silvio▼
| author2 = Vazirani, Vijay▼
| title = An O(V<sup>1/2</sup>E) algorithm for finding maximum matching in general graphs▼
| year = 1980
| publisher = IEEE Computer Society Press, New York▼
| pages = 17–27
}}</ref>
▲is an [[algorithm]] in [[graph theory]] for constructing [[maximum matching]]s on graphs. The algorithm was discovered by [[Jack Edmonds]] in 1965. Given a general [[graph (mathematics)|graph]] ''G'' = (''V'', ''E''), the algorithm finds a matching ''M'' such that each vertex in ''V'' is incident with at most one edge in ''M'' and |''M''| is maximized. The matching is constructed by iteratively improving an initial empty matching along augmenting paths in the graph. To search for augmenting paths, some odd-length cycles in the graph (blossoms) are contracted to single vertices and the search continues recursively in the contracted graphs.
A major reason that the blossom algorithm is important is that it gave the first proof that a maximum-size matching could be found using a polynomial amount of computation time. Another reason is that it led to a [[linear programming]] polyhedral description of the matching [[polytope]], yielding an algorithm for min-''weight'' matching.<ref name = "weighted">
{{cite journal
| author = Edmonds, Jack
| title = Maximum matching and a polyhedron with 0,1-vertices
| journal = Journal of Research of the National Bureau of Standards Section B
| volume = 69
| year = 1965
| pages = 125–130
| doi = 10.6028/jres.069B.013
| doi-access = free
}}</ref> ▼
As elaborated by [[Alexander Schrijver]], further significance of the result comes from the fact that this was the first polytope whose proof of integrality "does not simply follow just from [[total unimodularity]], and its description was a breakthrough in [[polyhedral combinatorics]]."<ref>{{Cite book|url=https://www.springer.com/us/book/9783540443896|title=Combinatorial Optimization: Polyhedra and Efficiency|last=Schrijver|first=Alexander|date=2003|publisher=Springer-Verlag|isbn=9783540443896|series=Algorithms and Combinatorics|___location=Berlin Heidelberg|language=en}}</ref>
==Augmenting paths==
Given {{math|1=''G'' = (''V'', ''E'')}} and a matching
:<math>M_1 = M \oplus P = ( M \setminus P ) \cup ( P \setminus M )</math>. [[File:Edmonds augmenting path.svg|500px|alt=Augmentation along a path]]
| author1 = Lovász, László
| authorlink1 = László Lovász
| author2 = Plummer, Michael | author2-link = Michael D. Plummer
| title = Matching Theory
| publisher = Akadémiai Kiadó
| year = 1986
| isbn = 963-05-4168-8
}}</ref><ref name
| author = Karp, Richard
| contribution = Edmonds's Non-Bipartite Matching Algorithm
| title = Course Notes. U. C. Berkeley
| url = http://www.cs.berkeley.edu/~karp/greatalgo/lecture05.pdf
| url-status = dead
}}</ref> that a matching ''M'' is maximum if and only if there is no ''M''-augmenting path in ''G''. Hence, either a maching is maximum, or it can be augmented. Thus, starting from an initial matching, we can compute a maximum matching by augmenting the current matching with augmenting paths as long as we can find them, and return whenever no augmenting paths are left. We can formalize the algorithm as follows:▼
| archiveurl = https://web.archive.org/web/20081230183603/http://www.cs.berkeley.edu/~karp/greatalgo/lecture05.pdf
| archivedate = 2008-12-30
▲ }}</ref>
INPUT: Graph ''G'', initial matching ''M'' on ''G''
OUTPUT: maximum matching ''M*'' on ''G''
A1 '''function''' ''find_maximum_matching''(
A2 ''P'' ← ''find_augmenting_path''(
A3 '''if''' ''P'' is non-empty '''then'''
A4
A5 '''else'''
A6
A7 '''end if'''
A8 '''end function'''
Line 48 ⟶ 85:
==Blossoms and contractions==
Given {{math|1=''G'' = (''V'', ''E'')}} and a matching
'''''Finding Blossoms:'''''
We define the '''contracted graph''' ''G’'' as the graph obtained from ''G'' by [[edge contraction|contracting]] every edge of ''B'', and define the '''contracted matching''' ''M’'' as the matching of ''G’'' corresponding to ''M''.▼
* Traverse the graph starting from an exposed vertex.
* Starting from that vertex, label it as an outer vertex {{mvar|'''o'''}}.
* Alternate the labeling between vertices being inner {{mvar|'''i'''}} and outer {{mvar|'''o'''}} such that no two adjacent vertices have the same label.
* If we end up with two adjacent vertices labeled as outer {{mvar|'''o'''}} then we have an odd-length cycle and hence a blossom.
▲
[[File:Edmonds blossom.svg|500px|alt=Example of a blossom]]
* if ''P’'' traverses through a segment ''u → v<sub>B</sub> → w'' in ''G’'', then this segment is replaced with the segment ''u → ( u’ → ... → w’ ) → w'' in ''G'', where blossom vertices ''u’'' and ''w’'' and the side of ''B'', ''( u’ → ... → w’ )'', going from ''u’'' to ''w’'' are chosen to ensure that the new path is still alternating (''u’'' is exposed with respect to <math>M \cap B</math>, <math>\{ w', w \} \in E \setminus M</math>).▼
* if ''P’'' has an endpoint ''v<sub>B</sub>'', then the path segment ''u → v<sub>B</sub>'' in ''G’'' is replaced with the segment ''u → ( u’ → ... → v’ )'' in ''G'', where blossom vertices ''u’'' and ''v’'' and the side of ''B'', ''( u’ → ... → v’ )'', going from ''u’'' to ''v’'' are chosen to ensure that the path is alternating (''v’'' is exposed, <math>\{ u', u \} \in E \setminus M</math>).▼
| author = Tarjan, Robert
| contribution = Sketchy Notes on Edmonds' Incredible Shrinking Blossom Algorithm for General Matching
| title = Course Notes, Department of Computer Science, Princeton University
| url = http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handouts/tarjan-blossom.pdf
}}</ref> In more detail:
▲* if {{mvar|P'
[[File:Edmonds lifting path.svg|500px|alt=Path lifting when {{mvar|P'}} traverses through {{mvar|v{{sub|B}}}}, two cases depending on the direction we need to choose to reach {{mvar|v{{sub|B}}}}]]
▲* if {{mvar|P'
[[File:Edmonds lifting end point.svg|500px|alt=Path lifting when {{mvar|P'}} ends at {{mvar|v{{sub|B}}}}, two cases depending on the direction we need to choose to reach {{mvar|v{{sub|B}}}}]]
Thus blossoms can be contracted and search performed in the contracted graphs. This reduction is at the heart of Edmonds'
==Finding an augmenting path==
The search for an augmenting path uses an auxiliary data structure consisting of a [[forest (graph theory)|forest]]
In each iteration the algorithm either (1) finds an augmenting path The construction procedure considers vertices
INPUT: Graph ''G'', matching ''M'' on ''G''
OUTPUT: augmenting path ''P'' in ''G'' or empty path if none found
B01 '''function''' ''find_augmenting_path''(
B02 ''F'' ← empty forest
B03 unmark all vertices and edges in ''G'', mark all edges of ''M''
Line 88 ⟶ 129:
B06 create a singleton tree { ''v'' } and add the tree to ''F''
B07 '''end for'''
B08 '''while''' there is an unmarked vertex ''v'' in ''F'' with ''distance(
B09 '''while''' there exists an unmarked edge ''e'' = { ''v'', ''w'' } '''do'''
B10 '''if''' ''w'' is not in ''F'' '''then'''
//
B11 ''x'' ← vertex matched to ''w'' in ''M''
B12 add edges { ''v'', ''w'' } and { ''w'', ''x'' } to the tree of ''v''
B13 '''else'''
B14 '''if''' ''distance(
// Report an augmenting path in F <math>\cup</math> { ''e'' }.
// Contract a blossom in ''G'' and look for the path in the contracted graph.
B30 mark vertex ''v''
B31 '''return''' empty path▼
B33 '''end function'''
===Examples===
The following four figures illustrate the execution of the algorithm.
▲The following four figures illustrate the execution of the algorithm. We use dashed lines to indicate edges that are currently not present in the forest. First, the algorithm processes an out-of-forest edge that causes the expansion of the current forest (lines B10 – B12).
[[File:forest expansion.png|400px|alt=Forest expansion on line B10]]
Next, it detects a blossom and contracts the graph (lines B20 –
[[File:blossom contraction.png|400px|alt=Blossom contraction on line B21]]
Finally, it locates an augmenting path {{mvar|P′}} in the contracted graph (line
[[File:path detection.png|400px|alt=Detection of augmenting path {{mvar|P′}} in {{mvar|G′}} on line B17]]
[[File:path lifting.png|400px|alt=Lifting of {{mvar|P′}} to corresponding augmenting path in {{mvar|G}} on line B25]]
===Analysis===
The forest
| author1 = Kenyon, Claire
| author2 = Lovász, László
| authorlink2 = László Lovász
| contribution = Algorithmic Discrete Mathematics
| title = Technical Report CS-TR-251-90, Department of Computer Science, Princeton University
}}</ref>
* a tree
**
** every vertex at an odd distance from the root has exactly two incident edges in
** all paths from
* a forest
** its connected components are alternating trees, and
** every exposed vertex in
Each iteration of the loop starting at line B09 either adds to a tree
▲ | author1 = Micali, Silvio
▲ | author2 = Vazirani, Vijay
▲ | title = An O(V<sup>1/2</sup>E) algorithm for finding maximum matching in general graphs
▲ | journal = 21st Annual Symposium on Foundations of Computer Science,
▲ | year = 1980
▲ | publisher = IEEE Computer Society Press, New York
▲ | pages = 17–27
===Bipartite matching===
===Weighted matching===
The matching problem can be generalized by assigning weights to edges in
| author = Kolmogorov, Vladimir
| title = Blossom V: A new implementation of a minimum cost perfect matching algorithm
| url = http://
| journal = Mathematical Programming Computation
| volume = 1
Line 175 ⟶ 209:
| pages = 43–67
| year = 2009
| doi = 10.1007/s12532-009-0002-8
▲}}</ref>
}}</ref>
==References==
<references/>
[[Category:Graph algorithms]]
[[Category:Matching (graph theory)]]
|