This course is an introduction to the design and analysis of algorithms.

- It introduces the RAM model, asymptotic notation, worst-case analysis, and analysing the running time of recursive algorithms with recurrence relations.
- It introduces fundamental topics such as searching, sorting and selection, graphs, string matching, network flow, optimization and NP-completeness.
- It discusses solutions to these problems, while illustrating design techniques such as divide-and-conquer, dynamic programming and greedy.
- It discusses correctness and analyses the efficiency of these solutions.

The class is purely theoretical and involves no programming. However, depending on students background and interests, there might be a couple of short programming assignments.

**Prerequisites**: In this incarnation, the class does
not require any pre-requisites, and is intended as another entry point
(the theory way) into Computer Science besides 101 (the programming
way). Generally speaking, a good mathematical background and good QR
skills are a plus.

**Instructor**: Laura Toma
*Office:* 219 Searles Hall *Email:* ltoma at bowdoin

My office hours are on Wednesday, 1-4pm in my office. For
*quick* questions you can drop by any time the door is open.

The class has several TAs who will hold study groups 2-3 times a week. If you you have a questions and cannot come during my regular office hours, please first check with the TAs----If you have been to at least one study group and your question was not answered, then send me an email to make an appointment.

**TAs and QR-TAs:**

- Noam Terman (Sun 7-9pm) (QR-TA)
- Andrew Daniels (Mon 8-10pm) (QR-TA)
- Anthony Todesco (Wed 8-10 pm) (QR-TA)

**Study groups/Office hours:**

- Sun: 7-9pm (Noam in Searles 224)
- Mon: 8-10pm (Andrew in Searles 224)
- Wed: 8-10pm (Anthony in Searles 224)

**Class webpage:**
*http://www.bowdoin.edu/~ltoma/teaching/cs231/spring14/*. 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 (because I strongly believe in all content being public and accessible at all times, which is not possible from Blackboard).

**Textbook (required):**

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

**Grading policy**

- Homework assignments (40%).
- 3 exams (3x 20% = 60%).
- Class participation (tie breaker)

Topics:

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

**Class meetings**: The class meets twice per week. If for some
reason you miss a class, you are responsible for studying the material
covered in class using the book and the materials posted online.

**Exams**: There will be three exams, the first two
during the semester, and the last one during the final exam period.
The first two will be in-class exams. The last exam will be a take
home. The exams will be non-cumulative. All exams will be open book
and open notes.

**Homework:** Homework assignments will be announced
in class and by email, and will be available online as the semester
progresses. They are due at the beginning of class on the due date.
Late assignments are not accepted.

**Homework collaboration policy:** Collaboration is
allowed and encouraged, **provided that it helps you study
better**. Do not 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. Limit your collaborators to three or less.

**Academic Integrity:** You are expected to follow
Bowdoin's academic honor code. Collaboration on homeworks is
encouraged, however you are responsible to write the solutions on your
own, and list the names of all your collaborators. Any violation will
be severely punished.