Csci 231: The Design and Analysis of Algorithms
Fall 2008: Tue, Thu 2:30 - 3:55 in Searles 126
This course is an introduction to the design and analysis of
algorithms, building on the concepts from Data Structures (csci
- It introduces a variety of fundamental problems like searching,
sorting and selection, graphs and optimization.
- It discusses a variery of solutions to these problems, while
illustrating design techniques such as divide-and-conquer, dynamic
programming, greedy approach.
- It discusses methods for proving correctness and analysing the
efficiency of these solutions.
It is a theoretical class, and involves no programming.
Prerequisites: Csci 210 and (Csci 189
or Math 200 or permission of instructor)
Instructor: Laura Toma
Office: 219 Searles Hall
Email: ltoma at bowdoin
Office hours: Tue, Wed, Thu 4-5pm (after class).
In addition to the official office hours, you can drop by for a
quick question any time I am in the office. Or, just send me an
email to setup a (different) time.
I often work late evenings and I may be in the office the evening
before homework is due, but do not take it for granted and do not rely
on it. When I work late, you are very welcome to drop by and ask
questions or chat.
http://www.bowdoin.edu/~ltoma/teaching/cs231/fall08/. Note that
this is a link from my personal website at Bowdoin. This site will
contain all class-related material along the semester. The class does
not have a Blackboard site.
- Mathematical foundation (growth of functions, summations, recurrences)
- Sorting algorithms (insertion sort, mergesort, quicksort, heapsort, bucket sort, radix sort)
- Searching and data structures (binary search trees, red-black trees, augmented search trees, skip lists)
- Priority queues (binary heap)
- Amortized Analysis (splay trees)
- Paradigms (divide-and-conquer, greedy, dynamic programming)
- Graph Algorithms (traversal, minimum spanning tree, shortest paths)
Cormen, Leiserson, Rivest and Stein,
Introduction to Algorithms, 2nd Edition, McGraw Hill, New York, 1990. (bugs).
Other good reference books include:
- Kleinberg and Tardos, Algorithms.
- Skienna, The algorithm design manual.
I find that 'class participation' has become too much of a cliche, so
I am not including it in the list above. Have you seen a class where
participation is not encouraged, and does not count? This class is not
- Homework assignments (approx. 30%).
- Two in-class exams (20% each) and a final exam (30%).
Homework assignments will be
made available online as the semester progresses. They will usualy be
due one week after they are assigned, and solutions will be handed out
the day the homework is due. Because of this no credit is given for
homework received late. For special situations contact me in advance.
- Write your name on each sheet.
- Write the solutions in the space provided.
- Collaboration is allowed, even encouraged, provided that
it helps you study better. Don't overdo it, and remember
that exams are individual! Even if you collaborate with others, you
must write up the solutions individually, and list
the names of the collaborators.
- Homework should be submitted at the beginning
of class on the due date.
- It is a good experience to try typing the solutions, at least to
some problems, given that it will motivate you to be concise and
clear. If it does not, I prefer handwriting.