Design and Analysis of Algorithms
Spring 2001

Course Information

CS161 covers in depth fundamental data structures and techniques for algorithm design and analysis. Specific topics to be covered include:

  • Algorithm analysis: worst and average case
  • Recurrences and asymptotic behavior
  • Algorithms for sorting and selection
  • Randomized techniques
  • Search structures: heaps, balanced trees, hash tables
  • Dynamic programming and greedy algorithms
  • Amortized analysis
  • Graph algorithms: breadth- and depth-first search, MSTs, shortest paths
  • Network flow

The official prerequisites for this course are CS 103 and Stat 116. If you have not taken Stat 116 or its equivalent, you should expect to do some independent reading during the course on topics including probability, random variables, expectation, and basic combinatorics.


The required text is Cormen, Leiserson, and Rivest, Introduction to Algorithms, MIT Press, 1990 (CLR). (Around $70 in the bookstore.)

There are two optional readings on order at the bookstore, as well. Data Structures and Algorithms by Aho, Hopcroft, and Ullman is a classic text, somewhat smaller in scope than CLR but sometimes clearer. Algorithms in C++ by Sedgewick deals more with practical implementation issues, and may be of use for the class project.

Copies of in-class handouts, such as homework assignments and problem set solutions, will be posted on the class web page.


Students may use their own computers or their Stanford Leland accounts. Materials for the class project will be made available via AFS. Network and web access will be required. Leland disk quotas will be raised by 10MB and a 100 page print quota for the Sweet Hall machines will be given to students registered for the class.


The requirements for the course will be five weekly written assignments, a programming project, an in-class midterm exam, and an in-class final exam. Grading will be based primarily on the written assignments (30%), the project (20%), midterm (20%) and the final (30%), with class participation possibly being factored in for borderline cases.

Each homework will be due at the beginning of the class one week after it is distributed. Each student has a total of 48 hours extension that can be used throughout the quarter. These 48 hours can be used in chunks of 12 hours. Once the 48 hours are exhausted, homework will not be accepted, unless prior arrangements have been made with the instructor. In no cases will homework be accepted after solution sets have been distributed.

One of the aims of this class is to teach you to reason about algorithms, describe them, and formally prove claims about them. In writing up your assignments, be as clear, precise, and concise as you can. Understandability will be an important factor in the grading of these assignments.

You are permitted and encouraged to work in groups of up to three students when discussing the homework assignments. If you do collaborate, however, you must still write up the solutions individually and clearly acknowledge anyone with whom you have discussed the problems. It will be considered an honor code violation to consult previous years' solutions in the event that homework problems have been previously assigned.

For the programming project you are encouraged to work in groups of  three.


Class announcements, assignment clarifications, etc., will be posted to the web site. Please make sure to visit it frequently !

Questions about assignments, the project, and so on should be directed to  E-mail sent to this address will reach the entire course staff and will likely be answered more promptly.

Class handouts, including homeworks, but NOT including solution sets, will be made available electronically at the class web site.

The su.class.cs161 newsgroup is available for students to interact, such as finding partners for projects.

CS161 Spring 2001
Dan Boneh