Given a graph , which we will refer to simply as , consider partitioning the vertex set into two disjoint sets and , and counting the number of edges where and .
For this partition we have two edges crossing between and . Is it possible to have more? For an arbitrary graph , can we maximize the number of edges that cross from to , and identify the partition(s) that attain it? This is the maximum cut problem. The size of a cut is the number of edges crossing between and , and the maximum cut is a cut with at least as many edges as every other cut.
An NP-complete problem
The maximum cut problem is known to be NP-complete; in fact, it was one of Karp's original 21 NP-complete problems.
A quadratic reformulation
The adjacency matrix has entry equal to when there is an edge between and , and otherwise. Now rewrite the max cut as a quadratic program. Assign every vertex in the value and every vertex in the value , so a partition becomes a choice of at each vertex. Then
Every crossing edge contributes , and since the and terms agree we quadruple-count the cut, which is where the factor of comes from.
A cut for free
It is easy to find a cut of any graph that attains at least half of the max cut. Writing for the number of edges in the cut of a partition , there is always a partition with
A random split already achieves this in expectation, since each edge crosses with probability . The Edwards–Erdős bound sharpens it: every graph with edges has a cut of size at least
and this is tight for complete graphs.
Max cut on special graphs
For some families the maximum cut is known exactly. A complete graph on vertices has maximum cut , attained by splitting the vertices as evenly as possible; the proof is the simple inequality for any uneven split. And a tree with edges has maximum cut exactly : a tree has no cycles, so it is bipartite, and the two-coloring puts every edge across the cut.
The Goemans–Williamson algorithm
To do better in general, we relax the quadratic program. Instead of forcing each , let each vertex be a unit vector and maximize
This is a semidefinite program, and unlike the original it can be solved in polynomial time.
But a solution to the semidefinite program is a list of vectors in , not a cut of our graph. Surprisingly, the most difficult part of using this relaxation is translating the result back into a meaningful cut. The key idea is randomized hyperplane rounding: round each vector to or depending on which side of a random hyperplane it lands on.
To choose the hyperplane, sample independent standard normal variables and normalize to get its normal direction.
Taking expectations and using that bound on every edge gives the Goemans–Williamson guarantee: the expected size of the resulting cut is at least
So the algorithm always lands within about of the best possible cut: a hard guarantee, on every graph, in polynomial time. Under the unique games conjecture no efficient algorithm can beat this constant, which ties back to the question it started from.
Max cut turns up across theoretical computer science, network design, machine learning, and even theoretical physics, and the tools behind it (semidefinite programming, randomized rounding, and the probabilistic method) reach much further than this one problem. The full paper can be found here.