Spring 2016

- Lecture: Tu, Thu 11:30 - 12:55 (Searles 126)
- Lab: Fri 11:30 - 12:55 (Searles 126)

**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/spring16/*. 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.

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

- To start, we'll introduce asymptotic notation, summations and recurrence relations, as well as basic proof techniques (induction and contradiction).
- We'll discuss (more) fundamental data structures such as search trees, [augmented search trees], priority queues, [skip lists] and union-find data structure.
- We'll introduce fundamental algorithmic problems such as searching, sorting and selection, matrix multiplication, optimization and graph problems.
- We discuss solutions to these problems, while trying to understand the guiding principles and to illustrate techniques that can be applied to other problems (e.g. divide-and-conquer, dynamic programming and greedy).

The class is theoretical and involves no programming.

- To be able to analyze the asymptotic performance of algorithms, compare multiple algorithms for a problem and predict performance
- To be able to argue that an algorithm is correct
- To be familiar with the fundamental algorithms and data structures and 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
- 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

The course relies heavily on group work and peer instruction, so it is crucial that you attend all classes and all labs. There is a lot of research that shows the benefits of peer instructions compared to standard lecturing. The process of explaining an argument is beneficial for everybody involved. You'll work in groups in class, during labs, and in the study groups.

- Be pro-active about studying (use class materials and all resources on the internet)
- Formulate questions and attend study groups to get your questions answered
- Solve all problems that are assigned in class and lab, even those that are optional
- Find a group of peers to work with. Explain your ideas to your peers, and listen to their ideas. Try to prove them correct, or wrong. Take turns.

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 first talk to the TAs and attend at least one of the study groups, but preferably more than one.

**TAs:** Kote Mushegian, Tucker Gordon, Mingo Sanchez, Ethan Zhou

**Study groups:**

- Sundays: 7-9pm (Tucker)
- Wednesdays: 6-8pm (Kote)
- Thursdays: 5-6pm (Mingo), 7-9pm (Ethan)

The assignment is considered an opportunity for learning and
completing the assignment is a learning **process**. You are not expected
to sit down for a few hours and solve everything in a breath. Instead,
you are expected to view it as a process: read the problems,
understand what they are asking, come up with initial solutions,
figure out why they work or not, come up with improvements. The whole
process is supposed to be interactive between you, the group of people
you collaborate withm your TAs, and myself.

**Exams:** There will be three exams, each one about a
third through the semester (precise date TBD); the third exam is
during the final exam period. The exams will be a combination of
in-class and take-home. All exams will be open book and open notes,
and non-cumulative (to the extent possible).

**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%).
- 3 exams (60%).
- Class participation.