EECS 336: Design and Analysis of Algorithms — Winter 2018

Overview: 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.

Instructor: Konstantin Makarychev.
TAs: Xunru Che, Richard Huang, Brian Margolis, Ruohong Zhang, Timothy Zhou.
Prerequisites: EECS 212 and EECS 214 for undergraduate students.
Web page: https://users.eecs.northwestern.edu/~kostya/eecs336/
Canvas: https://canvas.northwestern.edu/courses/67255/
Piazza: https://piazza.com/northwestern/winter2018/eecs336

Schedule

Required texts

Grading

Homework Assignments

All homework assignments must be submitted by 11:59pm on the due date. Please, turn in your solutions in the PDF format using Canvas.

  1. Tuesday, January 9: Sample Problem Set #0.
  2. Thursday, January 11: Problem Set #1 due Thursday, January 18.
  3. Thursday, January 18: Problem Set #2 due Thursday, January 25.
  4. Thursday, January 25: Problem Set #3 due Thursday, February 1.
  5. Thursday, February 1: Problem Set #4 due Thursday, February 8.
  6. Thursday, February 8: Problem Set #5 due Thursday, February 15.
  7. Thursday, February 15: No homework assignment. Sample problems to prepare for Midterm.
  8. Thursday, February 22: Problem Set #6 due Thursday, March 1.
  9. Thursday, March 1: Problem Set #7 due Thursday, March 8.
  10. Thursday, March 8: Problem Set #8 due Thursday, March 15.
  11. Thursday, March 15: No homework assignment. Sample problems to prepare for Final.

Lectures — Tentative Schedule

All references are to the textbook of Kleinberg and Tardos.

  1. Tuesday, January 9: Introduction. Diffie-Hellman.
  2. Thursday, January 11: Greedy algorithms 1. Prim's and Kruskal's algorithms for MST. (Chapter 4.5)
  3. Tuesday, January 16: Greedy algorithms 2. Interval scheduling on one and many machines. (Chapter 4.1)
  4. Thursday, January 18: Greedy algorithms 3. Sum of Weighted Completion Times.
  5. Tuesday, January 23: Greedy algorithms 4. Huffman Coding.
  6. Thursday, January 25: Dynamic programming 1. Independent Set on Trees.
  7. Tuesday, January 30: Dynamic programming 2. Typographic Alignment. Weighted Interval Scheduling.
  8. Thursday, February 1: Dynamic programming 3. Knapsack. RNA Secondary Structures.
  9. Tuesday, February 6: Dynamic programming 4. Longest increasing subsequence. Longest common subsequence. Minimum edit distance. Minimum Bisection.
  10. Thursday, February 8: String algorithms. Knuth–Morris–Pratt algorithm. Rabin–Karp algorithm. Suffix trees.
  11. Tuesday, February 13: Divide and conquer algorithms. Merge sort. Fast multiplication. Finding closest points on the plain.
  12. Thursday, February 15: Sweep line algorithms.
  13. Tuesday, February 20: Midterm
  14. Thursday, February 22: Network flow 1.
  15. Tuesday, February 27: Network flow 2.
  16. Thursday, March 1: NP-hardness 1.
  17. Tuesday, March 6: NP-hardness 2.
  18. Thursday, March 8: Approximation algorithms.
  19. Tuesday, March 13: Linear and integer programming.
  20. Thursday, March 15: TBD
  21. Monday, March 19: Final Exam.