CS 2420 - Fall 2006

 

Home
Contacts
Syllabus
Classnotes
Assignments & Calendar

 

Eagle_System
(grading)

Syllabus

 

Instructor: Dan Watson

Office: Main 402b

Communications: Phone: 797-2440, E-mail: Dan.Watson@usu.edu 

Office Hours: 1-3 TTh.

Prerequisite: CS 1720 or equivalent knowledge. 

If you feel that you are a poor C++ programmer, your chances of succeeding in this class are slim. I would strongly recommend that you take CS1720 instead of this class.  I expect that you know the following material: structs, unions, file operations, classes, friends, overloading operators, inheritance, polymorphism, virtual, exceptions, templates, linked lists, stacks, queues, recursion, and binary trees.  There is so much new material to be learned, you do not have time to learn material that you should have mastered in earlier classes. 

Tutors: Tutors for data structures are available in Main 425.  Please use them whenever possible.  If a tutor is on duty, I expect that you will consult with her/him before you come to see me.

Course Page: All assignments and other information dealing with the course are posted on the course page (http://www.cs.usu.edu/~watson/cs2420).

Material: Data Structures and Problem Solving Using C++, 2nd Edition by Mark Weiss.  Addison-Wesley, 2000 (ISBN 0-201-61250-X).   There are many online sites for books.  You might consider Amazon.com, Borders.com, Buy.com, ClassBooks.com, BN.com, BookPool.com, and VarsityBooks.com.

Objectives: 

objective level of proficiency evaluation method
Build working knowledge of data structures mastery written assignments, programming assignments, exams
Refine programming skills mastery  programming assignments, 
Develop strategies for algorithm design  mastery  programming assignments, exams
Develop strategies for algorithm evaluation mastery written assignments,  exams
Algorithm Analysis  familiarity written assignments,  exams
Recursion mastery written assignments, programming assignments, exams
Sorting Algorithms familiartiy written assignments, programming assignments, exams
Graphs and Paths familiarity written assignments, programming assignments, exams
Trees familiarity written assignments,  exams
Binary Search Trees mastery written assignments, programming assignments, exams
Hash Tables mastery written assignments, programming assignments, exams
Priority Queues mastery written assignments, programming assignments, exams
Splay Trees mastery written assignments, programming assignments, exams
Merging Priority Queues mastery written assignments, programming assignments, exams
The Disjoint Set Class familiarity written assignments,  exams
Dynamic Programming exposure written assignments, programming assignments, exams
Greedy Algorithms exposure written assignments,  exams
LZW Compression exposure written assignments,  exams

Requirements:

Programming Assignments: There are approximately ten programming assignments during the semester.  The point values of the programming assignments are not commensurate with the time involved to complete them.  Programming assignments should be viewed as essential preparation for exams, rather than work that is adequately rewarded.  All programs are to be written using C++.  You may use any computer system you desire.  Each program must be your own work (this includes not allowing a tutor to write your programs).

All programming assignments are to be turned in using the Eagle system (there is a link on the course page). Assignments turned in after 11:59:59 p.m. on the date due are late.  Students are responsible for turning in their programs on time.

I rarely alter the due date of an assignment, and will not do so unless all students can be informed of the change at least two days before the original due date.  Computer failures and file loses are a part of dealing with computers and will not be considered an excuse except in extreme circumstances.

Use the Style Guidelines available from the class web page. Your programs are graded based on these guidelines; make sure you understand them.  You will lose points for violating the standard.  Programming assignments are graded as follows:

bullet40% Program contains no functional errors and produces correct output.
bullet30% Efficient, well designed, extendible code.
bullet15% Readability, good variable names, readability.
bullet10% Comments.  Well commented source code is often a necessity for others who will read your code. This includes explanation of variable names, functions, and descriptions of chunks of code. Note, comments should not be on every line.
bullet5% Format of output is pleasing and easy to understand.  A person should be able to tell what the program does my just looking at the output.  Put enough information in the output so this is true. 

Programming is an important part of this class.  You cannot receive higher than a D+ if you are missing any programming assignments or you have less than 60% of the programming points.  This is true regardless of the total points earned. 

There are typically a few written homework questions included with each assignment.  Written homework provides an excellent framework for achieving the goals of obtaining a working knowledge of data structures, perfecting programming skills, and developing critical thinking strategies to aid the design and evaluation of algorithms.  Since programming has a high overhead in terms of program entry and debugging, all important topics in this course cannot be covered via programming projects.  Written homework exercises allow students to learn important material without a high time investment.  You can perfect your programming skills without spending hours at the computer and can get feedback on your thinking skills from your study partners.  Students who consistently do quality homework have far superior test scores. 

Exams: There are three midterm exams, each worth 100 points, given on the days specified in the calendar below. Exams cover material presented in class, in the book, and on the programming assignments. I do not give makeup exams. The final exam is comprehensive, is not optional, and is not given early. Please verify that you are able to take all the exams on the dates specified.

Grading:

Homework Assignments 200
Exams 300
Total 500

You may be given an F if either your overall average is below 50%.  Remember, you cannot receive higher than a D+ if you haven't turned in all the programming assignments or don't have over 60% of the possible points on the programming assignments. 

If you haven't already, activate your computer account on the cluster.  All communication with you is done through this account.  Current scores can be checked at any time by going to the Eagle system.  Special announcements about the class are e-mailed to you, so it is suggested that you check your e-mail daily.

horizontal rule

Course Outline:

Chapter Topic
6 Algorithm Analysis
8 Recursion
9 Sorting Algorithms
15 Graphs and Paths
19 Binary Search Trees
20 Hash Tables
21 A Priority Queue: The Binary Heap
22 Splay Trees
23 Merging Priority Queues
24 The Disjoint Set Class

 

Regrading: If you feel that a program, written assignment, or exam has been graded incorrectly, submit a concise written summary of your concerns to me.  These requests should be submitted within a week of the return of the assignment or exam.

Etiquette: My time at the university is spent in two major chunks: time teaching and time doing research.  As a university professor I am expected to excel in both areas. In order for our relationship to be a happy one, you need to understand where I'm coming from.
bulletMondays, Wednesdays, and Fridays the majority of my time is spent with office hours, teaching, and class preparation. All my office hours are scheduled for these days.
bulletTuesdays and Thursdays are dedicated to research, graduate students, and committee work. If my door is open and I am not with someone, I am happy to help you.  However, my free hours on these days are extremely limited, so you should not plan on catching me.

Late Work: The most common problem in this class is failure to complete the programs on time. Students are typically optimistic about the amount of time it takes to write a program, and tend to budget their time for the best possible case instead of for the average or worst case.  In addition, when problems do arise, a person tends to think the she/he is the only one with such unforeseen problems and anticipates exceptions will certainly be made.  Once a person gets behind with one program, it is very common to be behind on many programs either because a late finish on one dictates a late start on the next or because the penalty was not sufficient to avoid similar pitfalls.

Late work creates difficulties in grading.  Unless a very strict policy is enforced, chaos reigns.  It is not that I am insensitive to your personal problems, but rather that I must insist that you rise above them. When the instructor grants an extension to one student, it is unfair to the other students who would have benefited from such special treatment.

All programming assignments are due at 11:59:59 p.m. on the date specified. However, each student is entitled to one personal emergency.  Thus, you are allowed to turn in one program up to two days late (48 hours) without penalty (and without explanation). When the personal emergency has been used, no late work is accepted.

Code Reuse: For this course, it is almost never appropriate to copy code from the book or another source.  When you graduate, you will often pull code from another source, but at this stage in your development, you need to write it!  I try to make the assignments different from what you can find in books or on the web, but sometimes that makes the assignments harder than I would like.  When I ask you to write code that has been written by thousands of others before you, you still need to write it so you appreciate it, so you learn the lessons contained therein.  You learn next to nothing by copying it from elsewhere. 

In English, if you are to write a paper, you are not allowed to find a good one on the web and turn it in.  In CS, it is a little different, because you are encouraged not to reinvent the wheel.  However, in this class, I want you to "invent the wheel.''  If you don't know how the wheel was build, you can't improve upon it.  Learning must be done in layers.  I can't teach you how to code exotic programs unless you have done the simpler things.  Writing the simpler things yourself - independently of the book - is necessary to form the correct foundation for what you need for later algorithms. 

In any course, you should never use someone else's product without clearly stating where it came from.  To use someone else's creation without giving them credit is cheating.  Here's the approach I would try.   Study the book.  When an assignment is given, try to do it without looking at anything.  If you can't, study the book again - but before you start coding, shut the book.  Then, you know that you have retained the most critical parts of the design. 

Cheating: Although you may collaborate on problem solving, each person must write, debug, and test his/her own work.  Some students feel that if they worked with the other person for a long period of time (as opposed to just copying another's work without any personal effort), they haven't cheated.  That is not true.  Note, you don't have to feel guilty for what you have done to have it be cheating. There are degrees of cheating.  Copying another person's code (with or without their knowledge) is cheating.  However, if another person helps you so much that the result isn't your work, then it is still cheating, regardless of how many hours you spent in the process.  Some think that because the course is demanding, it gives them license to cheat.  Nope!  Cheating is cheating.  There is no set of circumstances that justifies it. 

Submitting projects which include part or all of code/text that is obtained from sources such as a text book or a site on the Internet, without properly acknowledging the source(s) of the code/text in your submission is considered cheating.  In most cases, such "borrowing'' is not permitted, with or without proper acknowledgement.  In case of doubt, talk to me about your intention to include such code before using it. 

I do not recommend designing the code with others because it is difficult to pull yourself away from the group and do your own work.  For every problem you encounter, you want to know how others in your group solved that problem.  Copying code from the text or other sources (including tutors and consultants) is not allowed unless specifically indicated.  Do not allow someone else to write the code for you no matter how helpful it would be.  Cheating will be dealt with severely.  The penalty given is worse than not having done the assignment, written the program, or taken the exam (i.e., the least penalty possible is negative points).  When cheating occurs, a letter to that effect is placed in your file and a copy is sent to the dean's office.  Some excuse their cheating by saying "I was under so much pressure and just ran out of time.''  This is like saying, "I am honest until it is inconvenient.''  Cheating is not tolerated. 

Flagrant cheating involves turning in another's work as your own (even if that work was done by a tutor).  However, there are many other forms for dishonesty that are also considered cheating. Allowing others to copy from your work is considered cheating, and both of you will be penalized. Do not put your friends in an awkward position by asking them to help you cheat. If there are any questions, please refer to the departmental cheating policy.

Incompletes: According to university policy, incompletes are not to be given for poor performance. There will be no incompletes given except for conditions beyond the student's control. Such conditions have to have written documentation.  The term "conditions beyond the student's control" includes (1) incapacitating illnesses that prevent a student from attending  classes for a period of at least two weeks; (2) a death in the immediate family; (3) financial responsibilities requiring a student to alter course schedule to secure employment; (4) change in work schedule as required by an employer; or (5) other emergencies of this nature.  When an incomplete is given, it is anticipated that the remaining work will be finished within two or three weeks. If the course must be retaken to make up the work, an incomplete is not appropriate.  There are provisions in case of emergency to permit a student to withdraw (grade of W) from a course after the regular drop period when it is not feasible to give an I.

ADA Statement: If a student has a disability that will likely require some accommodation by the instructor, the student must contact the instructor and document the disability through the Disability Resource Center, preferably during the first week of the course.  Any requests for special considerations relating to attendance, pedagogy, taking of examinations, etc., must be discussed with and approved by the instructor.  In cooperation with the Disability Resource Center, course materials, can be provided in alternative formats - large print, audio, diskette or Braille.

Class Fees: Associated with this class is a fee of $25. The purpose of this fee is to supplement the department's operating budget to allow it to staff facilities and maintain the associated hardware and software that is necessary for this class.  While the student computer fee does cover a portion of the costs to operate some of the department's laboratories, the specialized requirements of this and other computer science classes require this additional funding.

Important Dates:
July 7 - last day to add
July 11 - last day to drop with a "W" notation
July 15 - last day to drop with "WF" on transcript


For problems or questions regarding this web contact the class lackey.
Last updated: August 28, 2006.