Content deleted Content added
→Weighted matching: point to maximum weight matching |
Undid revision 1297413102 by United Nations Peace Ambassadors Foundation -UNPAF (talk) that link goes to an Australian magazine |
||
(13 intermediate revisions by 7 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
| author1 = Micali, Silvio
| author2 = Vazirani, Vijay
Line 27 ⟶ 30:
| publisher = IEEE Computer Society Press, New York
| pages = 17–27
}}</ref>
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 38 ⟶ 41:
| pages = 125–130
| doi = 10.6028/jres.069B.013
| doi-access = free
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 67 ⟶ 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 80 ⟶ 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 99 ⟶ 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 111 ⟶ 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
B01 '''function''' ''find_augmenting_path''(
B02 ''F'' ← empty forest
B03 unmark all vertices and edges in ''G'', mark all edges of ''M''
Line 124 ⟶ 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'''
Line 131 ⟶ 136:
B12 add edges { ''v'', ''w'' } and { ''w'', ''x'' } to the tree of ''v''
B13 '''else'''
B14 '''if''' ''distance(
// Do nothing.
B15 '''else'''
B16 '''if''' ''root(
// Report an augmenting path in F <math>\cup</math> { ''e'' }.
B17 ''P'' ← path (
B18 '''return''' ''P''
B19 '''else'''
Line 142 ⟶ 147:
B20 ''B'' ← blossom formed by ''e'' and edges on the path ''v'' → ''w'' in ''T''
B21 ''G’, M’'' ← contract ''G'' and ''M'' by ''B''
B22 ''P’'' ← ''find_augmenting_path''(
B23 ''P'' ← lift ''P’'' to ''G''
B24 '''return''' ''P''
Line 164 ⟶ 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 179 ⟶ 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
===Bipartite matching===
When
===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 210 ⟶ 215:
<references/>
[[Category:Graph algorithms]]
[[Category:Matching (graph theory)]]
|