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/
- Lectures: Tuesday and Thursday, 12:30pm-1:50pm, Ryan Auditorium, in Technological Institute.
- Instructor: Thursday, 2:30pm-3:30pm, Ford 2.207.
- TAs: Tuesday, 5pm-6pm, and Wednesday, 4pm-6pm, Tech M349.
- Algorithm Design by Jon Kleinberg and Éva Tardos.
- Final: 35%
- Midterm: 15%
- Homework: 50%
All homework assignments must be submitted by 11:59pm on the due date. Please, turn in your solutions in the PDF format using Canvas.
- Tuesday, January 9: Sample Problem Set #0.
- Thursday, January 11: Problem Set #1 due Thursday, January 18.
- Thursday, January 18: Problem Set #2 due Thursday, January 25.
- Thursday, January 25: Problem Set #3 due Thursday, February 1.
- Thursday, February 1: Problem Set #4 due Thursday, February 8.
- Thursday, February 8: Problem Set #5 due Thursday, February 15.
- Thursday, February 15: No homework assignment. Sample problems to prepare for Midterm.
- Thursday, February 22: Problem Set #6 due Thursday, March 1.
- Thursday, March 1: Problem Set #7 due Thursday, March 8.
- Thursday, March 8: Problem Set #8 due Thursday, March 15.
- 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.
- Tuesday, January 9: Introduction. Diffie-Hellman.
- Thursday, January 11: Greedy algorithms 1. Prim's and Kruskal's algorithms for MST. (Chapter 4.5)
- Tuesday, January 16: Greedy algorithms 2. Interval scheduling on one and many machines. (Chapter 4.1)
- Thursday, January 18: Greedy algorithms 3. Sum of Weighted Completion Times.
- Tuesday, January 23: Greedy algorithms 4. Huffman Coding.
- Thursday, January 25: Dynamic programming 1. Independent Set on Trees.
- Tuesday, January 30: Dynamic programming 2. Typographic Alignment. Weighted Interval Scheduling.
- Thursday, February 1: Dynamic programming 3. Knapsack. RNA Secondary Structures.
- Tuesday, February 6: Dynamic programming 4. Longest increasing subsequence. Longest common subsequence. Minimum edit distance. Minimum Bisection.
- Thursday, February 8: String algorithms. Knuth–Morris–Pratt algorithm. Rabin–Karp algorithm. Suffix trees.
- Tuesday, February 13: Divide and conquer algorithms. Merge sort. Fast multiplication. Finding closest points on the plain.
- Thursday, February 15: Sweep line algorithms.
- Tuesday, February 20: Midterm
- Thursday, February 22: Network flow 1.
- Tuesday, February 27: Network flow 2.
- Thursday, March 1: NP-hardness 1.
- Tuesday, March 6: NP-hardness 2.
- Thursday, March 8: Approximation algorithms.
- Tuesday, March 13: Linear and integer programming.
- Thursday, March 15: TBD
- Monday, March 19: Final Exam.