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
- Advanced
Introduction to discrete mathematics, algorithm analysis, big O
notation,
induction and recursion.
- Trees
- General Properties.
- Search Trees.
- Balanced Trees.
- Tree Merging (time permiting).
- Heaps / Priority Queues.
- Hashing.
- Sorting and Searching.
- Graphs and graph algorithms.
- 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:
- Step 1: Attend the TA office hours or help sessions.
- Step 2: Email your TA with the question.
- Step 3: Make an appointment with the TA.
- 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.
|