Computer Science 483 | Department of Computer Science |
Data Structures and Analysis of Algorithms | George Mason University |
R. Paul Wiegand | Fall, 2002 |
Course | CS 483 - Data Structures and Analysis of Algorithms |
Course Text | Introduction to Algorithms, Second Edition. T. Cormen et al., MIT Press, 2001. |
Class Room | Robinson A, room 248 |
Class Time | 7:20pm - 10:00pm |
Instructor | R. Paul Wiegand |
paul@tesseract.org | |
Office | Room 212, Krasnow Institute |
Office Phone | 703.993.4380 |
Office Hours | Tuesdays, 2pm - 4pm (room 422, Science & Tech II)** |
TA Office Hours | Monday & Thursday, 5pm - 7pm (room 435, Science & Tech II) |
Students must have completed the following courses with a grade of C or better. You are also required to have completed the prerequisites of these courses.
CS 310 | Computer Science III |
CS 330 | Formal Methods and Models |
Math 114 | Analytic Geometry and Calculus III |
Upon start of term, students are expected to be have mastery of the fundamental concepts of these, and other courses. These include basic mathematical ideas such as limits, mathematical series, inductive proofs, logarithmic functions, etc., as well as basic Computer Science concepts such as abstraction and generalization of algorithms, and a detailed knowledge of at least one programming language.
Analysis of the computational resources required for important problem types by alternative algorithms and their associated data structures, using mathematically rigorous techniques. Specific algorithms are analyzed and improved.
Instructor's CommentsDeveloping computer software is an engineering discipline that requires insight, skill, and forethought. Every development project, regardless of how large or small, is essentially a problem (or set of problems) to be solved. In order to construct any computational solution to any problem, engineers must not only be aware of what tools are available to them, but they must also have the critical thinking and analytical skills to know how to best employ such tools.
This course seeks to meet two high-level goals. First, it seeks to introduce students to a wide and diverse variety of algorithms and data structures in order that they might have the opportunity to begin building their knowledge of the types of tools available to them, as engineers. Second, it seeks to help students develop the analytical skills needed to solve computational problems in a competent and efficient fashion, by introducing them to the ideas of data structure and algorithm analysis.
The course is divided into five parts (see course schedule). Student grades will be assessed from three exams and three (corrected from "five") projects. The following table describes the grading policy for these items. Additionally, homework will be assigned periodically during the semester. Students are expected to complete the homework, but it will not be considered part of the grade. Despite this, do not consider homework optional.
Exams | Exam I (Parts I & II) | 25% or 20%** |
Exam II (Parts III & IV) | 25% or 20%** | |
Exam III (Part V) | 25% or 20%** | |
70% | ||
Small projects | Project I | 7% |
Project II | 10% | |
Project III | 13% | |
30% | ||
100% |
Since the grading system is relative, it may help some students to see some statistical results of the current grades, in order to gain some context. The following are some plots in PDF format of the grades so far in the course:
Students will be given roughly two weeks to complete each project. Most projects will have a large programming component; however, all projects will have a written component. The details of the requirements for the projects will be provided with the assignment itself. Most (perhaps all) projects will be individual projects. As such, students will not in any way discuss the project guidelines, the project itself, or potential solutions to projects (see the honor policies section, below).
Any source code required by a project should follow (at least) the following guidelines.
Projects will loose 1 point from their project grade for every day late. Saturday and Sunday count as a single day (note that this means that projects more than one week late are worth nothing). The written portion of a project is due in class on its assigned due date. Any electronic versions (such as source code) are due before midnight on their assigned due dates. If you have any confusion about this policy, please consult me and I will resolve it.
Projects will be posted on the assignment web page.
Hand in projects in hard copy form during class. If you cannot hand it in during class, you may drop it in my box (room CS 435, ST II). You may also make an appointment with me to hand it off. If you need to do so, email me a soft copy of the document, rather than incurr a greater late penalty. However, if you do so, send the document in some portable format (i.e., not MS Word) such as PDF, PostScript, HTML, etc.
Students are referred to George Mason's honor policy for review. In addition, students should review the Computer Science department's honor policy for programming projects. Read these, know them, and abide by them. I will not tolerate ANY cheating. If I catch you, I will recommend an F in the course to the honor committee, whether it is on a project, or on an exam. I will not be lenient, so do not ask.
The best (and the smartest) way to avoid any trouble is simply not to cheat. There are no "gray areas" with respect to cheating. If you are concerned that some choice you may make could be construed as unethical, you are free to consult me. I will clarify any sticky areas.
Additionally, please take note of the following disclaimer:
As graders, we reserve the right to compare programming code
submitted by students to any other code (either students' or
otherwise) by any means necessary (automated or non-automated).