11 KiB
Lecture 5
Takeaway from Bipartite Matching
- We saw how to solve a problem (bi-partite matching and others) by reducing it to another problem (maximum flow).
- In general, we can design an algorithm to map instances of a new problem to instances of known solvable problem (e.g., max-flow) to solve this new problem!
- Mapping from one problem to another which preserves solutions is called reduction.
Reduction: Basic Ideas
Convert solutions to the known problem to the solutions to the new problem
- Instance of new problem
- Instance of known problem
- Solution of known problem
- Solution of new problem
Reduction: Formal Definition
Problems L,K.
L reduces to K (L\leq K) if there is a mapping \phi from any instance l\in L to some instance \phi(l)\in K'\subset K, such that the solution for \phi(l) yields a solution for l.
This means that L is no harder than K
Using reduction to design algorithms
In the example of reduction to solve Bipartite Matching:
L: Bipartite Matching
K: Max-flow Problem
Efficiency:
- Reduction:
\phi:l\to\phi(l)(Polynomial time reduction\phi(l)) - Solve prom
\phi(l)(Polynomial time to solvepoly(g)) - Convert the solution for
\phi(l)to a solution tol(Polynomial time to solvepoly(g))
Efficient Reduction
A reduction \phi:l\to\phi(l) is efficient (L\leq p(k)) if for any l\in L:
\phi(l)is computable fromlin polynomial (|l|) time.- Solution to
lis computable from solution of\phi(l)in polynomial (|l|) time.
We call L is poly-time reducible to K, or L poly-time
reduces to K.
Which problem is harder?
Theorem: If L\leq p(k) and there is a polynomial time algorithm to solve K, then there is a polynomial time algorithm to solve L.
Proof: Given an instance of l\in L If we can convert the problem in polynomial time with respect to the original problem l.
- Compute
\phi(l):p(l) - Solve
\phi(l):p(\phi(l)) - Convert solution:
p(\phi(l))
Total time: p(l)+p(\phi(l))+p(\phi(l))=p(l)+p(\phi(l))
Need to show: |\phi(l)|=poly(|l|)
Proof:
Since we can convert \phi(l) in p(l) time, and on every time step, (constant step) we can only write constant amount of data.
So |\phi(l)|=poly(|l|)
Hardness Problems
Reductions show the relationship between problem hardness!
Question: Could you solve a problem in polynomial time?
Easy: polynomial time solution Hard: No polynomial time solution (as far as we know)
Types of Problems
Decision Problem: Yes/No answer
Examples: Subset sums
- Is the there a flow of size
F - Is there a shortest path of length
Lfrom vertexuto vertexv. - Given a set of intercal, can you schedule
kof them.
Optimization Problem: What is the value of an optimal feasible solution of a problem?
- Minimization: Minimize cost
- min cut
- minimal spanning tree
- shortest path
- Maximization: Maximize profit
- interval scheduling
- maximum flow
- maximum matching
Canonical Decision Problem
Does the instance l\in L (an optimization problem) have a feasible solution with objective value k:
Objective value \geq k (maximization) \leq k (minimization)
DL is the reduced Canonical Decision problem L
Hardness of Canonical Decision Problems
Lemma 1: DL\leq p(L) (DL is no harder than L)
Proof: Assume L maximization problem DL(l): does have a solution \geq k.
Example: Does graph G have flow \geq k.
Let v^∗ be the maximum objective on l by solving l.
Let the instance of DL:(l,k) and l be the problem and k be the objective
l\to \phi(l)\in L(optimization problem)\phi(l,k)=l- Is
v^*(l)\geq k? If so, return true, else return false.
Lemma 2: If v^* =O(c^{|l|}) for any constant c, then L\leq p(DL).
Proof: First we could show L\leq DL. Suppose maximization problem, canonical decision problem is is there a solution \geq k.
Naïve Linear Search: Ask DL(l,k), if returns false, ask DL(l,k+1) until returns true
Runtime: At most k search to iterate all possibilities.
This is exponential! How to reduce it?
Our old friend Binary (exponential) Search is back!
You gets a no at some value: try power of 2 until you get a no, then do binary search
# questions: =log_2(v^*(l))=poly(l)
Binary search in area: from last yes to first no.
Runtime: Binary search (O(n)=\log(v^*(l)))
Reduction for Algorithm Design vs Hardness
For problems L,K
If K is “easy” (exists a poly-time solution), then L is also easy.
If L is “hard” (no poly-time solution), then k is also hard.
Every problem that we worked on so far, K is “easy”, so we reduce from new problem to known problem (e.g., max-flow).
Reduction for Hardness: Independent Set (ISET)
Input: Given an undirected graph G = (V,E),
A subset of vertices S\subset V is called an independent set if no two vertices of are connected by an edge.
Problem: Does G contain an independent set of size \geq k?
ISET(G,k) returns true if G contains an independent set of size \geq k, and false otherwise.
Algorithm? NO! We think that this is a hard problem.
A lot of pQEDle have tried and could not find a poly-time solution
Example: Vertex Cover (VC)
Input: Given an undirected graph G = (V,E)
A subset of vertices C\subset V is called a vertex cover if contains at least one end point of every edge.
Formally, for all edges (u,v)\in E, either u\in C, or v\in C.
Problem: VC(G,j) returns true if has a vertex cover of size \leq j, and false otherwise (minimization problem)
Example:
How hard is Vertex Cover?
Claim: ISET\leq p(VC)
Side Note: when we prove VC is hard, we prove it is no easier than ISET.
DO NOT: VC\leq p(ISET)
Proof: Show that G=(V,E) has an independent set of k if and only if the same graph (not always!) has a vertex cover of size |V|-k.
Map:
ISET(G,k)\to VC(g,|v|-k)
G'=G
Proof of reduction: Direction 1
Claim 1: ISET of size k\to VC of size |V|-k
Proof: Assume G has an ISET of size k:S, consider C = V-S,|C|=|V|-k
Claim: C is a vertex cover
Proof of reduction: Direction 2
Claim 2: VC of size |V|-k\to ISET of size k
Proof: Assume G has an VC of size |V| −k:C, consider S = V − C, |S| =k
Claim: S is an independent set
What does poly-time mean?
Algorithm runs in time polynomial to input size.
- If the input has items, algorithm runs in
\Theta(n^c)for any constant is poly-time.- Examples: intervals to schedule, number of integers to sort, # vertices + # edges in a graph
- Numerical Value (Integer
n), what is the input size?- Examples: weights, capacity, total time, flow constraints
- It is not straightforward!
Real time complexity of F-F?
In class: O(F( |V| + |E|))
|V| + |E|= this much space to represent the graphF: size of the maximum flow.
If every edge has capacity , then F = O(CE)
Running time:$O(C|E|(|V| + |E| )))$
What is the actual input size?
Each edge (|E| edges):
- 2 vertices:
|V|distinct symbol,\log |V|bits per symbol - 1 capacity:
\log C
Size of graph:
O(|E|(|V| + \log C))p( |E| , |V| , \log C)
Running time:
P( |E| , |V| , |C| )- Exponential if is exponential in
|V|+|E|
- Exponential if is exponential in
Pseudo-polynomial
Naïve Ford-Fulkerson is bad!
Problem ’s inputs contain some numerical values, say |W|. We need only log bits to store . If algorithms runs in p(W), then it is exponential, or pseudopolynomial.
In homework, you improved F-F to make it work in
p( |V| ,|E| , \log C), to make it a real polynomial algorithm.
Conclusion: Reductions
- Reduction
- Construction of mapping with runtime
- Bidirectional proof
- Efficient Reduction
L\leq p(K)- Which problem is harder?
- If
Lis hard, thenKis hard.\toUsed to show hardness - If
Kis easy, thenLis easy.\toUsed for design algorithms
- Canonical Decision Problem
- Reduction to and from the optimization problem
- Reduction for hardness
- Independent Set$leq p$ Vertex Cover
On class
Reduction: V^* = O(c^k)
OPT: Find max flow of at least one instance (G,s,t)
DEC: Is there a flow of size pK, given G,s,t \implies the instance is defined by the tuple (G,s,t,k)
Yes, if there exists one No, otherwise
Forget about F-F and assume that you have an oracle that solves the decision problem.
First solution (the naive solution): iterate over k = 1, 2, \dots until the oracle returns false and the last one returns true would be the max flow.
Time complexity: K\cdot X, where X is the time complexity of the oracle
Input size: poly(||V|,|E|, |E|log(max-capacity)), and V^* \leq \sum capacities
A better solution: do a binary search. If there is no upper bound, we use exponential binary search instead. Then,
\begin{aligned}
log(V^*) &\leq X\cdot log(\sum capacities)\\
&\leq X\cdot log(|E|\cdot maxCapacity)\\
&\leq X\cdot (log(|E| + log(maxCapacity)))
\end{aligned}
As \log(maxCapacity) is linear in the size of the input, the running time is polynomial to the solution of the original problem.
Assume that ISET is a hard problem, i.e. we don't know of any polynomial time solution. We want to show that vertex cover is also a hard problem here:
ISET \leq_{p} VC
- Given an instance of ISET, construct an instance of VC
- Show that the construction can be done in polynomial time
- Show that if the ISET instance is true than the CV instance is true
- Show that if the VC instance is true then the ISET instance is true.
ISET: given
(G,K), is there a set of vertices that do not share edges of sizeK
VC: given(G,K), is there a set of vertices that cover all edges of sizeK
- Given
l: (G,K)being an instance of ISET, we construct\phi(l): (G',K')as an instance of VC.\phi(l): (G, |V|-K), \textup{i.e., } G' = G \cup K' = |V| - K - It is obvious that it is a polynomial time construction since copying the graph is linear, in the size of the graph and the subtraction of integers is constant time.
Direction 1: ISET of size k \implies VC of size |V| - K Assume that ISET(G,K) returns true, show that VC(G, |V|-K) returns true
Let S be an independent set of size K and C = V-S
We claim that C is a vertex cover of size |V|-K
Proof:
We proceed by contradiction. Assume that C is NOT a vertex cover, and it means that there is an edge (u,v) such that u\notin c , v\notin C. And it implies that u\in S , v\in S, which contradicts with the assumption that S is an independent set.
Therefore, c is an vertex cover
Direction 2: VC of size |V|-K \implies ISET of size K
Let C be a vertex cover of size |V|-K , let s = |v| - c
We claim that S is an independent set of size K.
Again, assume, for the sake of contradiction, that S is not an independent set. And we get
\exists (u,v) \textup{such that } u\in S, v \in S
u,v \notin C
C \textup{ is not a vertex cover}
And this is a contradiction with our assumption.