CS 370 - Advanced Algorithm Design and Analysis - Spring 2011


This class is "advanced." This image is either an "advanced" data structure or a visual representation of the spaghetti code I hope you don't write (but that we will work to improve, if you do). [photo by Domenico Nardone]

In this class, we will continue our study of algorithms and data structures begun in CS255. We will go into some topics in more depth and introduce several new ones. One important new area we will be covering is concurrent/parallel/distributed algorithms. Parallelism is increasingly important in computer science, and we will make a strong effort to become grounded in the area. As in CS255, we aim to "examine algorithms and their data structures with an eye towards analyzing their efficiency and designing new algorithms in similarly efficient ways." And our goals are still, broadly, to give you:

  1. The tools needed to analyze existing algorithms or solutions to problems you may encounter in the future.
  2. A library of common data structures and algorithms with known efficiencies that you can draw upon and apply to new problems.
  3. A set of techniques and an intuition for how to design new algorithms and/or data structures to suit the requirements of future programs you develop.

Additionally, however, I aim to focus more on the implementation aspect of algorithms than we did in the earlier course. We will work on writing our algorithms in clean, usable, efficient code. Several aspects of the course will support this focus, most notably the programming projects you will complete.

Finally, this is an "open-format," experimental course. Some of it will be figured out as we go, and I'm always open to suggestions of what you'd like to do in this course.


When/Where: TR 10:50-12:05 / CNS E201

Instructor: Mark Liffiton
Office: CNS C207B   (2nd floor CNS, directly above entrance from quad)
Office Hours: MWF 11-12; TR 10-10:45; by appointment MW 2-4; or email/drop in any time.
Contact: Email is preferred (please start the subject with "CS370:"). For more pressing matters, my office # is 309-556-3535.

Textbook: Algorithms: Sequential, Parallel, and Distributed by Kenneth A. Berman and Jerome L. Paul
ISBN: 978-0534420574

Main course site: Moodle — reading, assignments, quizzes, announcements, and other online resources will be posted here.


The final grade will be based roughly on the following breakdown:

Exam 115%
Exam 215%
Final Exam20%


* You can create PDFs from any document in OS X (instructions) or in Windows (using a free tool like DoPDF).

Assignments will be posted on the course's Moodle site, usually about a week before they are due, and they will be collected there as well. Submissions should be PDF files*. I will aim to get them graded and returned to you by the following week.

Your lowest assignment score will be dropped.


The projects will be large programming assignments. Each will generally involve a design process, implementation, debugging (of course), and usually some experimental evaluation. We will be making use of new development tools and platforms as much as possible, so there will be a good amount of hands-on learning. Each project will be handled somewhat like a paper in a writing intensive class, with a process of feedback and revision. This will not be a case of "turn it in and forget it."


There will be two exams during the semester, held in class. The final will be held during the final period, time TBD.


As you may have heard from other teachers: If everyone does well, that's great! I'm not going to lower anyone's grade to fit some predetermined grade distribution. However, scores given on individual quizzes or exams (especially exams) may not translate directly into a letter grade on the traditional scale. As explained quite well here:

"A percentage shows how much of a particular exam was dealt with successfully, but what test is so perfect that it could completely determine extent of knowledge or ability? If a student gets a grade of 90%, it does not mean they know 90% of everything in the subject. Wise students will begin to look at scores as a place on a continuum of achievement rather than analysis carved in stone."

Late Policy

Assignments and projects will be due at set times; they will be considered late at any point after that time. An assignment will lose 10% of the total possible points for every day it is late, and after five days it will not be accepted.

Assignments can't be accepted at all after solutions have been handed out or the graded work has been returned to the class.


If you would like to request a regrade, submit a request in writing (via email) within one week of receiving the graded assignment, exam, etc. Indicate exactly which part you believe deserves a different score and why.

Engagement / Attendance

Class time will be complementary to the reading, and you will need both in order to learn all of the material in this class. Furthermore, each student benefits from the engagement of all others in the class. Ten points of your final grade will be based on that engagement. Attending every class period on time and prepared will earn a base of 7 points; points can be gained by constructive participation, in class or out, such as asking questions, answering them, responding in the forum, sharing insights or useful/interesting resources with the class (posting in the forum, for example), investigating concepts beyond the requirement in class, working on small independent learning projects, and in many other ways; points can be lost for excessive (more than 3) unexcused absences, disrupting class (e.g., regularly showing up late), dominating the conversation, and the like.

Absences can be excused with documentation from health services or the Dean of Students' office, or if arrangements are made with me more than a week in advance. In general, if you know you will be missing a class, let me know as soon as you do.

Working with Others

I strongly encourage you to form study groups with your classmates, compare notes, explain concepts to one another, and generally help each other learn the material in this course.

Any material turned in for a grade must be your own individual work, though. You may work on concepts with other students, but I ask that you not discuss specifics of the assigned problems until after the work has been turned in. This has two goals: 1) let the grades be a reflection of each student's own work, and 2) avoid situations where one person solves a problem and another records the answer as their own work without really learning. I understand that the line between discussing concepts and solving problems can be vague, so I ask that you use your own judgement with those two goals in mind and ask me if a situation is unclear.

Try to follow this rule of thumb: No matter what help you received figuring out the concepts involved, when you turn something in you should be able to reproduce the whole thing, working through the assignment again, without any outside help.

For details on the university's policies regarding academic honesty, please read the sections of the student handbook on conduct, cheating, and plagiarism here.

End-of-Syllabus Advice

Make the class what you want it to be. As I said, this is an experimental class. I have certain goals and concepts I'd like to cover, but if a particular topic interests you, let me know. We're here in part to learn certain material, but also to develop skills. Those skills are often independent of the particular algorithm topics involved, and so if you can apply them in an area of interest to you, you'll be that much more motivated. So really, send me ideas as you have them. Tell me what you'd like to do.