|Computer Science 483||Department of Computer Science|
|Data Structures and Analysis of Algorithms||George Mason University|
|R. Paul Wiegand||Spring 2006|
|Course||CS 483 - Data Structures and Analysis of Algorithms|
|Course Text||The Design & Analysis of Algorithms, by Anany Levitin. Addison Wesley, 2003.|
|Class Room||Innovation Hall 132|
|Class Time||Wednesday, 7:20pm - 10:00pm|
|Instructor||R. Paul Wiegand|
|Office Hours||Wednesdays, 6pm - 7pm (room 422, 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 113, 114||Calculus|
|Math 125||Discrete Mathematics I|
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 Comments
Developing 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.
We will attempt to follow the course schedule as closely as possible. Student grades will be assessed from three exams and three projects. Exams constitute 70% of the grade, projects 30%. Exam results will be sorted, the smallest result contributes 20% toward the 70% exam total, the remaining two contribute 25% apiece. Projects make up the remaining 30% of the grade.
In response to a recent class discussion, I will drop the lowest of the three projects. The remaing two will be scaled to 15% of the total grade apiece.
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.
Students are permitted to bring a 3x5 inch note card with them to the exam. You may write whatever you like on this notecard (you may use both sides), but you must turn it in with your exam. Calculators will not be permitted, nor will the book or any notes aside from the notecard. You may not discuss your work with other students.
Once the exam is handed out, there will be 90 minutes to complete it. At the end of that time, I will collect the remaining exams, there will be a short break, and lecture will resume.
Students will be given several weeks to complete each project. Projects may or may not have a programming component; however, they will all have a written component. The details of the requirements for the projects will be provided with the assignment itself. They will all 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 lose 1 point (of 10) 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). Both written and source materials will be turned in by electronic means (email). The report should be in text, RTF, HTML, PDF, or PS. Uncompiled source code should be submitted without binaries. Both the report and the source code are due before midnight on their assigned due dates. If you have any confusion about this policy then please consult me, and I will resolve it.
Projects will be posted on the assignment web page.
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).