Algorithms and Data Structures

Fall 2010

Vermont Technical College

Class Meeting:

Monday and Wednesday 10:30 - 11:45 am,
Room 213



Leslie L. Damon


Office Hours:  Monday and Wednesday, 9 - 10am, Tuesday and Thursday 1:15 - 2:00pm.  Location TBD.

Course Objectives:

This is a classic course in algorithms and data structures. The primary thrust of the course will be to learn how to evaluate the efficiency of algorithms, while learning various data structures that allow us to write more efficient code.  This class contains some theory, but is designed to be mostly practical.  The primary language used will be C++, but the concepts are language neutral, and questions about how the concepts would be applied in C and Java are always welcome.

Student Text:

Goodrich, Michael; Tamassia, Roberto and Mount, David;  Data Structures and Algorithms in C++, John Wiley and Sons, 2004.  ISBN 0-471-20208-8

Note about the text:  unfortunately, there is a new edition of this book coming out in December, so the resale value of this book will be poor.  You can consider purchasing an on line 180 day license to use the textbook from coursesmart (  $67.50, roughly half price).


This course is primarily a programming course. You will draw significantly on your experience with C++ programming and you should be comfortable with basic C++ features (classes, references, namespaces). We will do some review of C++ and I will introduce certain advanced C++ features (templates) as we need them. This course also requires some mathematical background but for the most part it is your programming skills that you need to bring to this course.

Since this course focuses on implementation we need to select an implementation language to use. In theory any reasonable language should be satisfactory. In fact, a good working definition of "reasonable language" is any language that is expressive enough to allow you to implement the classic algorithms and data structures in a natural way using that language!

C++ was chosen since it is a language you all should be familiar with from OOP, and it is a common language in industry, and allows more practice with in depth features like pointers and memory management.


Grading will be on a point system. All points are created equally -- each assignment and exam will have a designated number of points.  At the end of semester, I will total up the number of points you have received, and divide it by the total number of points available to determine your grade.

There will be 6 - 8 assignments, distributed roughly bi-weekly.  Most (if not all) of these assignments will involve programming. Program source code should be submitted electronically via blackboard by the assigned due date.  Each programming assignment will be worth 25 - 30 points, for a total of approximately 200 points.

Additionally, there will be 2 in class exams, worth 100 points each, and a final exam worth 200 points.  Exams are generally open book and open note.
I reserve the right to adjust these numbers as needed through the semester, and the above is intended as guidance for how I perceive the relative importance of programs vs written tests.

Late Policy

Assignments are due at the date and time specified.  You may submit assignments up to 4 days late, at a penalty of 5 pts per day.  So if an assignment is submitted one day late, the highest grade you can get is 20/25, 2 days late and it’s 15/25, 3 days late it’s 10/25, and 4 days late it’s 5/25.

If you are unable to get an assignment to completely work, I encourage you to submit a partial solution. You may be able to get a significant amount of credit if your solution works on some basic test cases. Even if your solution doesn't work at all, you should get at least some credit for the assignment and that is much better than a zero grade.

While working on assignments, consider how to break the work into smaller pieces, that can be independently implemented.  You can then test each piece as it is written, increasing your chance of having an assignment that will gain you significant credit if you are unable to complete all the work.

Other Course Procedures

Students are encouraged to work with each other in many ways. Study groups are particularly encouraged. You may discuss approaches to assignments. However, each student is responsible solely for completing their own assignments, project and exams. Any copying of work, either from other students or from unacknowledged external sources, is cheating and will result in harsh penalties up to and including dismissal from VTC. To be safe, you should document any contribution from other students or outside sources to your work.  Also be aware that providing your work to another student is also considered to be cheating -- since you are helping another student by supplying answers to them.  You should take all appropriate steps to keep your work (in particular programming assignments) under your control at all times.

If I noticed that assignments are being turned in that show “excessive” similarity, I will grade the assignment as if it had been submitted by a single student, and then share that grade out between all the submitting parties.  Subsequent infractions will be treated much more harshly.

Students with disabilities, whether physical, psychological, or learning, who believe that they may need accommodations in this class are encouraged to contact the Learning Specialist to ensure that such accommodations are implemented in a timely fashion. Please meet with Robin Goodall to verify your eligibility for accommodations and/or academic assistance related to your disability. She can be reached at the Judd Support Center, extension 728-1278, or by email (