CS580: Algorithm Design, Analysis, and Implementation - Fall 2002
Professor
Gopal Pandurangan
Office: CS 174
Office hours: Mon, Wed: 2-3pm or by appointment
Lectures
Tue, Thu: 1:30-2:45pm, room UNIV 103
Teaching Assistants
Youchan Yao (yaoy)
Office: MATH 403
Office hours: Mon, Wed 10-11:20am
About this course
Welcome to the world of algorithms!!
This is a graduate-level course on algorithms. The students are expected to have some knowledge of
algorithms (such as O-notation, sorting, searching, trees, basic graph algorithms), data structures (such as arrays, binary trees),
discrete mathematics (comfortable with basic math concepts - sets, graphs, trees, counting), and must have
a knowledge of programming. The official prerequisites are CS381 (Introduction to Algorithms) and CS483 (Introduction to Theory
of Computation).
Algorithms usually don't exist in a void. They are driven by applications.
Thus we will motivate topics by applications. This will highlight both the
the centrality of algorithms to computer science and the diversity of application areas.
We will also emphasize on techniques for designing and analyzing algorithms.
The importance of understanding the techniques is very essential: they invariably prove useful
when faced with the challenge of designing algorithms for new problems. One theme that will crop up
throughout the course is the use of randomness in designing (and analyzing) algorithms. Some of the
most simple and effective algorithms used today in practice employ randomness or make some assumptions
on the input distribution. This is an exciting aspect of modern algorithmics and will be specially emphasized.
For the most part we will be interested in designing efficient algorithms (read polynomial time in a "reasonable" model
of computation - a uniprocessor RAM). However, it turns out that many important problems that arise in practice
may not have efficient algorithms. This will lead us to the theory of NP-completeness and to ways of getting
around the inherent hardness of these problems.
I expect to cover the following topics:
1) Basics: Asymptotic notation, Recurrences, Probability theory
2) Sorting: Randomized Quicksort, Lower bounds, linear-time sorting
3) Selection: randomized and worst-case analysis
4) Hashing: Hash tables, Universal Hashing
5) Dynamic Programming: matrix multiplication, sequence alignment
6) Amortized analysis: techniques, Splay trees
7) Disjoint-set data structures
8) Network Algorithms: shortest paths, Max Flow
9) NP-completeness
10) Approximation algorithms
11) Probabilistic algorithms
12) Number-theoretic algorithms
Textbook
Introduction to Algorithms, second edition,
Thomas H. Cormen,
Charles E. Leiserson,
Ronald L. Rivest,
and Clifford Stein, MIT Press, 2001, ISBN 0-262-03293-7.
Please note that this is the new second edition!
Book home page;
errata list;
Other references:
Data Structures and Algorithms in C++ by M.A. Weiss.
Randomized Algorithms by Raghavan and Motwani.
Introduction to Computational Molecular Biology by Setubal and Meidanis.
You might find this theoretical computer science cheat sheet (S. Seiden,
SIGACT News, 27(4):52-61, 1996) to be very useful for algorithmic analysis.PS or PDF.
Grading
There will be homework assignments every other week. (The assignments have to be done in Latex.
If you are not familiar with Latex please learn as soon as possible. This is quite easy: there are tutorials on the
Web and we will also provide you with a template file to get started.) Assignments will be non-collaborative i.e.,
you should work independently and can consult only me, or the TA'S. You should refer only to the textbook, class notes,
and any handouts given in class. Cheating on the non-collaborative policy of the assignments or on the exams will be taken
seriously.
There will also be a "problem of the week" which will be given in class every week and whose solution
will be discussed the following week (in class). This is collaborative i.e., you can discuss with your friends
but the solution has to be written independently (no copying). Again violations will be taken seriously.
There will also be a midterm and a final (with a qualifying exam supplement). The split up is:
problems of the week: 10%
assignments: 30%
midterm:30%
final: 30%
Newsgroup
We plan to use the purdue.class.cs580 newsgroup ( on the server news.purdue.edu) for announcements and other postings.
You should subscribe to this newsgroup and check it regularly. Send all general questions (such as clarifications
regarding assignments etc.) to this newsgroup. Please do not send email to me for answering such questions.