**Required Textbook:** Kleinberg and Tardos, Algorithm Design, 2005.

**Current Term:** Spring 2019.

**Previous Terms:** Fall 2017, Spring 2017, Fall 2015.

**Synopsis:**

Algorithm design and analysis is fundamental to all areas of computer science and gives a rigorous framework for the study optimization. This course provides an introduction to algorithm design through a survey of the common algorithm design paradigms of greedy optimization, divide and conquer, dynamic programming, network flows, reductions, and randomized algorithms. Important themes that will be developed in the course include the algorithmic abstraction-design-analysis process and computational tractability (e.g., NP-completeness).

**Prerequisites.** EECS 212 (Mathematical Foundations of Computer Science) and EECS 214 (Data Structures and Data Management) which cover abstract data types such as stacks, queues, and binary search trees; and discrete mathematics such as recurrence relations, sets, and graphs.

**Tentative Schedule:**

Week 1:

- Course overview: computing Fibonacci numbers.
- Philosophy of algorithms, review of runtime analysis. (Chapters 2 and 3)

Week 2:

- Dynamic programming: memoization, weighted interval scheduling (Chapter 6)
- Dynamic programming: integer knapsack, uniform pricing

Week 3:

- Dynamic Programming: Shortest Paths (with negative edge weights; Chapter 6)
- Dynamic Programming: interval pricing (Chapter 6)

Week 4:

- Reductions: Network flow, Bipartite Matching (Chapter 7)
- Network flow. (Chapter 7)

Week 5:

- NP and intractability: NP, polynomial time reductions decision problems. (Chapter 8)
- Midterm: Dynamic Programming.

Week 6:

- NP and intractability: NP, 3-SAT, Independent Set (Chapter 8)
- NP and intractability: Independent Set, Hamiltonian Cycle (Chapter 8)

Week 7:

- NP and intractability: NP, CIRCUIT-SAT, LE3-SAT (Chapter 8)
- NP and intractability: LE3-SAT, 3-SAT

Week 8:

- Greedy algorithms: interval scheduling. (Chapter 4)
- Greedy algorithms: minimum spanning trees, matroids. (Chapter 4)

Week 9:

- Approximation algorithms: TSP, metric TSP, knapsack (Chapter 11)
- Midterm: NP and intractability.

Week 10:

- Approximation algorithms: knapsack PTAS (Chapter 11)
- Online Algorithms: Ski Renter, Secretary