Max Bipartite Matching
We have looked at bipartite graphs before → can be partitioned into 2 sets. We are interested in finding a maximum matching (or a maximum cardinality of the matching).
- Input: a bipartite graph
- Output: a maximum cardinality set of edges that are vertex disjoint
A set of edges is called a matching if no 2 edges in share a vertex. A matching is a perfect matching if every vertex is matched
An interesting property is that we can reduce a bipartite graph into a max flow problem. Given a bipartite graph , construct as follows:
So, lets prove this reduction is correct.
→ Claim: there is a matching of size IFF there is an s-t flow of value in
-
→ clearly, if there is a matching of size , there is a flow of size , and is trivial given the graph
-
← let’s show if there is a flow of size , then there is a matching of size
-
Proof:
-
We decompose the flow into capacity-disjoint st-paths, each with flow 1
-
Each path is 3 edges:
-
Each edge from and has capacity 1
-
So, each vertex, except for can be used on at most one path
-
Removing edges and gives vertex-disjoint edges → thus, our original bipartite graph matching
-
→ Complexity
Minimum Vertex Cover
- Vertex Cover: given a graph , a set of vertices is called a vertex cover IFF for every , either or
-
Minimum Vertex Cover: what is the smallest such that there exists a vertex cover with . Minimum is the minimum vertex cover
-
→ König’s Theorem
This theorem states that
- What we want to do is ⇒ Let in . Show a vertex cover of size
- Recall that we can reduce the problem of maximum matching to a problem of max-flow
- since the max st-flow in is , by max-flow min-cut, there is an st-cut in with capacity
- This flow must cross the cut to reach , and it must consume units of capacity crossing the cut
- There are 3 cases in which capacity can possibly cross the cut:
- It can cross the cut going from to
- It can cross the cut going from to
- It can cross the cut going from to
- Case 2 is not possible (recall the above modification, making edges from to equal to
- Cases to :
- we go via an edge from to (elements in but not in ) with capacity 1
- Cases to :
- same reasoning as above. We go via en edge from to with capacity 1
- So, = capacity crossing the cut = # of such edges = total # vertices in →