Computer Science 226
Algorithms and Data Structures
Spring 2013

If you have any administrative questions, please email Maia Ginsburg (maia@cs.princeton.edu).

COURSE INFORMATION

Description.
This course surveys the most important algorithms and data structures in
use on computers today. Particular emphasis is given to algorithms for
sorting, searching, and string processing. Fundamental algorithms in a
number of other areas are covered as well, including geometric
and graph algorithms. The course
will concentrate on developing implementations, understanding their
performance characteristics, and estimating their potential
effectiveness in applications.

Prerequisites.
COS 126 or COS 217 or permission of instructor.

Lectures.
This semester, we will be conducting an experiment where some of the lectures
will be standard, and some will be flipped.
Weeks 1-3 will be standard. Weeks 4-6 will be flipped. Weeks 7 and 12 will be in a
format determined by how things go during the first 6 weeks.

Standard Weeks. During standard weeks, you are are required to either attend lectures
or watch the online versions available on our
Coursera course.

Flipped Weeks. During flipped weeks, you are required to watch the lectures on the
course website. You are also strongly encouraged to attend the live lecture, which will be used
for a variety of activities, including:

Mini-lectures that cover big picture issues and place the online lectures in a real world context

Active learning activities (i.e. you work on problems -- way more fun than listening to someone talk)

Professor-led workthroughs of difficult problems (mostly old midterm and final exam questions)

Open Q&A

One or two guest speakers (total)

Precepts.
We cover details pertinent to programming assignments and exams.
You should come to precept prepared to participate in the discussion,
not just ask questions.

Staff.
You are welcome to attend the office hours of any staff member.
There are no office hours for May until right before the exam.

Online forum.
If you have general questions about the assignments, lectures, textbook, or other
course materials, please post via
Piazza.
Posts marked private are viewable only by the course staff.

Grading.
Your grade for the course will be based on the following components:
programming assignments (45%), midterm exam (15%), final exam (25%),
exercises (15%), and staff discretion (including participating in precept,
answering questions in lecture using the PollEverywhere system,
answering forum posts, and discovering errata).
Occasionally, we make mistakes. To request a regrade, write a brief note
indicating the perceived mistake by the grader;
attach it to your graded work; and give it to your preceptor within
two weeks of when the graded work was returned.

Programming assignments.
The programming assignments involve applying the material from lecture
to solve problems in science, engineering, and commerce.

Exercises.
The exercises will be available on blackboard. They consist
of short questions on the material in the lectures and readings.

Exams.
The in-class midterm exam is March 11.
The final exam is scheduled by the Registrar for Mon, May 20.

Computers.
You may develop your programs on any machine that you like: we encourage you to
use your own equipment.
We provide instructions for setting up a Java programming environment under
Windows,
Mac OS X, and
Linux.

Laboratories.
We hire
undergraduate lab TAs
who are available to answer general computing questions in the Friend
017 lab.
They can assist you in debugging, provided you have first made a
reasonable effort to identify the bug and isolate the problem.
If you have questions
regarding the course material or programming assignments, see your
preceptor or instructor.
They are available starting on Feb 5, 2013.