COMP3010: Algorithm Theory and Design

Daniel Sutantyo, Department of Computing, Macquarie University

12.0 - Approximation Algorithms

Where are we?

12.0 - Approximation Algorithms

  • P vs NP
    • NP-hard
    • NP-complete (the one that matters the most)
  • Reduction
    • polynomial time reduction
    • we reduce an NP-complete problem into a problem to show that the problem is NP-hard (or NP-complete)
      • A \(\le_p\) B
      • A is an NP-complete problem
      • B is the problem we want to show to be NP-hard

Where are we?

12.0 - Approximation Algorithms

  • Remember that we are not discussing P vs NP because we want to prove that  P = NP or that P \(\ne\) NP
  • Our main goal is to get you to recognise hard (i.e. NP) problems so that you do not spend time trying to find an efficient (i.e. polynomial-time) solution for it

Where are we?

12.0 - Approximation Algorithms

  • We use reduction to show that a problem is hard, by reducing an NP-complete problem to it
    • so now at least you can tell your boss that the problem is hard
    • but now what?

Where are we?

12.0 - Approximation Algorithms

  • Generally, you have three options:
    1. Give up
      • as in, use the exponential time algorithm to solve it (maybe the input size is small enough)
      • use branch-and-bound and/or dynamic programming
      • how often do you have the worst-case anyway?
    2. Consider only special cases 
      • e.g. 2-SAT vs 3-SAT, directed acyclic graph, Euler vs Hamiltonian cycle
    3. Use an approximation algorithm

Approximation Algorithms

12.0 - Approximation Algorithms

  • Suppose that you are working on an optimisation problem where each solution is a positive numerical value
    • a lot of optimisation problems are either maximisation or minimisation problems
      • travelling salesman: find the cheapest route
      • knapsack: find the maximum value of items you can carry
  • An approximation algorithm is an algorithm that may produce a solution that is suboptimal
    •  can it produce the optimal solution?
      • yes, sometimes

Approximation Ratio

12.0 - Approximation Algorithms

  • How do we know if an approximation algorithm is good or bad?
  • For any input of size \(n\):
    • let \(C\) be the solution produced by the approximation algorithm
    • let \(C^*\) be the optimal solution
  • The approximation ratio \(\rho(n)\) of an approximation algorithm is the ratio between \(C\) and \(C^*\)
    • if our problem is a maximisation problem, then \(0 \le C \le C^*\), and
      • \(C^*/C \le \rho(n)\)
    • if our problem is a minimisation problem, then \(0 \le C^* \le C\), and
      • \(C/C^* \le \rho(n)\)

Approximation Ratio

12.0 - Approximation Algorithms

  • For maximisation problems, \(C^*/C \le \rho(n)\)
    • the optimal solution is going to be at most \(\rho(n)\) times the solution of the approximation algorithm
  • For minimisation problems, \(C/C^* \le \rho(n)\)
    • the  solution to the approximation algorithm is going to be at most \(\rho(n)\) times the optimal solution

Approximation Ratio

12.0 - Approximation Algorithms

  • You can think of \(\rho(n)\) as a performance guarantee, that is, we guarantee that the result produced by our approximation algorithm is not going to be worse than a factor of \(\rho(n)\) compared to the optimal solution
  • We say that our approximation algorithm is a \(\rho(n)\)-approximation algorithm
     
  • For example, an \(n\)-approximation algorithm means that the result of our approximation algorithm is not going to be worse than \(n\) times the optimal solution (for a minimisation problem)
    • so if \(n =\) 100, and the optimal solution is 7, our answer is not going to be worse than 700
      • that is actually pretty horrific!

Approximation Ratio

12.0 - Approximation Algorithms

  • In this unit, we will consider only approximation algorithms with a constant \(\rho(n)\) and one that runs in polynomial time
    • e.g. a 2-approximation algorithm means that no matter what \(n\) is, our solution will be
      • no more than twice the optimal solution (for minimisation problems) or
      • no less than half the optimal solution (for maximisation problems)
    • in this case, we can drop the \(n\), and say it is a \(\rho\)-approximation algorithm
  • What do you think a 1-approximation algorithm is?

Approximation Algorithms vs Heuristics vs Probabilistic 

12.0 - Approximation Algorithms

  • How is approximation algorithms different to heuristics and probabilistic algorithms
    • ​heuristics: gut-feeling, intuition
      • "I cannot prove that this works, but somehow it does most of the time"
    • all three are similar, trade off accuracy for performance, but
      • probabilistic algorithm: it is probabilistic, there is a random element in the algorithm
      • heuristics: no performance guarantee

Approximation Schemes

12.0 - Approximation Algorithms

  • CLRS also mentions polynomial-time approximation scheme where in addition to the input to the problem, we also take a constant \(\epsilon > 0\)
    • for any fixed \(\epsilon\), the scheme is a \((1+\epsilon)\)-approximation scheme that runs in polynomial time in the size of \(n\) (the size of the input)
    • for example, the running time can be \(O(n^{2/\epsilon})\)
      • so as you get more precise, the running time gets worse
      • you can think of it as a customisable approximation algorithm, as in, we get to choose how good of an approximation we get
  • You don't have worry about this

What do you need to know?

