# Algorithms (csci2200) Spring 2016

Useful links | Schedule

## Basic info

Meetings
• 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.

## Course overview

Problem solving is at the heart of Computer Science and computational thinking. This class is an introduction to problem solving through the design and analysis of algorithms. We'll introduce some fundamental algorithmic problems, talk about solutions for these problems, prove their correctness and analyze their efficiency.
• 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.

## Course goals

• 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

## Teaching style:

The goal of the class is not merely to cover a bunch of algorithms, but rather to emphasize the process of coming up with solutions. This process is not necessarily neat; it involves going back and forth, possibly many times, and struggling. To this end, I will rarely start a class by presenting the algorithm. Instead, I will start by posing the problem, and asking for ideas. We'll try to understand properties of the problem, and, as a group, we'll try to come up with solutions and refine them until we can refine no more. Sometimes it is very effective to see wrong solutions, or ideas that lead nowhere. As we come up with solutions, we'll try to generalize and derive "techniques" that we can apply to other problems The most important skill to learn is abstraction and problem solving: the ability to think critically and 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.

## Expectations

This will be a hard class. What makes it hard is that coming up with algorithms is more an art than a science: there are no recipes, and each problem is a new problem. Furthermore, problems that seem very similar, may have very different solutions. Plan accordingly, and allow plenty of time to read the materials and work on the problem sets each week. To succeed in this class:
• 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.

## Office hours, TAs and study groups

Office hours (Toma): Mon, Tue, Thu 10-11

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)

## Labs and Homework

The lab time is dedicated to more examples, demos and practice problems. A lab will usually contain a set of problems to be completed in the lab, and a problem set that becomes the homework assignment for the following week.

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.

## Homeworks, Exams and Grading policy

Homework: The weekly lab will contain problems to be solved in the lab, and a set that constitues the homework for the subsequent week. The homeworks will generally be due a week later (unless specified otherwise). Late assignments are not accepted (except in case of medical reasons).

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.