# Maximum cardinality matching

Jump to navigation Jump to search

Maximum cardinality matching is a fundamental problem in graph theory. We are given a graph $G$ , and the goal is to find a matching containing as many edges as possible, that is, a maximum cardinality subset of the edges such that each vertex is adjacent to at most one edge of the subset. As each edge will cover exactly two vertices, this problem is equivalent to the task of finding a matching that covers as many vertices as possible.

An important special case of the maximum cardinality matching problem is when G is a bipartite graph, whose vertices V are partitioned between left vertices in X and right vertices in Y, and edges in E always connect a left vertex to a right vertex. In this case, the problem can be efficiently solved with simpler algorithms than in the general case.

## Algorithms for bipartite graphs

The simplest way to compute a maximum cardinality matching is to follow the Ford–Fulkerson algorithm. This algorithm solves the more general problem of computing the maximum flow, but can be easily adapted: we simply transform the graph into a flow network by adding a source vertex to the graph having an edge to all left vertices in X, adding a sink vertex having an edge from all right vertices in Y, keeping all edges between X and Y, and giving a capacity of 1 to each edge. The Ford–Fulkerson algorithm will then proceed by repeatedly finding an augmenting path from some xX to some yY and updating the matching M by taking the symmetric difference of that path with M (assuming such a path exists). As each path can be found in $\ O(E)$ time, the running time is $\ O(VE)$ , and the maximum matching consists of the edges of E that carry flow from X to Y.

An improvement to this algorithm is given by the more elaborate Hopcroft–Karp algorithm, which searches for multiple augmenting paths simultaneously. This algorithm runs in $O({\sqrt {V}}E)$ time.

The algorithm of Chandran and Hochbaum for bipartite graphs runs in time that depends on the size of the maximum matching $k$ , which for $|X|<|Y|$ is $O\left(\min\{|X|k,E\}+{\sqrt {k}}\min\{k^{2},E\}\right)$ . Using boolean operations on words of size $\lambda$ the complexity is further improved to $O\left(\min \left\{|X|k,{\frac {|X||Y|}{\lambda }},E\right\}+k^{2}+{\frac {k^{2.5}}{\lambda }}\right)$ .

More efficient algorithms exist for special kinds of bipartite graphs:

• For sparse bipartite graphs, the maximum matching problem can be solved in ${\tilde {O}}(E^{10/7})$ with Madry's algorithm based on electric flows.
• For planar bipartite graphs, the problem can be solved in time $O(n\log ^{3}n)$ where n is the number of vertices, by reducing the problem to maximum flow with multiple sources and sinks.

## Algorithms for arbitrary graphs

The blossom algorithm finds a maximum-cardinality matching in general (not necessarily bipartite) graphs. It runs in time $O(|V|^{2}\cdot |E|)$ . A better performance of O(VE) for general graphs, matching the performance of the Hopcroft–Karp algorithm on bipartite graphs, can be achieved with the much more complicated algorithm of Micali and Vazirani. The same bound was achieved by an algorithm by Blum (de) and an algorithm by Gabow and Tarjan.

An alternative approach uses randomization and is based on the fast matrix multiplication algorithm. This gives a randomized algorithm for general graphs with complexity $O(V^{2.376})$ . This is better in theory for sufficiently dense graphs, but in practice the algorithm is slower.

Other algorithms for the task are reviewed by Duan and Pettie (see Table I). In terms of approximation algorithms, they also point out that the blossom algorithm and the algorithms by Micali and Vazirani can be seen as approximation algorithms running in linear time for any fixed error bound.