Required Text: Kleinberg and Tardos, Algorithm Design, Addison-Wesley, 2005. [order from]alt
Lectures: Tuesday and Thursday 2:00-3:20 in Tech M128.
Instructor: Jason D. Hartline.
Office Hours: Wednesday 1:00-1:50, or by appointment; Ford 3-329.

Teaching Assistant: Darrell Hoy
Problem Session: Monday, 4:00-5:30, Tech LG76.
Office Hours: Tuesday, 5:00-6:00, Ford 3-340.


  • Midterm is Tuesday, Oct. 25, in class. One handwritten "cheat sheet" allowed. Covers through dynamic programming.
  • Final is Thursday, Dec. 1, in class. One handwritten "cheat sheet" allowed. Covers everything.
  • Review session is Wednesday, Nov. 30, 5pm, Tech LG62.

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 (e.g., NP-completeness).

Prerequisites. EECS 310 (Mathematical Foundations of Computer Science) and EECS 311 (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.

Grading. 60% Problem sets, 15% Midterm, 25% Final, 3% classroom participation (bonus).

Homework Policy. Homeworks may be done in pairs. Both students must contribute to the solution of all problems. One copy of the assignment should be turned in with the names of both students on it. Both students will receive the same grade. You may consult your text book and course notes when answering homework questions; you must not consult the Internet. Homeworks are assigned in class and due at the beginning of class on Thursday the week after (or as noted). Late homework will be accepted until Monday 5pm (in section) and will be marked down by 25% of the grade received.

Tentative Schedule:

  • Sept. 20: Course overview: computing Fibonacci numbers. (Chapter 1)
  • Sept. 22: Review of runtime analysis, graphs, and basic graph algorithms. (Chapters 2 and 3)
  • Sept. 27: Greedy algorithms: interval scheduling. (Chapter 4)
  • Sept. 29: Greedy algorithms: minimum spanning trees, matroids. (Chapter 4, Matroid Notes)
  • Oct. 4: Greedy algorithms: shortest paths, MSTs. (Chapter 4)
  • Oct. 6: Divide and conquer: merge sort, recurrence relations, public key cryptography, repeated squaring (Chapter 5)
  • Oct. 11: Divide and conquer: integer multiply, convolution, fast Fourier transform (Chapter 5)
  • Oct. 13: Dynamic programming: memoization, weighted interval scheduling, integer knapsack (Chapter 6)
  • Oct. 18: Dynamic programming: all pairs shortest paths (Chapter 6)
  • Oct. 20: Reductions, Network flow, Bipartite Matching (Chapter 7)
  • Oct. 25: MIDTERM.
  • Oct. 27: Network flow. (Chapter 7)
  • Nov. 1: NP and intractability: NP, polynomial time reductions decision problems. (Chapter 8)
  • Nov. 3: NP and intractability: NP, circuit sat (Chapter 8)
  • Nov. 8: NP and intractability: circuit sat, 3-sat (Chapter 8)
  • Nov. 10: NP and intractability: independent set, vertex cover, hamiltonian cycle, TSP.
  • Nov. 15: Approximation algorithms: TSP, metric TSP, knapsack (Chapter 11)
  • Nov. 17: Approximation algorithms: pseudo polynomial time, PTAS, knapsack (Chapter 11)
  • Nov. 22: Online algorithms: ski-renter, secretary.
  • Nov. 29: TBA.
  • Dec. 1: FINAL (cumulative).