**Professor:** Laura Toma
**Office:** Searles 219
**Contact:** ltoma at bowdoin dot edu, (207) - 725 - 3569

**Prerequisites**: csci 101 (Intro to CS) and csci
2101 (Data Structures). Generally speaking, a good mathematical
background and good QR skills are not required, but are helpful.

**Textbook (required):** Cormen, Leiserson, Rivest and
Stein, Introduction
to Algorithms, 3rd Edition, McGraw Hill, New York, 1990. (bugs).

**Class webpage:**
*http://www.bowdoin.edu/~ltoma/teaching/cs231/fall14/*. 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 (I believe class information and materials
shoud be public, not hidden behind logins).

**Schedule:** For useful links and detailed class schedule, check Syllabus.

Course goals:

- To be able to analyze the asymptotic performance of algorithms using big-oh and big-theta notation
- To be able to compare multiple algorithms for a problem and predict performance
- To be able to argue informally that an algorithm is correct
- To be familiar with the fundamental algorithms and data structures
- To be familiar with the major design paradigms
- To be able to apply these techniques to new problems

- To get an appreciation of algorithms and an understanding of their importance and impact in Computer Science and beyond
- To improve problem solving skills and power of abstraction
- To develop a database of algorithms and techniques which you'll use as building blocks to solve new problems

For quick questions you can drop by any time the door is open. If you cannot come during these times, send me an email to make an appointment. For specific questions on the assigments, I encourage you to talk to the TAs first and attend at least one of the study groups. They hold study groups for YOU!

**TAs:** Andrew Daniels, Anthony Todesco

**Study groups:**

- Sundays 8-10pm (Anthony), Tuesdays 8-10pm (Andrew) in 224

**Exams:** There will be two exams, one half-way
through the semester (precise date TBD), and the second one during the
final exam period. The exams will be take-home, open book and open
notes, and non-cumulative.

**Homework collaboration policy:** You are encouraged
to work on problems in a group. You will find that you will gain a
better understanding of the material by discussing the problems with
your partners. However, you must write up the solutions
**individually**. Limit your collaborators to three or
less, and list the names of the collaborators on the homework.

**Grading policy:** The final grade is determined as
follows:

- Homework assignments (40%).
- 2 exams (2 x 30 = 60%).
- Class participation (5%)

- Mathematical foundation (growth of functions, summations, recurrences, induction)
- Sorting algorithms (insertion sort, selection sort, mergesort, quicksort, heapsort, sorting lower bounds, bucket sort, radix sort)
- Searching and data structures (binary search trees, red-black trees, augmented search trees, skip lists)
- Priority queues (binary heap)
- Selection
- Paradigms (divide-and-conquer, greedy, dynamic programming)
- Graph Algorithms (traversal, minimum spanning trees, shortest paths)
- Network algorithms (network flow)
- String matching algorithms
- NP-completeness