Algorithms (CSCI 2200)
Spring 2019
Tentative Class Schedule |
Department's Collaboration Policy
Basic Information
Meetings: Mon, Tues, Wed, 2:50 - 4:15 pm, Searles 126
Prerequisites: Introduction to Computer Science (CSCI 1101 or CSCI 1103) and Data Structures (CSCI
2101).
Textbook (optional):
Cormen, Leiserson, Rivest and
Stein, Introduction
to Algorithms, 3rd Edition, MIT Press, Cambridge, MA, 2009. (errata and bugs).
Course Materials: The course homepage is http://www.bowdoin.edu/~smajerci/teaching/cs2200/2019spring/index.html and will contain all class-related material, including a tentative class schedule. I will not be using BlackBoard.
Office Hours and TA Hours
My office hours are Monday, 6:00-8:00 pm in Searles 224, and Tuesday, 1:00-2:30 pm in Searles 222. I am also available after class (within reason!) and by appointment.
We have a great group of TAs (hours TBA):
- Sunday: Erik Wurman, 7:00-9:00 pm
- Sunday: Seth Chatterton, 8:00-10:00 pm
- Monday: Zoe Aarons, 8:15-10:15 pm
- Tuesday: Will deBruynKops, 7:00-9:00 pm
All TA hours are held in Searles 224.
Homework, Exams, and Grading
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 may not be accepted, at my discretion, unless I have received an email from your Dean describing mitigating circumstances.
Exams: There will be three in-class exams, all in
Searles 126.
- Exam 1: Wednesday, February 27, 2:50-4:15
- Exam 2: Wednesday, April 17, 2:50-4:15
- Exam 3: Monday, May 13, 1:30-4:30
All exams focus on the new material that has not been covered in a previous exam, but questions
about earlier material are not out of the question. The exams are closed book and closed notes, except for one 8.5 x 11 page of notes (both sides).
Grading policy: The final grade is determined as
follows:
- 10 Homework Assignments (25%).
- 3 Exams (75%).
- Class Participation (tiebreaker)
About This Course
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.
I will talk about algorithm design techniques, how to argue the correctness of an algorithm, and how to analyze the efficiency of an algorithm, in the context of some fundamental algorithms. General topics include asymptotic growth, summations, recurrences, greedy algorithms, divide-and-conquer algorithms, and dynamic programming. Specific types of algorithms covered include sorting and selection algorithms, scheduling algorithms, and graph algorithms.
Course Goals
The goal of the class is to give you the tools you need to design and analyze your solutions to new
problems. At the end of this class you should:
- Be familiar with some of the fundamental algorithms and data structures
and the major design paradigms.
- Be able to analyze the asymptotic performance of algorithms.
- Compare multiple algorithms for a problem and predict performance.
- Be able to argue correctness of an algorithm.
- Be able to devise algorithms for new problems.
- Have improved problem solving skills and a better ability to think abstractly.
Labs
Lab time is dedicated to working through (more) examples, practice problems, and answering any questions that were not answered during lectures. A lab will usually contain a set of problems to be
completed during the lab, and a problem set that becomes the homework
assignment for the following week.
There will be no specific lab day. We will generally have two classes followed by a lab, but, given the calendar, this will mean that labs sometime fall on days other than Tuesday. Because of this, "Week" on the course schedule is not always a calendar week (e.g. Week 6), but rather the 3 days during which a particular topic will be covered.
The assignments will contain not only applications of the problems
discussed in class, but also new problems that will require creative
new ideas. Completing the assignment is a learning process (as
you probably know from Data Structures). Do not expect to sit down
for a few hours and solve everything at once. Instead: read the problems, understand what
they are asking, come up with initial solutions, figure out why they
work or not, try to formulate questions, come up with
improvements. The whole process is supposed to be interactive between
you, the group of people you collaborate with, your TAs, and myself.
How to Succeed
Many students find this class to be difficult. But, it is the core of computer science and it is worth all the effort you are likely to put into it. Unlike Data Structures, which focuses on using appropriate data structures to implement the solution to a problem, Algorithms focuses on designing the solution to a problem. As such, the material is more abstract. Furthermore, designing algorithms is, to a certain extent, an art as well as a science. You will learn some major algorithm design techniques, but it is not always obvious which technique will work for a given problem. Problems that seem very similar, may require different approaches.
Here are some suggestions for doing well in class:
- Allow plenty of time to
read the materials and work on the problem sets each week.
- Solve all problems that are assigned in class and lab, even those
that are optional.
- Go to the study groups and talk to the TAs; listen to your peers'
questions and get your questions answered.
- Find a group of peers to work with. Explain your ideas to your
peers, and listen to their ideas. Try to argue why a solution is
correct, or prove it wrong by finding an instance where it does not
work (a counter-example). Take turns.
Homework Collaboration Policy and Academic Integrity
You are expected to be familiar with and to comply with the department's collaboration policy.
Collaboration and discussion are crucial for this class. You are
encouraged to work on problems in a group and you will most likely find that you
will gain a better understanding of the material by discussing the
problems with your partners.
Note that, if you do collaborate, you need to list the names of the collaborators on
the front page of the homework.
However, our goal is to ensure that the collaboration is
appropriate and effective, and that you become an independent problem
solver capable of working on your own.
The department's
collaboration policy defines four levels of
collaboration.
Specifically, for this class:
- All in-class and in-lab work, unless otherwise specified, is at
Collaboration Level 0: No restrictions.
- The homework assignments, unless otherwise specified, will be at
Collaboration Level 1: Verbal collaboration without solution sharing. You are allowed and
encouraged to discuss ideas with other class members, but the communication should be
exclusively verbal, with one exception. You are allowed to draw diagrams (but not pseudocode)
on a whiteboard (or blackboard) for the purpose of clarifying an idea being discussed. However,
you are not allowed to take notes during the discussion or copy/photograph anything on the board; being able
to recreate the solution later from memory ensures that you actually understood it. To emphasize, communication
cannot include sharing pseudocode or diagrams for the problem.
- Exams and quizes will be at Collaboration Level 3: Professor clarifications only.
While peer instruction can be immensely useful, it can also
be harmful. Once you have found a solution, resist giving hints to your peers or
leading them towards the answer. You are not helping them by doing
so. Direct them towards the TAs who are trained to give help.
Remember that you are responsible for reading, understanding, and
adhering to the department collaboration policy. If you have any questions about any aspects of
the policy, please do not hesitate to ask for clarification.