CS
256

Computer Science 256 - Algorithm Design and Analysis

Brent Heeringa
Office: Thompson Chemistry Laboratory 309
Office Hours: Mondays and Wednesdays 10.00-11.00 (and whenever the door is open or you happen to run into me)
Phone: 413.597.4711
Teaching Assistant: Chigozirim (Prosper) Nwankpa
TA Office Hours: 20.30-22.30 on Wednesdays in TCL 312 (Unix Lab)

Course Description: From the catalog:

This course is concerned with investigating methods of designing efficient and reliable algorithms. By carefully analyzing the underlying structure of the problem to be solved it is often possible to dramatically decrease the computational resources needed to find a solution. Through such analysis one can also verify that an algorithm will perform correctly, as well as accurately estimate its running time and space requirements. We will present several algorithm design strategies that build on data structures and programming techniques introduced in Computer Science 136, including induction, divide-and-conquer, dynamic programming, and greedy algorithms. Particular topics to be considered will include algorithms in graph theory, computational geometry, string processing, and advanced data structures. In addition, an introduction to complexity theory and the complexity classes P and NP will be provided.

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.

[ home | room and time and text | grading | lectures | assignments | ephemera ]


Announcements: