An Efficient Implementation of Edmonds` Algorithm for Maximum

An Efficient Implementation of Edmonds' Algorithm for
Maximum Matching on Graphs
HAROLD N. GABOW
Univer~ty of Colorado, Boulder, Colorado
ABSTRACT. A matching on a graph is a set of edges, no two of which share a vertex. A maximum
matching contains the greatest number of edges possible. This paper presents an efficient implementation of Edmonds' algorithm for finding a maximum matching The computation time is proportional to V*, where V is the number of vertices; previous implementatmns of Edmonds' algorithm
have computation time proportional to V4. The implementation is based on a system of labels that
e n c o d e s the structure of alternating paths.
KEYWORDSANDPHRASES; graph algorithm, matching on a graph, maximum matching, augmenting
path, labeling technique
CR CATEGORIES: 5.25, 5.32, 5.41
1.
Introduction
The problem of finding a maximum matching on a graph has applications in operations
research and integer programming. For example, the following is a maximum matching
problem:
I n a factory, a manager must divide his workers into teams of two. Certain teams
are not allowed, because the workers are incompatible. Choose the greatest possible
n u m b e r of teams of compatible workers.
We present an algorithm for finding a maximum matching on a graph. If V is the
number of vertices, the run time is proportional to V3. The space required is 4V words
in addition to the space needed for the graph.
The approach is a careful implementation of ideas presented by Edmonds [4]. His
algorithm has run time proportional to V4 [4; 6, Erratum]. We improve this by eliminating the process of blossom expansion. Instead, we use a system of labels to store
the structure of alternating paths.
This approach is similar to labeling techniques in the matching algorithms of Balinski
[1] and Witzgall and Zahn [13]. The former algorithm has run time proportional to V3,
if a stack is used for vertex selection; the latter algorithm can be implemented in time
proportional to V~, using techniques described here. However, both algorithms may
label a vertex more than once in a search. This increases the r u n time and makes it
difficult to generalize to other problems, such as finding a maximum weighted matching [13]. The present algorithm overcomes these difficulties [8].
Copyright © 1976, Association for Computing Machinery, Inc. General permission to republish,
but not for profit, all or part of this material is granted provided that ACM's copyright notice is
given and that reference is made to the publication, to its date of issue, and t o t h e fact that reprinting
privileges were granted by permission of the Association for Computing Machinery.
This work was partially supported by the National Science Foundation Graduate Fellowship Program and the National Science Foundation under Grant G J-US0 at Stanford University, and by the
National Science Foundation under Grant G J-660 at the University of Colorado.
Author's address: Department of Computer Science,University of Colorado, Boulder, C O 80~02.
Journal of the Assoc, iat/on for Computing Mschmery, Vol. 23, No 2, Aprd 1976, pp 221-234.
222
HAROLD N. GABOW
l0
$
8
FIG. 1
Matched graph G~
After summarizing definitions in Section 2, we state the algorithm in Section 3. A
proof of correctness is given in Section 4. Section 5 discusses time and space bounds,
and applications of the algorithm.
'2.
Preliminaries
This section summarizes some well-known definitions and results.
A graph G consists of a finite set of vertices and a finite set of edges. An edge is an
(unordered) set of two distinct vertices. The edge containing vertices v and w is denoted
vw (or wv). Vertices v and w are ad3acent. An adjacency list for v is a list of the vertices
adjacent to v. A subgraph of G is a graph whose vertices and edges are in G. A graph is
complete if any two vertices are adjacent.
A walk W is a list of vertices (v~, v:, • - • , v~), where n > 1 and v,v~+l is an edge,
for 1 < , < n. A walk is simple if no vertex occurs more than once in the list. A path
is a simple walk. A cycle is a walk (vl, v2, - . - , v~, vl) such that n > 2 and (v~, v2, •. • ,
v, ) is simple.
Let W = (vl, v2, • • , v~) and X = (v,+l, v,+2, . . . , v~) be walks. The reverse walk
of W, denoted rev W , is ( v , , v ~ _ l , • • , vl). The concatenation of W and X, denoted
W , X , is (vl , . • • , v, , v~+l , • • • , vz). For W * X to be a walk, it is necessary that v,v,+~
is an edge. For W . X to be a path, it is furl~her necessary that W and X are disjoint
paths.
A matching on a graph is a set of edges, no two of which share a vertex. A matched
graph (G, M ) is a graph G with a matching M. A vertex v is matched if it is in some
edge of the matching; otherwise v is unmatched. M is a m a x i m u m matching if no matching on G contains more edges than M. Figure I shows a matching on a graph G~ (matched
edges are shown as wavy lines). Vertices 9 and 10 are unmatched. The matching is not
maximum, since a matching with no unmatched vertices exists.
An alternating path in a matched graph is a path (vl, • • • , v~) such that exactly one of
every two edges v,_lv,'and v,v,+l is matched, for 1 < i < n. An augmentsng path is an
alternating path whose ends v~ and v, are distinct unmatched vertices.
If (vz, . . . , v~) is an augmenting path in (G, M ) , a new matching M ' is obtained
b y replacing the matched edges v2,v2,+l, 1 < ~ < n , with the unmatched edges v2,-lv2,,
1 < i < n. We say the matching M is augmented to M', since M ' contains one more
edge t h a n M. I n Figure 1, (10, 1, 2, 3, 4, 8, 7, 6, 5, 9) is an augmenting path. Augmenting gives a maximum matching.
Note that an augmenting path is simple. We cannot augment a matching with a non-
A n Effwient Implementation of Edmonds' Algorithm
223
simple alternating walk. This is illustrated in Figure 1 by the walk (10, 1, 2, 3, 4, 8, 7,
4, 3, 9). "Augmenting" does not give ~t matching, since edges 47 and 48 become
"matched."
Augmenting paths are important for this reason:
LEMMA (Berge). A matched graph (G, M ) has an augmenting path if and only ~f M
is not maximum.
PROOF. See [2, 4].
As a result, a maximum matching can be found by repeatedly searching for augmenting paths and augmenting the matching. The algorithms in [1, 2, 13] and the one presented here are organized in this way.
3.
Statement of the Algorithm
This section presents an algorithm, called E, for finding a maximum matching on a
graph. First, the basic strategy and the data structures of E are described. Then Algorithm E is stated. An example of how E works is given. Finally, E is compared with
Edmonds' algorithm.
The algorithm begins by numbering the vertices and edges of the graph. Below we
do not distinguish between a vertex v and its number; we denote both by v. We denote
the number of an edge vw as n(vw).
Algorithm E constructs a number of matchings, the last of which is maximum. A
matching is stored in the array M A T E . This array has an entry for each vertex. If v and
w are vertices, edge vw is matched if M A T E ( v ) = w and M A T E ( w ) = v.
Algorithm E begins with all vertices unmatched. It searches for an augmenting path.
If such a path is found, the matching is augmented. The new matching contains one
more edge than the previous one. Next E searches for an augmenting path for the new
matching. This process is iterated. Eventually, E constructs a matching that has no
augmenting path. This matching is maximum, by Berge's Lemma.
Algorithm E searches for an augmenting path in the following way. First an unmatched
vertex u is chosen. E scans edges to find alternating paths to u. A vertex v is called outer
when E finds an alternating path from v to u that starts with a matched edge. Let such
a path be P ( v ) = (v, vl, " . , u), so vvl is matched. E sets an entry in the L A B E L
array for every outer vertex v. Path P(v) can be computed from L A B E L ( v ) . If an edge
joining an outer vertex v to an unmatched vertex u' ~ u is scanned, E finds an augmenting path, ( u ' ) . P ( v ) = (u', v, vl, . . . , u). If no such edge is ever scanned, vertex u
is not in an augmenting path.
Figure 2 illustrates a search for an augmenting path to vertex u = 9. Figure 2(a)
shows paths P ( 3 ) and P(7). Figure 2(b) shows the values stored by E. Now we explain
these values.
The L A B E L entry for an outer vertex is interpreted as either a start label, vertex
label, or edge label. In Figure 2, eight vertices are outer. Each is labeled in one of these
ways. The remaining vertex, 1, is nonouter. This means there is no Mternating path from
1 to 9 that starts with a matched edge. Nonouter vertices are drawn hollow in all figures
in this paper.
Now we describe the three label types.
Start label. In the search for an augmenting path to the unmatched vertex u, u has
a start label. This defines an alternating path, P ( u ) = (u).
Vertex label. If outer vertex v has a vertex label, L A B E L ( v ) is the number of another
outer vertex. Path P ( v ) is defined as (v, M A T E ( v ) ) , P ( L A B E L ( v ) ) .
Using this definition, we compute P ( 8 ) :
P ( 8 ) = (8, M A T E ( 8 ) ) . P ( L A B E L ( 8 ) )
= (8, 7).(4, a, 9) = (8, 7, 4, 3, 9).
Edge label. If outer vertex v has an edge label, L A B E L ( v ) contains the number of an
224
HAROLD
N.
GABOW
'S
v
2
Pl31-~(
MATE(v)
Label t y p e
1
2
nonouter
2
3
4
5
6
7
8
9
1
4
3
6
5
8
7
--
(o)
LABEL(v)
--
vertex
edge
vertex
edge
vertex
edge
vertex
start
3
n (67)
9
n(67)
9
n(48)
4
--
FIRST(v)
--
1
0
0
0
0
0
0
0
(b)
.Fi~ 2. Search values
edge joining two outer vertices, LABEL(v) = n(xy). Path P(v) is defined in terms of
paths P(x) and P(y). As an example, consider vertex 7, which has label n(48). Vertices 4
and 8 are outer, so there are alternating paths P ( 4 ) and P(8). Vertex 7 is in P(8).
Let P(8, 7) denote the portion of P ( 8 ) from 8 to 7, i.e. P(8, 7) = (8, 7). Then P ( 7 ) is
defined as the path (rev P (8, 7 ) ) *P (4), i.e.
P ( 7 ) = (rev (8, 7 ) ) . ( 4 , 3, 9) = (7, 8, 4, 3, 9).
Path P ( 3 ) is defined similarly. The label of vertex 3 is n(67). Since vertex 3 is in P ( 7 ) ,
path P ( 3 ) = (rev P(7, 3 ) ) . P ( 6 ) .
E also uses an array FIRST. If v is an outer vertex, FIRST(v) is the first nonouter
vertex in P(v). In Figure 2, the first nonouter vertex in P ( 2 ) is FIRST(2) = 1. Path
P ( 7 ) does not contain any nonouter vertices, so FIRST(7) is set to 0, a d u m m y vertex.
If edge 67 is removed, vertices' 2, 3, and 5 become nonouter, and FIRST(7) becomes 3.
The array F I R S T speeds up the computation. Using FIRST, E finds the first nonouter vertex m P(v) with a table look-up. Without FIRST, this operation involves
computing vertices m P(v) until a nonouter vertex is found. Thus F I R S T enables E
to do in constant time what otherwise requires time proportional to V, the number of
vertices. This speedup is crucial in achieving the O( V a) time bound.
Now we state Algorithm E in detail.
The vertices of the graph are numbered from 1 to V. E also uses a dummy vertex 0
for boundary conditions.
The edges of the graph are stored in some standard manner, such as an adjacency
matrix [9] or adjacency lists. For convenience we choose adjacency lists, using an approach described by Tarjan [11]. Let W be the number of edges in the graph. An array
END has entries numbered from V -F 1 to V + 2W. For each edge, there are two consecutive entries, containing the numbers of the vertices in the 'edge. Thus edge vw is
stored as the zth edge when E N D ( V + 2i - 1) = v and E N D ( V + 2,) = w. The edge
number n(vw) is V + 2,. Thus, v and w can be easily computed from n(vw). There
is an adjacency list for each vertex v. This list contains the numbers n(vw) of all edges
containing v.
The array END and the adjacency lists are referenced implicitly in the algorithm.
See, for example, step E2, below.
The M A T E array has an entry for each vertex. M A T E specifies a matching. If v,
A n E f f w i e n t I m p l e m e n t a t i o n of E d m o n d s ' A l g o r i t h m
225
w ~ 0 a r e v e r t i c e s , M A T E ( v ) = 0 if v is u n m a t c h e d ; e d g e vw is m a t c h e d if M A T E ( v ) = w
and MATE(iv)
= v.
T h e L A B E L a r r a y h a s a n e n t r y for e a c h v e r t e x . I n a g i v e n s e a r c h , a v e r t e x v is o u t e r
if L A B E L ( v )
> O. I f v h a s a v e r t e x l a b e l , L A B E L ( v )
is a v e r t e x n u m b e r b e t w e e n 1 a n d
V. I f v h a s a n e d g e label, L A B E L ( v )
is a n e d g e n u m b e r b e t w e e n V + 1 a n d V + 2 W .
T h e s e c l a s s i f i c a t i o n s a r e u s e d i m p l i c i t l y in t h e a l g o r i t h m , i n t e s t s like " I f t h e v e r t e x is
o u t e r , t h e n . . . . " See, for e x a m p l e , s t e p E 4 .
T h e F I R S T a r r a y h a s a n e n t r y f o r e a c h v e r t e x . I n a g i v e n s e a r c h , if v is a n o u t e r v e r t e x
then FIRST(v)
is t h e f i r s t n o n o u t e r v e r t e x i n P ( v ) .
T h e a l g o r i t h m is p r e s e n t e d b e l o w in a h i g h - l e v e l l a n g u a g e s i m i l a r t o K n u t h ' s [10].
E is t h e m a i n r o u t i n e . I t u s e s s u b r o u t i n e s L a n d R.
E c o n s t r u c t s a m a x i m u m m a t c h i n g on a g r a p h It s t a r t s a search for an a u g m e n t i n g p a t h to each
u n m a t c h e d vertex u. I t s c a n s edges of the graph, deciding to assign new labels or to a u g m e n t the
matching
E0. [Imtiahze.] R e a d t h e graph into adjacency lists, n u m b e r i n g t h e vertices 1 to V and t h e edges
V -4- 1 to V + 2W. Create a d u m m y vertex 0 For 0 < i < V, s e t L A B E L ( u ) ~- --1, M A T E ( i ) ~- 0
(all vertices are nonouter a n d u n m a t c h e d ) Set u ~- 0
E l . [Find u n m a t c h e d vertex ] Set u ~-~ u + 1. If u > V, halt; M A T E c o n t a i n s a m a x i m u m m a t c h i n g
Otherwise, if vertex u is m a t c h e d , repeat step E1 Otherwise (u is u n m a t c h e d , so assign a s t a r t label
and begin a new search) s e t L A B E L ( u ) ~-- F I R S T ( u ) ~- O.
E2 [Choose an edge ] Choose an edge xy, where x ]s an outer vertex. (An edge vw m a y be chosen
twice in a s e a r c h - - o n c e with x = v, and once with x = w.) If no s u c h edge exists, go to E7. (Edges
xy can be chosen m an arbitrary order. A posmble chome m e t h o d m " b r e a d t h - f i r s t " : a n o u t e r vertex
x = xt is chosen, and edges x~y are chosen m succeeding executions of E2, when all s u c h edges have
been chosen, the vertex x~ t h a t was labeled i m m e d i a t e l y after x~ is chosen, and the process is re. peated for x = x~. T h i s breadth-first m e t h o d requires t h a t A l g o r i t h m E m a i n t a i n a list of o u t e r
vertices, xL, x~ • • • .)
E3. [Augment the matching.l If y is u n m a t c h e d and y ¢ u, s e t M A T E ( y ) ~-- x, call R ( x , y): t h e n go
to E7 (R completes the a u g m e n t along p a t h (y)*P(x))
E4. [Assign edge labels.] If y is outer, call L, then go to E2 (L assigns edge label n ( x y ) to n o n o u t e r
v e r t m e s in P(x) and P(y))
E5. [Assign a vertex label.] Set v ~-~ M A T E ( y ) . If v m nonouter, set L A B E L ( v ) ~ x, F I R S T ( v ) ~- y,
and go to E2 (See Figure 3 )
E6. [Get next edge.] Go to E2 (y is nonouter and M A T E ( y ) is outer, so edge xy adds nothing).
E7. [Stop the s e a r c h ] Set LABEL(O) *-- --1. For all outer vertices % s e t L A B E L ( q )
L A B E L ( M A T E ( z ) ) ~-- --1 T h e n go to E1 (now all vertmes are nonouter for t h e n e x t search).
e-
L assigns the edge label n(xy) to nonouter vertices Edge xy joins outer vertices x, y. L s e t s join
to t h e first nonouter vertex m both P ( z ) and P(y). T h e n it labels all n o n o u t e r vertices preceding
join in P(x) or P(y) See Figure 4.
L0. [Initialize.] Set r ~ F I R S T ( x ) , s ~-- F I R S T ( y ) . If r = s, r e t u r n (no vertices c a n be labeled).
Label (v)
'
P(v)
Flrlt(v)
Mate(y)q
FIG. 3
v
Assigning a vertex label
226
HAROLD N. GABOW
loin
-
-
-
r
P(v)
s
X
Wy
(a)
(b)
FIG. 4.
Assigning edge labels
Otherwise flag r and s. (Steps L1-L2 find 3oin by advancing alternately along paths P ( x ) and P(y).
Flags are assigned to nonouter vertices r in these paths. This is done by setting L A B E L ( r ) to a
negative edge number, L A B E L ( r ) +- - n ( x y ) . This way, each invocation of L uses a distinct flag
value.)
L1. [Switch paths ] If s ~ 0, interchange r and s, r ~-~ s (r is a flagged nonouter vertex, alternately
in P ( x ) and P(y)).
L2. [Next nonouter vertex.] Set r +-- F I R S T ( L A B E L ( M A T E ( r ) ) )
(r ]s set to the next nonouter
vertex in P(x) or P(y)). If r is not flagged, flag r and go to L1 Otherwise s e t 3 o i n ~-- r and go to L3.
L3. [Label vertices in P(x), P(y).] (All nonouter vertmes between x and 3o~n, or y and jozn, will be
assigned edge labels. See Figure 4(a).) Set v +- F I R S T ( x ) and do L4. Then set v +- F I R S T ( y ) and
do L4. Then go to L5.
L4 [Label v ] If v ~ 3oin, set L A B E L ( v ) +- n(xy), F I R S T ( v ) ~-)oln, v ~-- F I R S T ( L A B E L ( M A T E ( v ) ) )
and repeat step L4 (See Figure 4(b).) Otherwise continue as specified in L3.
L5 [Update F I R S T . ] For each outer vertex i, if F I R S T ( I ) is outer, set F I R S T ( z ) +- 3o~n. (Join is
now the first nonouter vertex in P(i) )
L6. [Done ] Return
R (v, w) rematches edges m the augmenting path. Vertex v is outer. Part of path (w)*P(v) is in the
augmenting path. It gets rematehed by R(v, w) (Although R sets M A T E ( v ) +- w, it does not set
M A T E ( w ) ~- v. This is done in step E3 or another call to R.) R is a recursive routine.
R]. [Match v to w ] Set t ~-- M A T E ( v ) , M A T E ( v ) ~- w. If M A T E ( t ) ~ v, return (the path m completely rematehed)
R2. [Rematch a path.] If v has a vertex label, set M A T E ( t ) ~-- L A B E L ( v ) , call R ( L A B E L ( v ) , t)
recursivcly, and then return.
R3. [Rematch two paths.] (Vertex v has an edge label ) Set x, y to vertices so L A B E L ( v ) = n ( x y ) ,
call R(x, y) recurslvely, call R ( y , x) recurslvely, and then return.
W e illustrate h o w E c o n s t r u c t s a m a x i m u m m a t c h i n g on g r a p h Gi of F i g u r e 1. Initially,
all v e r t i c e s are u n m a t c h e d . E searches for an a u g m e n t i n g p a t h t o v e l t e x 1. T h e first
edge chosen, 12, f o r m s such a p a t h . A n a u g m e n t is d o n e b y placing 12 in t h e m a t c h i n g .
E sets M A T E ( l )
~-- 2, M A T E ( 2 )
+- 1.
I n a similar m a n n e r , edges 34, 56, a n d 78 are m a t c h e d . T h i s gives t h e m a t c h i n g in
F i g u r e 1.
An Effwient Implementation of Edmonds' Algorithm
227
9
p(T)---
FxG. 5.
i
Search from vertex 9
]n the last search, vertex 9 gets a start label. Edge 93 is scanned, and vertex 4 gets a
vertex label; similarly, vertices 6 and 8 get vertex labels. When E scans edge 48, vertex 7
gets an edge label. The result is Figure 5. (Only scanned edges are shown. The L A B E L
values of outer vertices are shown in Figure 2.)
Now we describe how vertices 3 and 5 are labeled, as shown in Figure 2. E scans edge
67, and subroutine L is called to assign the label n(67).
L computes join in steps L0-L2, as follows:
1. In step L0, the first nonoutcr vertex in P(6) is computed as F I R S T ( 6 ) = 5. The
first nonouter vertex in P(7) is computed as F I R S T ( 7 ) = 3. Vertmes 5 and 3 are flagged
by setting L A B E L ( 5 ) ~-- L A B E L ( 3 ) ~ - n ( 6 7 ) .
2. In step L2, the next nonouter vertex in P(7) is computed as F I R S T ( 9 ) = O.
Vertex 0 is flagged.
3. In step L2, the next nonouter vertex in P(6) is computed as F I R S T ( 9 ) = O.
Since 0 is already flagged, joan is set to 0.
In steps L3-L4, L assigns the label n(67) to vertices 5 and 3.
L resets F I R S T ( i ) for i = 4, 6, 7, 8, in step L5. No nonouter vertices remain in P(~),
so F I R S T ( I ) is set to 0.
Finally, L returns.
Now E continues scanning edges. Vertex 2 gets a vertex label; the result is Figure 2.
When edge 32 is scanned, vertex I gets an edge label, n(32). Finally edge 1 10 is scanned,
and the augmenting path (10).P(1) is found.
The augment is done in step E3 and subroutine R. Step E3 matches vertex 10, and
calls R(1, 10) to rematch the remainder of (10),P(1). Figure 6(a) shows the result of
R(1, 10): Edge 1 10 is matched, and two recursive calls are pending on R, R(3, 2) and
R(2, 3). (In Figure 6(a), edge 12 is drawn half-wavy, denoting M A T E ( 2 ) -- 1 but
M A T E ( l ) ~ 2.) Path P(1) is defined as (rev P(2, 1 ) ) . P ( 3 ) . The call R(3, 2) processes
path P(3). Figure 6(b) shows the matching when R(3, 2) is complete. (R(3, 2) makes
recursive calls R(6, 7) and R(7, 6).) Then the call R(2, 3) processes path rev P(2, 1).
It sets M A T E ( 2 ) = 3, completing the augment.
Now M A T E contains a maximum matching. The algorithm halts in step El.
228
HAROLD N. GABOW
9
I0
9
I0
I,
./i
)
5
)
I
3
S
4
6
rey~.P (a,I)- l
Pll
(o)
(b)
FIG. 6. Augment path (10).P(1)
For comparison we briefly describe how Edmonds' algorithm [4] finds the" same matching on G~. We discuss the search for an augmenting path to vertex 9.
The search begins by growing a tree consisting of the edges in Figure 5, except for
edge 48. When this edge is scanned, it completes a cycle, (4, 7, 8, 4). Edmonds defines a blossom as an odd number of vertices joined by a maximally matched cycle.
Vertices 4, 7, and 8 form a blossom. These vertices and the edges between them are
shrunk into a single vertex, b. Vertex b is adjacent to any vetrex adjacent to 4, 7, or 8,
b is matched with vertex 3. The result is a reduced graph Gt'.
Now the problem is to find all augmenting path in G(. Suppose the path (10, 1, 2,
3, b, 6, 5, 9), corresponding to (10),P(1), is found. The matching in Gi' is augmented.
So edge b6 becomes matched. Then blossom b is expanded into the original cycle (4, 7,
8, 4). Vertex 7 is matched to 6. The remaining vertices are matched along edges of the
cycle. The result is a maximum matching.
The intermediate steps that find the augmenting path in G~' are similar. Two more
blossoms are shrunk. (These correspond to edge labels n(67) and n(32).) In the augment, these two blossoms are expanded and rematched.
The implementation of this elegant algorithm requires some care. A time bound of
O(V 4) results from (possibly) V2 blossom expansion operations, each requiring time
0(V2). Algorithm E avoids shrinking and expansion by recording the pertinent structure of blossoms in L A B E L and F I R S T . This results in a factor of V speedup.
4. Proof of Correctness
This section proves that Algorithm E constructs a maximum matching. It shows that E
constructs valid augmenting paths; each matching is augmented correctly; and the last
matching is maximum.
I t is convenient to introduce the dummy vertex, 0, to handle boundary conditions.
In any search, we assume vertex 0 is nonouter, and is "matched" with the unmatched
vertex u. We also extend the paths P(v) to vertex 0, as follows:
Defimtion 1. An outer path is an alternating path (v, vl, . . . , u, 0) that starts with
a matched edge vvl and ends with the dummy vertex, 0.
The definition guarantees an outer path contains at least one nonouter vertex.
An E~cient Implementation of Edmonds' Algorithm
plv)----J~
plr*j-l,rjl
~ r'lj-I
"
229
w
FIG. 7. Search graph
The first task is to prove that in step E3, ( y ) , P ( x ) is an augmenting path. I t suffices
to show t h a t P(x) is an outer path. We do this below, in Corollary 1. The main issue is
proving P(x) is simple.
We start b y defining a search graph, which gives the properties of a search conducted
b y E. Functions p, f, and l in the definition correspond to P, FIRST, and LABEL in
Algorithm E.
Defin~tw~ 2. A search qraph (G, O, u, p, f, l) consists of: a matched graph G; a set
of vertices, O, called outer vertices; an unmatched outer vertex u; a function p, mapping
an outer vertex v to p(v), an outer p a t h starting at v; a function f, mapping an outer
vertex v to f(v), the first nonouter vertex in p(v); and a function l, mapping certain
outer vertices v to l(v), another outer vertex. In addition, the following properties are
satisfied for an outer vertex v. Let r = f(v), the first nonouter vertex in p(v); let r - be
t h e vertex matched with r; and let r + = l(r-).
2.1. P a t h p(v) = p(v, r).p(r+).
2.2. An outer vertex x in p(v, r) h a s f ( x ) = r.
Figure 7 shows an outer path p(v) in a search graph. All outer vertices x with the same
vertex f(x) are grouped in a circle. Vertex r = f(v) is the first nonouter vertex in path
p(v). Consider a vertex x in v's circle. Properties 2.1 and 2.2 imply t h a t p(x) consists of
a path inside the circle to r - ; followed by edges r-r, rr+; followed by p(r+). ( N o t e t h a t
the circles in Figure 7 correspond to blossoms in Edmonds' algorithm.)
Figure 2 shows a search graph constructed by E. The outer vertex 3 illustrates property 2.2, since all vertices x in P ( 3 , 9) have F I R S T ( x ) = O.
The decomposition property 2.1 at first seems too weak. I t seems natural t h a t p(v) =
(v, vl, . . . , v2,-1, v2,, . . . ) decomposes as p(v, v2,-1)*p(v~,), for any i. However this is
false. In Figure 2, p ( 3 ) ~ (3, 4 ) , p ( 8 ) .
230
HAaOLV ~ . GABOW
Now we derive the structure of p a t h p(v) shown in Figure 7. Let the nonouter vertices
in p(v) be r , , for 0 < j < J. Thus r0 ~- r = f(v) and r j = 0. Property 2.1 shows t h a t
for a n y i i n 0 < i _ <
J,
p(v) = p(v, r0).p(r0 +, r l ) * - . " *p(r~+-l, r,)* . . . . p ( r , + ) .
(1)
A vertex x ~ re in p(r~-l, re) is outer, a n d f ( x ) = re.
Next we derive the relationship between two outer paths p(v) and p(w), as shown in
Figure 7. Let the nonouter vertices in p(w) be sk, for 0 _< k < K. Let z be the first outer
vertex in p(v) t h a t is also in p(w). Decomposition (1) shows f(z) is a nonouter vertex in
b o t h paths, f(z) = rs = sa for some indices f, g. So it is easy to see t h a t p(v) and p(w) are
identical after rf = so, and t h a t p(v, rs_l ) and p(w, so-l) are disjoint. Thus, as shown in
Figure 7, p(v) and p(w) both partition into three subpaths. The first subpaths, p(v, rf_~)
and p(w, Sa-l), are disjoint; the last subpaths, p(rs +) and p(so+), are identical; the middle
subpaths, p( r~-x , rs ) and p( so+-l , so), intersect arbitrarily.
Now we show t h a t E maintains a search graph. First we formally define the function P :
Definitwn 3. The outer path functwn P for Algorithm E is defined (recursively) as
follows:
1. The unmatched vertex u has outer p a t h P(u) = (u, 0).
2. If v has a vertex label, LABEL(v) is the number of an outer vertex, and P(v) =
(v, MATE(v) ),(LABEL(v) ).
3. If v has an edge label, LABEL(v) is the number of an edge xy, where x and y are
outer vertices. Either v E P(x) or v E P(y). In the former case,
P(v) = (rev P(x, v) ) . P ( y ) ;
otherwise, P(v) = (rev P(y, v) ) . P ( x ) .
LEMMA 1. Each time step E2 is executed m Algorithm E, a search graph is formed by
(G, O, u, P, FIRST, LABEL).
PROOF. The argument is b y induction. Assume a search graph is formed, with outer
vertices O. Below we show t h a t if E assigns an edge label n(xy) to new vertices 0 I, then a
search graph is formed, with outer vertices O U 0'. The case where E assigns a vertex
label is left as an easy exercise.
Edge labels are assigned in step E4 and subroutine L. F r o m Figure 7, we see steps
LO--L4 work as follows:
I n steps LO-L2, consecutive nonouter vertices in P(x) and P(y) are flagged. ( I n a
search graph, the nonouter vertex after r is f(l(r-)). )
In step L2, join is set to the first nonouter vertex common to P(x) and P(y). (In
Figure 7, 3oin = ry = so.)
In step L4, a label is assigned to each nonouter vertex v preceding josh in P(x) or P(y).
Now we check the search graph properties for an outer vertex v. We assume first
v E O, and then v E O'.
If v E O, let r be the vertex FIRST(v) before L is executed. We assume r is labeled in
step L4, since otherwise there is nothing new to check. Either r E P(x) or r E P(y) ; assume the former. Figure 7, applied to paths P(v) and P ( x ) , shows t h a t these paths are
identical after r. So after L is executed, the first nonouter vertex in P(v) is join. The value
FIRST(v) is set to join in step L5. Thus array F I R S T is maintained correctly.
Properties 2.1 and 2.2 follow easily from (1). Thus vertices in O satisfy all search graph
properties.
Now we check these properties for ~ vertex v E 0 ' . Before step L4, v is a nonouter vertex
in P(x) or P(y). Assume the former, so P(v) = (rev P(x, v)),P(y). Thisdefines an outer
p a t h (see Figure 7). I n particular, P(v) is simple, since P(x, v) and P(y) are disjoint.
Thus P(v) is defined correctly.
The remaining search graph properties for v follow from those for vertices x, y E O.
The lemma now follows b y induction. []
COROLLARY 1. E labels vertices v so P ( v ) is an outer path starting at v.
A n Effwient Implementation of Edmonds' Algorithm
231
Thus we see t h a t E constructs valid augmenting paths. Next we show t h a t E augments
a matching correctly. We begin with two useful definitions.
In an augment, step E3 and subroutine R change values of M A T E . A nonzero vertex v
is originally matched if M A T E ( v ) is unchanged from its value before step E3 begins. F o r
example, in Figure 6(a), all vertices except 1, 10, and 0 are originally matched.
Define a partial order on vertices, @, as follows: v © w means t h a t v is an outer vertex,
and v is labeled before w is labeled. In Figure 2, 9 © 7 © 1. We consider vertices labeled
in the same call to L as being labeled simultaneously. So neither 3 © 5 nor 5 @ 3.
LEMMA 2. Let R(v, w) be called, with v an outer vertex and w ~ P ( v ) . Suppose the first
vertex of P ( v ) = (v, vl , v~ , • • • ) that is not originally matched is v2m+l , and v ~ v~m+l.
Then R changes M A T E ( v , ) , 0 < i < 2m, to give a maximum matching of the path
( w ) . P ( v , v2m)(i.e. M A T E ( v ) = w, and for 1 < ~ _< m, MATE(v2,-1) = v2,,
M A T E ( v ~ , ) = v2,-1).
PROOF. The proof is b y induction on m. The argument falls into three cases: m = 0 ;
m > 0 a n d v h a s a v e r t e x l a b e l ; m > 0 a n d v h a s a n edgelabel. F o r details, see [8]. []
COROLLARY 2. E augments a matching correctly.
PROOF. We show t h a t after step E3 and R are executed, M A T E is changed according
to an augment along the p a t h ( y ) . P ( x ) .
The value M A T E ( y ) is set correctly in step R3. When R ( x , y) is called, all vertices in
P ( x ) are originally matched, except vertex 0. The hypotheses of the lemma are satisfied
with v~m+l = 0. So when R ( x , y) returns, M A T E is changed to give a maximum matching
of ( y ) . P ( x ) .
[]
The final task is to show the last matching is maximum. Suppose vertex u is unmatched
in the last matching. I n some execution of step E l , a search is started from vertex u. This
search terminates without augmenting. Let S~ denote the search; let M~ denote the
matching when search S~ is made. We investigate how subsequent searches interact with
S,,. The following concept is central [4].
Definition 4. The Hungarian subgraph H for vertex u is a subgraph of G. I t consists of
all edges containing an outer vertex of S~, and all vertices in these edges.
In G1, if edge 23 is deleted, Figure 2 shows the Hungarian subgraph for vertex 9. Note
these obvious properties of a Hungarian subgraph H : In search S~, each edge of H is
chosen at least once in step E2. If vertex v E H - u, the matched edge containing v is in H.
The basic result is t h a t no augmenting path constructed after S , intersects H.
LEMMA 3. Suppose a matching M agrees with M~ on H, M N H -- M , N H. Then no
augmenting path for M contains a vertex zn H.
PROOF. The hypothesis implies we can refer to "a matched edge in H " unambiguously.
We do so below.
Let Q be an augmenting path for M containing a vertex in H. We derive a contradiction, proving the lemma.
P a t h Q is not contained entirely in H. So we can set Q = (vl, v2, • • • , v2,), where for
some i in 1 _< i < n, vertex v2,+~ E H and v~+2 ~ H. The matched edge v2,v~,+l is in H.
So a vertex in this edge is outer in S , . Since v2,+~is nonouter, v2, is outer.
Choose an index j, 0 < j < i, so p a t h Q' = (v2j, v2j+l, -. • , v2,+1) is in H, and vertex
v~ is outer for j < k < i b u t nonouter for j = k. This can be done, since if v2k is outer in
H, then the matched edge v:k-2v2k-~is in H. (Note i f j = 0, we have vo = 0 and vl = u.)
We derive a contradiction b y calculating FIRST(v2~+i) at the end of S~. If x and y are
adjacent outer vertices, then at the end of S , , F I R S T ( x ) = F I R S T ( y ) . (This results
from executing subroutine L on edge xy.) Applying this observation to vertices in p a t h Q'
shows FIRST(v2~+i) -- v2~+1, the first nonouter vertex in Q'. (This vertex exists, since
v2~+~ is nonouter.)
However, p a t h P(v~+~) = (v2~+1, v 2 ~ , . . . ), so FIRST(v2j+i) = v2j. Since v2~
v2~+~, we have a contradiction. []
Now we show E works correctly.
232
HAROLD N. GABOW
TABLE I.
Wons~-C~,sE TI~E BouNns
Steps
Time
Executions
per search
Total time
EO
El
E2
E3-R
E4-LO
V + W
c
c
V
c
-V
2W
1
W
Vs
V
V*
V2
V*
LI~L6
V
V/2
V*
E5
E6
E7
c
c
V
V /2
W
1
V*
Vl
V~
COROLLARY 3. E halts wzth a maximum matching specified by M A T E .
PltooF. F i m t note t h a t E always halts. We have seen t h a t subroutines L and R halt.
So any search eventually stops, in step E2 or E3. E starts a finite number of searches in
step E l . So Algorithm E halts.
Corollary 2 shows t h a t M A T E specifies a valid matching when E halts. To prove the
last matching is maximum, it suffices to show no augmenting p a t h exists, b y Berge's
Lemma. Let u be an unmatched vertex. Lemma 3 shows no augment made b y E after S~,
involves edges in H. So Lemma 3 can be applied to the last matching, to show there is
no augmenting path to u. []
We conclude this section b y describing a useful modification to Algorithm E, due to
Edmonds [4]. The idea is to ignore a Hungarian subgraph H in searches after S~. ( B y
Lemma 3, searching in H is fruitless. ) We change step E2 as follows:
E2'. [Choose an edge.] Choose an edge . . . If no such edge exists, go to El.
Step E2 pcauses step E7, which unlabels vertices, to be skipped after S~. I t is easy to check
t h a t in the modified algorithm, a vertex y E H is never labeled in a search after S~.
This modification speeds up the algorithm if a maximum matching contains unmatched
vertices. I t does not change the worst-case time bound.
5.
E~cieney and Applications
Algorithm E requires at most O(V ~) time units when executed on a random access computer. This is seen from Table I, which gives simple bounds on the time for each step. F o r
example, steps E4-LO can be executed in a constant amount of time (c) ; in a given search,
they are executed at most W times (where W is the number of edges) ; since there are
at most V searches, and W g V( V - 1)/2, the total time for these two steps is O(V~).
(Note t h a t in step E2 we assume edges are chosen in a breadth-first or similar method,
where a list of outer vertices is maintained. The list allows an unexamined edge to be
chosen in time c J)
Families of graphs t h a t require time O(V 3) can be constructed. We describe such a
family, assuming Algorithm E uses the breadth-first method in step E2. Similar families
can be constructed for other methods [8].
Figure 8 ( a ) shows a graph G6~, with a maximum matching. This graph is formed from
vertices 1, 2, .. • , 6m b y joining vertices 1, 2, • .. , 4m in a complete graph, K4~, and
joining vertex 2i -- 1 with vertex 4m "-b i, for 1 < i < 2m. Adjacency lists contain vertices
in numerical order. Figure 8(b) shows the intermediate matching with 2m edges constructed b y Algorithm E. Figure 8(c) illustrates a typical search to match vertex 4m -b i.
( H e r e / i s odd.) All vertices except 1, 3, 5, • • • , 2/ - 1 are made outer. An augmenting
1 The run time of Algorithm E is at most O(VWa(W, V)), if an efficient set merging algorithm is
used to maintain FIRST in step L5. Here a is a very slowly growing function; a(W, V) < 3 for all
graphs that can be stored in an existing computer memory [12]. For sparse graphs (W << V~), this
variant of E is preferable.
An Effwient Implementation of Edmonds' Algorithm
4m,l
4m*i
2i.ll
(b)
4m.Sitl
2i
,
4m4i
233
6m
2it,! 2it2
K4m
4m,itl
(o)
K4m
4m~i
ir
(c)
I~
4m,I
4
4
m
4m,2
-
I
4m,i-I
2it2
4m
FIG. 8. Worst-case graph G~
path to vertex 4m "4- i + 1 is found when outer vertex 2~ + 1 is chosen in step E2. Over 4mi
edges are chosen in this search, and over 4m 3 edges are scanned in the last m searches.
Thus the time is O(V3).
Several experiments were conducted with an implementation of E in Algol W on the
I B M 360/165. For the worst-case graphs described above, run times proportional to V 2"s
were observed, over the interval 11 _< m < 24 (66 < V < 144, 968 < W < 4608), with
times from .18 to 1.6 sec. For a similar experiment on Edmonds' algorithm, times proportional to V ~ 5 were observed (versus V 4 predicted) with time 1.7 sec for m = 11. Experiments on E on "random" graphs gave times one order of magnitude faster than worst-case
graphs with 3200 edges [8].
The space used by the Algol W implementation of E is 5V + 4W words. This includes
V -4- 4W words for the graph; 2V words for MATE and LABEL; V words for FIRST,
also used by the stack of recursive calls to R; and V words for a list of outer vertices for
step E2.
Algorithm E can be used to speed up the scheduler devised by Fujii et. al. [6]. They
solved the following problem: Compute an optimal schedule for N tasks to be executed by
two processors, assuming the tasks have equal length and arbitrary precedence constraints.
Their approach is to construct a compatibility graph, showing which tasks can be executed
simultaneously; then find a maximum matching on the compatibility graph; finally, sequence the matched task pairs and the unmatched tasks according to precedence con-
234
HAROLD
N. GABOW
straints. This algorithm was thought to require time 0(N4)[6, Erratum]. But thefirst and
last steps can be executed in time O(Na), and Algorithm E finds the matching in time
O(N:~). So the scheduler is an O(N 3) algorithm. (Recent work by Coffman and Graham
[3] solves this scheduling problem in time O(N~). Their elegant method does not employ
matchings directly.)
Algorithm E can be generalized to find maximum matchings on weighted graphs. In a
weighted graph, each edge has a weight that is a real number. The problem is to find a
matching with maximum weight. Matching on ordinary graphs is the special case of this
problem where all edges have equal weight. Edmonds [5] first developed an efficient
(O(V4)) algorithm for this problem. The generalization of Algorithm E takes
time 0(V3)[8].
ACKNOWLEDGMENTS. The author wishes to thank Professor Harold Stone of Stanford
University for assisting in the preparation of this manuscript, and Professor Eugene
Lawler of the University of California at Berkeley for communicating his stimulating
ideas on matching.
REFERENCES
(Note. Reference [7] is not cited in the text.)
1. BALINSKI,M.L.
Labelling to obtain a maximum matching In Comb~natomal Mathematics and
Its Applications, R.C. Bose and T.A Dowling, Eds , U. of North Carolina Press, Chapel Hill, .
2
3
4
5.
6.
7
8.
9
10
11.
12
13.
N.C., 1967, pp. 585--602
BERGE,C. Two theorems in graph theory. Proe. Nat. Acad. Sc~. $S (1957), 842-844.
COFFMAN,E J. JR., AND GRAHAM, R L Optimal scheduling for two-processor systems. Acta
Informatica 1 (1972), 2(}0-213.
EDMONDS,J. Paths, trees and flowers. Canad J. Math. 17 (1965), 449-467
EDMONDS,J Maximum matching and a polyhedron with 0,1-vertices. J. Res. Nat. Bur Standards 69B (1965), 125-130
FuJII, m., KASAMI, T., A N D NINOMIYA,K. Optimal sequencing of two eqmvalent processors.
S I A M J. Applied Math. 17 (1969), 784-789; Erratum, 20 (1971), 141.
GAnow, H. An efficient ]mp|ementation of Edmonds' maximum matching algorithm Tech.
Rep. 328, Comput. Sci. D e p , Stanford U., Stanford, C a h f , 1972
GABow, H. Implementations of algorithms for maximum matching on nonbipartite graphs.
Ph.D. diss., Comput. Sci. Dep., Stanford U., Stanford, Cald., 1973.
HARARY,F. Graph Theory. Addison-Wesley, Reading, Mass., 1969.
I~NUTH,D The Art of Computer Programming, Vol. 1. Addison-Wesley, Reading Mass, 1968.
TARJAN,R.E. An efficient planarity algorithm. Tech. Rep. 244, Comput. Sci. Dep., Stanford
U., Stanford, Calif., 1971.
TAaJAN, R.E. Efficiency of a good but not linear set union algorithm. J. ACM $2, 2 (April
1975), 215-225.
WITZGALL,D., AND ZXHN, C T. JR. Modification of Edmonds' algorithm for maximum matching of graphs. J. Res. Nat. Bur. Standards 69B (1965), 91-98.
RECEIVEDAPRIL1973; REVISEDJULY1975
Jounaa[ of the AMoclatlon for Computilag Machinery, rot. 2,~, No. 2. April 1976
`