## Approximation Algorithms Coursera Online Course Overview

Many real-world algorithmic problems cannot be solved efficiently using traditional algorithmic tools, for example, because the problems are NP-hard. The goal of this course is to become familiar with important algorithmic concepts and techniques needed to effectively deal with such problems. These techniques apply when we don’t require the optimal solution to certain problems, but an approximation that is close to the optimal solution. We will see how to efficiently find such approximations.

### Prerequisites

In order to successfully take this course, you should already have a basic knowledge of algorithms and mathematics. Here’s a short list of what you are supposed to know:

- O-notation, Ω-notation, Θ-notation; how to analyze algorithms
- Basic calculus: manipulating summations, solving recurrences, working with logarithms, etc.
- Basic probability theory: events, probability distributions, random variables, expected values etc.
- Basic data structures: linked lists, stacks, queues, heaps
- (Balanced) binary search trees
- Basic sorting algorithms, for example, MergeSort, InsertionSort, QuickSort
- Graph terminology, representations of graphs (adjacency lists and adjacency matrix), basic graph algorithms (BFS, DFS, topological sort, shortest paths)

## Syllabus

### WEEK 1 – Introduction to Approximation algorithms

In the module, the motivation for studying approximation algorithms will be given. We will discuss what optimization problems are, and what the difference between heuristics and approximation algorithms is. Finally, we will introduce the concept of approximation ratio, which plays a central role in the analysis of the quality of approximation algorithms.

### WEEK 2 – The Load Balancing problem

In this module, we will study various approximation algorithms for the load balancing problem. This problem asks to distribute a given set of jobs, each with a certain processing time, over a number of machines. The goal is to do this such that all jobs are finished as soon as possible. We will analyze the quality of the computed solutions computed using the concept of rho-approximation, which we saw in the previous lecture. In this analysis, we will see that lower bounds on the optimal solution play a crucial role in the analysis (or, for maximization problems: upper bounds).

### WEEK 3 – LP Relaxation

In this module, we will introduce the technique of LP relaxation to design approximation algorithms, and explain how to analyze the approximation ratio of an algorithm based on LP relaxation. We will do this using the (weighted) Vertex Cover problem as an example. Before we explain the technique of LP relaxation, however, we first give a simple 2-approximation algorithm for the unweighted Vertex Cover problem.

### WEEK 4 – Polynomial-time approximation schemes

In this module, we will introduce the concept of the Polynomial-Time Approximation Scheme (PTAS), which are algorithms that can get arbitrarily close to an optimal solution. We describe a general technique to design PTASs and apply it to the famous Knapsack problem. Finally, we will see how to analyze PTASs that are designed with the general technique.

## Instructor

- Mark de Berg

## Reviews

There are no reviews yet.