Welcome to CS 211: Algorithm 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
- Greedy Algorithms
- Divide and Conquer
- Dynamic Programming
- Network Flow
- Computational Intractability
Classroom work will consist of lecture and discussion. You will be evaluated primarily on written homework assignments, a few programming assignments, and exams.
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
Office: Parmly Hall 410
Office Hours: Wednesday 1-2 p.m., 3:35-4:35 p.m., Thursday 2:30 p.m. - 4:30 p.m., or by appointment
Phone Number: (540) 458-8309 (it is better to email me than to call)
CS 211, Section 01
Lecture: MWF 10:10 - 11:05 a.m.
Algorithm Design by Jon Kleinberg and Éva Tardos
- 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.
- Please turn off cellphones.
- Actively participate in the class by asking and answering questions.
- Check your W & L email frequently and check this web page and the schedule for new information.
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.
I expect you will discuss the problems with members of the class, but I expect you will not discuss the solutions nor will you write up solutions together. Deviation is considered an honor code violation. Insightful discussion with others must be cited in your homework solution. You will not lose points for citations, nor will you fall from my good graces; quite the contrary, citation gives credit where credit is due. Your understanding of the problems should be sufficient enough to recount the key arguments of the solution by yourself. If you have any uncertainty about what this means, 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 grading policies
Proofs must be neatly written. You can submit typed submissions. Include an analysis of your problem solutions when appropriate.
Programs turned in with syntax errors will receive no credit.
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.).
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
Grades for the course will be computed as follows:
- (38%) Individual written and programming homework assignments
- (30%) 2 Midterm exams
- (20%) Final exam
- (7%) Summaries of test book readings on wiki, weekly
- (5%) Participation and attendance