Content deleted Content added
Undid revision 1297413102 by United Nations Peace Ambassadors Foundation -UNPAF (talk) that link goes to an Australian magazine |
|||
(17 intermediate revisions by 9 users not shown) | |||
Line 1:
{{short description|Algorithm for finding max graph matchings}}
The '''blossom algorithm''' is an [[algorithm]] in [[graph theory]] for constructing [[maximum matching]]s on graphs. The algorithm was developed by [[Jack Edmonds]] in 1961,<ref name = "glimpse">{{Citation▼
▲
| last = Edmonds
| first = Jack
Line 17 ⟶ 19:
| year = 1965
| pages = 449–467
| doi-access = free
}}</ref> Given a general [[Graph (discrete mathematics)|graph]] {{math|1=''G'' = (''V'', ''E'')}}, the algorithm finds a matching
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▼
| conference = 21st Annual Symposium on Foundations of Computer Science▼
| year = 1980▼
| publisher = IEEE Computer Society Press, New York▼
| pages = 17–27▼
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">
Line 28 ⟶ 41:
| pages = 125–130
| doi = 10.6028/jres.069B.013
| doi-access = free
▲ }}</ref>
}}</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]]
By [[Berge's lemma]], matching
| author1 = Lovász, László
| authorlink1 = László Lovász
Line 57 ⟶ 72:
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 70 ⟶ 85:
==Blossoms and contractions==
Given {{math|1=''G'' = (''V'', ''E'')}} and a matching
'''''Finding Blossoms:'''''
* Traverse the graph starting from an exposed vertex.
* Starting from that vertex, label it as an outer vertex
* Alternate the labeling between vertices being inner
* If we end up with two adjacent vertices labeled as outer
Define the '''contracted graph''' {{mvar|G'
[[File:Edmonds blossom.svg|500px|alt=Example of a blossom]]
{{mvar|G'
| author = Tarjan, Robert
| contribution = Sketchy Notes on Edmonds' Incredible Shrinking Blossom Algorithm for General Matching
Line 89 ⟶ 104:
}}</ref> In more detail:
* if {{mvar|P'
[[File:Edmonds lifting path.svg|500px|alt=Path lifting when {{mvar|P'
* if {{mvar|P'
[[File:Edmonds lifting end point.svg|500px|alt=Path lifting when {{mvar|P'
Thus blossoms can be contracted and search performed in the contracted graphs. This reduction is at the heart of Edmonds' algorithm.
Line 101 ⟶ 116:
==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, (2) finds a blossom and recurses onto the corresponding contracted graph, or (3) concludes there are no augmenting paths. The auxiliary structure is built by an incremental procedure discussed next.<ref name = "tarjan notes"/>
The construction procedure considers vertices
INPUT: Graph ''G'', matching ''M'' on ''G''
OUTPUT: augmenting path ''P'' in ''G'' or empty path if none found
// ''w'' is matched, so add ''e'' and ''w'''s matched edge to ''F''
// Do nothing.
// Report an augmenting path in F <math>\cup</math> { ''e'' }.
// Contract a blossom in ''G'' and look for the path in the contracted graph.
===Examples===
Line 154 ⟶ 169:
[[File:blossom contraction.png|400px|alt=Blossom contraction on line B21]]
Finally, it locates an augmenting path {{mvar|P′}} in the contracted graph (line B22) and lifts it to the original graph (line B23). Note that the ability of the algorithm to contract blossoms is crucial here; the algorithm cannot find
[[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ó
Line 169 ⟶ 184:
| 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
▲ | conference = 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
Line 208 ⟶ 215:
<references/>
[[Category:Graph algorithms]]
[[Category:Matching (graph theory)]]
|