Algorithm Design and Analysis :: CS 256 :: Spring 2008

announcements :: homework :: lectures

Contact Information

Professor: Brent Heeringa
Email: heeringa [at] cs [dot] williams [dot] edu
Office: Thompson Chemistry Laboratory 306
Phone: 413.597.4711

Course Information

Course Classroom: Thompson Chemistry 206
Course Time: 11.00 - 11.50
Office Hours: Mondays 20.30-22.00 and Thursdays 14.00-15.00
Teaching Assistants: Kyle Campbell and Jing Cao
Teaching Assistant Office Hours:Kyle: Monday 22.00-24.00 :: Jing: Tuesday 19.00-20.00 and 22.00-23.00
Course Text: Algorithm Design by Jon Kleinberg and Éva Tardos. The text is available at Water Street Books or online

Course Description

From the course catalog:

This course investigates methods for designing efficient and reliable algorithms. By carefully analyzing the structure of a problem within a mathematical framework, it is often possible to dramatically decrease the computational resources needed to find a solution. In addition, analysis provides a method for verifying the correctness of an algorithm and accurately estimating its running time and space requirements. We will study several algorithm design strategies that build on data structures and programming techniques introduced in Computer Science 136. These include induction, divide-and-conquer, dynamic programming, and greedy algorithms. Particular topics of study include graph theory, hashing, network flow, and advanced data structures.

We all have problems. This course is not only about finding solutions to the problems, but rather, good solutions--even provably good solutions. We begin by developing techniques for algorithm analysis--mathematical methods for putting bounds on time and space complexity. We'll study asymptotic analysis, recurrence relations, and some probability theory. Next, we'll delve into problem solving strategies like divide and conquer, randomization, and implicit data structures. We'll highlight these techniques with specific sorting algorithms including mergesort, quicksort, and heapsort. Now that we've got some practice solving problems and analyzing our solutions, we'll try our hand at some algorithms on advanced data structures like graphs and balanced trees. Probing further we'll learn some advanced algorithm design techniques like dynamic programming, linear programming, and maybe even fast Fourier transforms. Finally, we'll look at a set of problems for which no known polynomial time solutions exist. We'll talk about ways of identifying these seemingly different problems, and proving that they are all, in some way, intimately related.

Course Grading

Ten homework assignments each worth 5% of your grade. I'll drop the lowest score expecting this covers all extenuating circumstances such as illness and natural disasters. Six pop quizzes (lowest score dropped) each contributing 1% to your grade; 5% for class participation; a take-home midterm worth 25% of your grade and a 24-hour, cumulative final worth another 20% of your grade.

Some points of clarification: A few notes on the midterm:

Course Announcements

Course Lectures

The following lecture schedule is tentative. It may change based on current events, class interests and progress, and my own whims. Note that lecture notes are not available for download. This is on purpose. I very much want you to create your own set of notes from lecture and not rely on mine.

Course Homework

Course Links and Ephemera