12.0 - Approximation Algorithms

  • Approximation algorithm:
    • runs in polynomial time
    • has a performance guarantee (the approximation ratio \(\rho\))
    • the topic is hard because every approximation algorithm is different, depending on the problem
      • what I expect from you is to be able to understand how an approximation algorithm works, and then work out its approximation ratio
      • showing the approximation ratio is the hard part of this topic
    • the topic is easy because, well, the approximation algorithms we're going to see are simple

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Remember that the decision version is NP-complete and the optimisation version is NP-hard

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Remember that the decision version is NP-complete and the optimisation version is NP-hard

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Remember that the decision version is NP-complete and the optimisation version is NP-hard

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Remember that the decision version is NP-complete and the optimisation version is NP-hard

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Here is a 2-approximation algorithm, given a graph \(G\langle V,E \rangle\):
    • let \(E^\prime = E\), \(C = \{\}\)
    • while \(E^\prime\) is nonempty:
      • pick an edge \((u,v)\) from \(E^\prime\) and add \(u\) and \(v\) to \(C\)
      • remove any edge in \(E^\prime\) that is connected to either \(u\) or \(v\)
    • return C

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

\(C = \{b,c,d,e,f,g\}\)

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

a

b

e

c

d

f

g

\(C = \{b,c,d,e,f,g\}\)

a

b

e

c

d

f

g

\(C^* = \{b,e,d\}\)

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • It is a very simple algorithm, but it comes with a performance guarantee, and this is the hard part of this topic
  • We can show that this approximation algorithm is a 2-approximation algorithm, meaning that the solution it produces will not be worse than 2 times the optimal solution (since it is a minimisation problem)

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Proof:
    • does it run in polynomial time?
      • each iteration, we pick one edge, and then add the vertices to the set \(C\), and since we can add at most \(V\) vertices, this is \(O(V)\)
      • each iteration, we have to remove the edges connected to \(u\) and \(v\), so at most this is \(O(E)\)
      • complexity is \(O(E^2 + V\)
        • or \(O(E\log E + V)\) if you use some sort of priority queue
        • or \(O(E + V)\) if you use an adjacency matrix
        • the point is, it is polynomial in complexity

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Proof:
    • does it return a correct answer?
      • yes, we remove an edge from consideration only if it is already covered by the vertices in \(C\), so at the termination of the algorithm, since \(E^\prime\) is empty, we have covered every single edge with the vertices in \(C\)

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Proof:
    • what is the approximation ratio?
      • claim that it is a 2-approximation algorithm
      • let \(A\) be the set of edges that we pick:
        • if we want to cover the edges in this set, how many vertices do we need?

a

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Proof:
    • what is the approximation ratio?
      • claim that it is a 2-approximation algorithm
      • let \(A\) be the set of edges that we pick:
        • if we want to cover the edges in this set, how many vertices do we need?
        • each vertex only occurs once, so a vertex cover for
          the edges in \(A\) must have at least \(|A|\) vertices
        • \(|A|\) is the lower bound for the size of the minimum
          vertex cover, that is
          ​                                       \(|C^*| \ge |A|\)

b

e

c

d

f

g

Example: Minimum Vertex Cover

12.0 - Approximation Algorithms

  • Proof:
    • so far we have \(|C^*| \ge |A|\)
    • now what can you say about \(|C|\)?
      • when we terminate the algorithm, how many vertices do we have in \(C\)?
        • each edge in \(A\) corresponds to two vertices,
          so \(C\) will have exactly \(2 * |A|\) vertices
    • put the two together
      • \[\begin{aligned}|C| &= 2 * |A|\\ &\le 2 *|C^*| \end{aligned}\]
      • so, at worst, we will have twice as many vertices than the
        optimal answer

b

e

c

d

f

g

How To Prove It

12.0 - Approximation Algorithms

  • The proof technique is the standard method to show that an algorithm is a \(\rho\)-approximation algorithm
  • The idea is to tie in the lower bound for the optimal solution to the result of the approximation algorithm (for a minimisation problem)
    • e.g.
      • the optimal solution must use at least or at most \(k\) of something (assume the lowest/highest possible)
        • \(C^* \ge k\) or \(C^* \le k\)
      • the approximation algorithm solution uses exactly \(2*k\) or \(k/2\) of the same resource
        • \(C = 2k \le 2 * C^*\)     or     \(C = k/2 \ge C^*/2 \rightarrow 2*C \ge C^* \)

How To Prove It

12.0 - Approximation Algorithms

  • Notice something important here:
    • you don't need to know what the optimal solution is, just the lower bound for it (or the upper bound, for a minimisation problem)

Summary

12.0 - Approximation Algorithms

  • \(\rho\)-approximation algorithm
  • What is going to be assessed:
    • you will be given an NP problem and an approximation algorithm for the problem
    • you need to show that the approximation algorithm is a \(\rho\)-approximation algorithm using the steps described in the example
  • We are going to do a bit more of this in the workshop, but really, that is all we're going to do in this topic, so the concept is easy, the execution is the harder part. 

COMP3010 - 12.0 - Approximation Algorithm

By Daniel Sutantyo

COMP3010 - 12.0 - Approximation Algorithm

  • 153