# Course Overview

Welcome to CSCI211: Algorithm Design and Analysis!

Now, everything comes down to expert knowledge of algorithms and data structures. If you don't speak fluent O-notation, you may have trouble getting your next job at the technology companies in the forefront.

-- Larry Freeman

**Algorithms:** You know them, you love them, you
can't live without them.

You've been writing algorithms since your first programming
course. Do you know that the algorithm you wrote for a given
problem is the most effective algorithm? Can you *prove* you
have the best algorithm? Could you speed up your algorithm by using
more memory? Could you make the algorithm use very little memory?
Could you improve your algorithm by using a different data
structure? How does your algorithm perform in the worst case? In
the average case?

In this course, we will focus on developing an understanding of the algorithmic design process: how to identify the algorithmic needs of an application and apply algorithmic design techniques to solve those problems. We will also learn how to identify problems for which no exact, efficient algorithm is known.

**Catalog Description:** Computer representations of data
structures as derived from mathematical models: stacks, queues, and
linked lists. Access methods into data structures, such as hashing and
tree searching. Storage allocation and deallocation procedures.
Algorithms for manipulating such structures are introduced, analyzed,
and implemented by the student.

Topics covered include

- Algorithm analysis
- Graphs
- Greedy Algorithms
- Divide and Conquer
- Dynamic Programming
- Network Flow
- NP-completeness
- Computational Intractability

**Structure**

Classroom work will consist of
lecture and discussion. You will be evaluated primarily on written
homework assignments, a few programming assignments, and exams.

**Objectives**

After taking this course, you
should be able to

- formulate precise problem descriptions
- apply algorithmic design techniques, such as divide and conquer, greedy, and dynamic programming
- describe, implement, and apply algorithms associated with advanced data structures
- analyze the best-case, worst-case, and average-case complexity of algorithms using asymptotic notation
- recognize when no exact, efficient solution is possible

## Instructional Staff

Sara Sprenkle

Office: Parmly Hall 410

Office Hours: Wednesday 2:30-5 p.m., Thursday 2:30 p.m. - 5 p.m., or by appointment

E-mail Address:

Phone Number: (540) 458-8309 (it is better to email me than to call)

## Course Information

CSCI211, Section 01

**Lecture:** MWF 9:45 - 10:45 a.m.

### Textbook

*Algorithm
Design* by Jon Kleinberg and Éva Tardos

### Course Policies

**Student Responsibilities**

- It is very important that you attend lectures (see Grading below). There will be considerable information given in class that is not available elsewhere. Family and medical emergencies and conflicts with University-recognized extra-curricular activities are the only reasons to request that work be rescheduled.
- You are expected to arrive to lectures promptly.
- Actively participate in the class by asking and answering questions.
- Please turn off cellphones to increase engagement with the material.
- Check this web page and the schedule for assignments and check your W & L email frequently.
- Keep track of your grades to calculate your grade/status in the class.

**Instructor Responsibilities**

I will try to
make this course and its material as exciting for you as it is
for me. I will be respectful of student questions and
misunderstandings. I will give prompt, constructive feedback
from assignments. I will be available during office hours and
by appointment. I will do my best to respond to questions via
email within 24 hours.

**Honor System**

I expect that you will discuss
the problems with members of the class. However, I expect you will
*not* write up solutions together. Solutions should reflect
your own work. Your understanding of the problems should be
sufficient enough to recount the key arguments of the solution by
yourself. Insightful discussion with others must be cited in your
homework solution. Deviation is considered an honor code
violation. You will not lose points for citing others, nor will you
fall from my good graces; quite the contrary, citation gives credit
where credit is due. You should not look at solutions from students
currently in the course or who took this class previously, nor
should you share your solutions with any future students of this
course. *If you have any uncertainty about what I mean, consult
with me before you collaborate.*

**Participation and attendance**

To receive
full credit for class participation and attendance, you
must be actively engaged in the classroom by answering and
asking questions each class when appropriate and by being
respectful of other students. The average grade for
participation is a B-.

The schedule, including important dates, is posted at the beginning of the semester. You should plan accordingly. If there are acceptable conflicts, tell me at the beginning of the semester and then remind me about a week in advance.

You are permitted three sick/personal days for minor illnesses or any other reason (e.g., family occasion). No documentation is needed or requested for these absences. Unexcused absences beyond these will result in deduction in your participation grade. Excused university absences (e.g., for intercollegiate athletics, documented by a note from a faculty or staff member) do not count towards your sick days or personal days.

**General assignment policies**

Problem set
solutions must be neatly written or typed. (Latex is easier than it's
ever been to use, and your documents look really good!) If you are
propose an algorithm to solve a problem, you should always analyze the
runtime of the algorithm and should analyze the correctness of your
solution, as appropriate.

Programs turned in with syntax errors
will receive no credit.

**Late policy**

All assigned work is due on the
date specified. Any assignment turned in after the due
date/time but on the same day will be penalized 10%. Any
assignment turned in after the day on which it is due will be
penalized an additional 10% for each late day. No assignment
will be accepted that is more than three school days late because of the quick turn around required to grade and return assignments. If
you turn an assignment in late, you must indicate this somehow
(in comments, on paper, etc.).

**Academic Accommodations**

Washington and Lee University makes reasonable academic accommodations
for qualified students with disabilities. All undergraduate
accommodations must be approved through the Office of the Dean of the
College. Students requesting accommodations for this course should
present an official accommodation letter within the first two weeks of
the (fall or winter) term and schedule a meeting outside of class time
to discuss accommodations. It is the student's responsibility to present
this paperwork in a timely fashion and to follow up about accommodation
arrangements. Accommodations for test-taking should be arranged with the
professor at least a week before the date of the test or exam.

### How to Succeed in This Course

- come to every class prepared (bring questions!)
- actively participate in class by asking and answering questions
- actively read the textbook, making notes about the problems and solutions in your wiki.
- do all the assignments--start them when they are assigned--and turn them in on time. Refer to your wiki, the lecture slides, and your notes when working on your assignments.
- if you start to get behind, see me in office hours right away

### Grading

Grades for the course will be computed as follows:

- (40%) Individual written and programming homework assignments
- (30%) 2 Midterm exams
- (20%) Final exam
- (5%) Summaries of test book readings on wiki, weekly
- (5%) Participation and attendance