Algorithm Analysis

Friday, November 17: Knapsack
  • No new assignments
Wednesday, November 15: Edit distance Monday, November 13: Dynamic programming
  • No new assignments
Friday, November 10: Huffman coding
  • Assignment: HW9
Wednesday, November 8: Greedy algorithms Monday, November 6: Proofs
  • No new assignments
Friday, November 3: Exam
  • No new assignments
Wednesday, November 1: Review
  • Study for the exam
Monday, October 30: Components
  • No new assignments
Friday, October 27: Topological sorting Wednesday, October 25: Directed graphs
  • Assignment: HW8
Monday, October 23: Spanning trees Friday, October 20: Cheapest paths
  • No new assignments
Wednesday, October 18: Weighted graphs
  • Assignment: HW7
Monday, October 16: Problem stations Wednesday, October 11: Shortest paths Monday, October 9: Graph search
  • Assignment: HW6
Friday, October 6: Python
  • No new assignments
Wednesday, October 4: Graphs
  • Assignment: HW5
Monday, October 2: Exam
  • No new assignments
Friday, September 29: Review
  • Study for the exam
Wednesday, September 27: Heaps Monday, September 25: Hash tables
  • Assignment: HW4
Friday, September 22: Memory allocation
  • No new assignments
Wednesday, September 20: Dynamic arrays Monday, September 18: Problem stations
  • Assignment: HW3
Friday, September 15: Recursive running times Wednesday, September 13: Fast sorting
  • No new assignments
Monday, September 11: Binary search
  • Assignment: HW2
Friday, September 8: Pointers Wednesday, September 6: Simple sorting
  • No new assignments
Monday, September 4: Fibonacci
  • Assignment: HW1
Friday, September 1: Setup
  • No new assignments
Wednesday, August 30: Introduction
Course overview

Algorithms are the core of computer science. They are problem-solving strategies, the ideas behind programs, which remain relevant even as programming languages evolve. This is a topic of some importance, because a good algorithm might take a few seconds to solve a problem that otherwise would have taken the lifetime of the universe. In this course, you will learn to:

  • Identify common types of problems
  • Apply good algorithms to solve problems
  • Analyze the complexity and correctness of algorithms

The main goal of this course is to provide you with a toolbox for approaching a wide range of computational problems that you are likely to encounter. It will be a mix of theory and practice: we will write algorithms in pseudocode and analyze them with logic and mathematics, and we will also implement them in several programming languages.


Math 280 and CS 256. This course assumes that you have a solid mathematical background and some experience with common data structures.


The Algorithm Design Manual, 2nd Edition by Skiena. I will assign reading regularly from this text and from supplementary online sources. This text may also be useful to you later as a general reference and a resource for job interviews.

Office hours

My office hours this semester are 2-4pm Mon/Wed/Fri. If you have other commitments during those times, we can make other arrangements.


If your learning or participation in this course may be affected by a disability or any other factor, please talk to me early in the semester so that we can arrange appropriate accommodations. I will do my best to ensure that everyone can learn effectively.


Being in class will be crucial for your learning in this course. Absences will leave holes in your understanding of course concepts. If you must miss a class, you are expected to work to get caught up before the next class.

Graded work

Your final grade will be a weighted average of exams (50%), homework (40%), and reading responses (10%). This table shows how averages translate to the 4-point scale. Please note that I do set a high bar for a 4.0 and this course does not have extra credit.

Academic integrity

It is important to me that you conduct your work in this course with academic integrity. That means abiding by the specific policies outlined here, as well as the general guidelines in the Student Handbook. It is my responsibility to report violations of these policies to the Dean.


Problem sets will be assigned weekly. Problems may involve writing and analyzing pseudocode, implementing an algorithm in real code, or describing a problem and solution in prose.

  • Collaboration: You may confer with classmates as you work on the assignments, but you may only submit work that you have personally written and understood.

  • Resources: You may consult your class notes and the assigned reading; you may not copy from other people's work.

  • Citations: In each assignment, you are expected to cite anyone who helped you complete it. Help is not counted against you; it just needs to be acknowledged.

  • Extensions: You have 5 late days. Each one gives you a 24-hour extension on any assignment. Send me an email if you submit an assignment late and you want to use late days to have it accepted. Once you have used up all your late days, you can receive no credit for late homework, unless there are extraordinary circumstances.

There will be three exams, each covering about a third of the course, with written problems based on the homework. Expected dates are October 2, November 3, and December 20.


For each section of assigned reading, you will be asked to submit responses to some questions. The deadline for each response is the start of the first exam after it was assigned.


Things you might find useful:

We will use Sakai for homework submission and grade tracking.