Umans Complexity Theory Lectures The complexity of counting
New Topic The complexity of counting
Counting problems So far, we have ignored function problems given x, compute f(x) important class of function problems: counting problems e.g. given 3-CNF φ how many satisfying assignments are there?
Counting problems #P is the class of function problems expressible as: input x f(x) = |{y : (x, y) R}| where R P. compare to NP (decision problem) input x f(x) = y : (x, y) R ?
Counting problems examples #SAT: given 3-CNF φ how many satisfying assignments are there? #CLIQUE: given (G, k) how many cliques of size at least k are there?
Reductions Reduction from function problem f1 to function problem f2 two efficiently computable functions Q, A x (prob. 1) Q y (prob. 2) f1 f2 A f1(x) f2(y)
Reductions problem f is #P-complete if f is in #P every problem in #P reduces to f “parsimonious reduction”: preserves the number of solutions many standard NP-completeness reductions are parsimonious therefore: if #SAT is #P-complete we get lots of #P-complete problems Q x (prob. 1) y (prob. 2) f1 f2 A f1(x) f2(y)
#SAT: given 3-CNF φ how many satisfying assignments are there? Theorem: #SAT is #P-complete. Proof: clearly in #P: (φ, A) R A satisfies φ take any f #P defined by R P
#SAT f(x) = |{y : (x, y) R}| C CVAL reduction for R 1 iff (x, y) R add new variables z, produce φ such that z φ(x, y, z) = 1 C(x, y) = 1 for (x, y) such that C(x, y) = 1 this z is unique hardwire x # satisfying assignments = |{y : (x, y) R}|
Relationship to other classes Question: is #P hard because it entails finding NP witnesses? …or is counting difficult by itself?
Cycle Covers cycle cover: collection of node-disjoint directed cycles that touch every node #CYCLE-COVER: given directed graph G = (V, E) how many cycle covers does it have? Theorem(Valient): #CYCLE-COVER is #P-complete. implies #MATCHING is #P-complete
Bipartite Matchings Definition: G = (U, V, E) bipartite graph with |U| = |V| a perfect matching in G is a subset M E that touches every node, and no two edges in M share an endpoint
Bipartite Matchings Definition: G = (U, V, E) bipartite graph with |U| = |V| a perfect matching in G is a subset M E that touches every node, and no two edges in M share an endpoint
Bipartite Matchings and Cycle Covers Given bipartite graph G = (U, V, E) with |U| = |V| where U = V = {1,…,n}, Let G’ be the graph (V,E’) where (u,v) in E’ iff u in U, v in V and (u,v) in E
Cycle Covers Claim: 1-1 correspondence between cycle covers in G’ and perfect matchings in G #MATCHING and #CYCLE-COVER parsimoniously reducible to each other 2 3 1 2 3 4 5 1 4 1 2 3 4 5 5 G = (U, V, E) G’ = (V, E’)
Bipartite Matchings #MATCHING: given a bipartite graph G = (U, V, E) how many perfect matchings does it have? Theorem(Valiant) #MATCHING is #P-complete. But… can find a perfect matching in polynomial time! counting itself must be difficult
Relationship to other classes To compare to classes of decision problems, usually consider P#P which is a decision class… easy: NP, coNP P#P easy: P#P PSPACE Toda’s Theorem : PH P#P.