dsa.jpg (4503 bytes) Course Description

Home

Course Description

Contact Info

Schedule

Grading

Grade Posting

Lab Homeworks

Exams

Projects

Notes

Overview

Data structures and algorithms form a major component of any software system. When building such a system, a skilled computer scientist must make intelligent decisions about alternative techniques, choosing from existing data structures and algorithms or designing his/her own when necessary. While we will concentrate on the theoretical design and analysis of data structures and algorithms, we will reinforce the theory with working examples, laboratories, projects, and use of the C++ standard library.

Note that at the end of this course you should know how to program and implement data structures, and, create efficient algorithms for them. This is NOT a course on programming in C++, and knowledge of C++ will be assumed for completion of the assignments.
Prerequisites
The student is required to have taken CSCI 1200, Computer Science II (or its equivalent). A working knowledge of C++ is assumed, and is required for the completion of the labs and some aspects of the problem sets. Note, however, that this is not a course about C++; the course focuses on the fundamental issues in the mathematical analysis of algorithms. As a result, nothing about the C++ language will be discussed during the lectures. (It is up to the student to ensure the proper level of comfort with the language.)

A further prerequisite is MATH 2800 (Discrete Structures). The analysis of algorithms relies heavily on discrete mathematics. The knowledge required will be rapidly covered in class, building upon MATH 2800.

Syllabus of Topics
  1. Advanced Introduction to discrete mathematics, algorithm analysis, big O notation, induction and recursion.
  2. Trees
    • General Properties.
    • Search Trees.
    • Balanced Trees.
    • Tree Merging (time permiting).
  3. Heaps / Priority Queues.
  4. Hashing.
  5. Sorting and Searching.
  6. Graphs and graph algorithms.
  7. Miscelaneous topics (time permitting): Dynamic Programing, Greedy algorithms, Randomized algorithms.

Textbooks

 Main texts (required):

Data Structures and Algorithms in C++
by Michael T. Goodrich, Roberto Tamassia, David Mount

The Design & Analysis of Algorithms
by Anany Levitin

STL reference (suggested):

STL Tutorial and Reference Guide, 2nd ed.
by David Musser, et al.
For those of you who are not familiar with the STL and its algorithms, this is a good reference. Also it is a book that would be used in the Advanced programming course, were you to take it.

C++ reference (suggested):

The C++ Programming Language, 3rd Edition
by Bjarne Stroustrup
It is expected that you already own a good C++ reference book.  If you don not have one, you should get one immediately and this book is highly recommended, not as reading material, but as a reference on C++.

Further Information (not required):

Introduction to Algorithms, 2nd ed., by Cormen, Leiserson, Rivest, Stein.
Introduction to Discrete Mathematics, 2nd edition, by Rosen.

Lectures

See the class hour schedule for the time and place of your lecture section. You are responsible for all material and announcements made in lecture.  Exams and material may vary between lectures, so you must attend your assigned lecture.

Labs

See the class hour schedule for the time and place of your lab section. Labs will be weekly and attendance to scheduled labs is required. Those who show up late for lab or those who leave early without completing the lab risk not receiving full credit. Labs cannot be made up. The exams will contain material covered in labs.  Due to the size of the sections, you must attend your assigned lab section.  The TA will take attendance and you will not receive credit unless you attend your assigned section.

Projects

Three projects will be assigned during the semester. Programs will be written in C++ using the standard library and must follow certain guidelines. Collaboration subject to the academic integrity ( ps, pdf) policy is allowed. Code may not be shared. Project submissions will be compared electronically using a variety of software tools to detect code similarity. Late submissions will not be accepted. Any project submitted after 11:59:59 PM on the due date will be given a grade of zero unless it is accompanied with an institute recognized letter. It is the students responsibility to verify that their project was properly submitted and accepted for grading.

Exams

During the semester, there will be two exams covering both the lecture and lab material.  With advanced notice, the exam schedule may be altered throughout the semester.  There will be no makeup exams given.  If you miss an exam you will receive a grade of zero.  To be exused from an exam, a student must present a doctor's note or a letter from the Dean.

For each exam, a set of about 25 questions will be made available ahead of time. The exam will be some small subset of these questions. The exams will be closed book and notes.

Collaboration Policy

All work you hand in must be written by you. You may ask questions to the TA or myself, as described below. If you did discuss concepts with ANYONE, you must explicitly state this fact on the work handed in, mentioning who you collaborated with, and what the nature of the collaboration was.

Collaboration in designing algorithms is allowed, however copying is not allowed. To enforce this philosophy, we have a set of rules - the Academic Integrity agreement (ps, pdf). Every student is required to hand in a signed copy of this agreement in the first lab. Work handed in before the agreement is handed in will not be graded.

Academic Integrity

It is very important that each student use his or her best judgment to ensure academic integrity in this class. We've outlined guidelines above concerning collaboration which everyone is expected to follow. Copying sections of another person's code for a project and copying answers from another person during an exam are considered cheating. Refer to the the Rensselaer Handbook for other various forms of academic dishonesty. Academic dishonesty will be dealt with harshly, usually an F in the course and a note to the Dean of Students is the minimum punishment.

Getting Help

You can always ask anyone for help, however the following guidelines will be useful to keep in mind:
  • Conceptual questions about the course and lecture: Professor.
  • Projects: The TAs.
  • Lab Homeworks: The TAs or UTA's
  • Grades: If you have a problem with the way an assignment was graded, your first step is to see the TA, then the professor.
  • Programming: This is not a course in C++ and in general debugging is your own responsibility, and help will not be given. All other conceptual programming questions should be addressed to the TA's.
How to get help efficiently:
  1. Step 1: Attend the TA office hours or help sessions.
  2. Step 2: Email your TA with the question.
  3. Step 3: Make an appointment with the TA.
  4. Step 4: Email a UTA with the question.
If you need help regarding course substance (not programming issues) then you should follow the same algorithm to reach the professor. In all emails, include your section number (for example DSA-01) and your TA name.

Grading

  • No late assignments will be accepted unless you have an institute established emergency.
  • A request for a regrade must be made (in writing) no more than a week after the assignment / exam is handed back to you.
  • In the event of a regrade, your grade may go up or down.
  • You are responsible for keeping track of your own grades which will be available through WebCT.

Course Web Site

The course web site is http://www.cs.rpi.edu/~magdon/courses/csci2300_fall2003.html. It will include information about labs, exams, and projects. You should check it fairly often for updates. You may also access this website through the CS department web page by following the courses link or the people link followed by the link to my home page.