Computer Science 226
Algorithms and Data Structures
Spring 2010

Course Information | Assignments | Exercises | Lectures | Exams | Booksite


Below are links to the programming assignments. This list is tentative and is to be considered subject to change. Once the assignment leaves the "not yet updated for Spring 2010" part of the table, no significant changes will be made. The checklist link associated with each assignment points to clarifications, test data, and hints that might be helpful in completing the assignment.

1 Percolation Tuesday, 2/9 checklist submit
2 Deques and randomized queues Tuesday, 2/16 checklist submit
3 Pattern recognition Tuesday, 2/23 checklist submit
4 8 puzzle Tuesday, 3/2 checklist submit
5 The Markovian candidate Friday, 3/26 checklist submit
6 WordNet Tuesday, 4/6 checklist submit
8 Burrows-Wheeler Tuesday, 4/20 checklist submit
7 Kd-trees Tuesday, 5/4 checklist submit

Grading policy.  Your code will be graded for correctness, efficiency, clarity, programming style (including comments), and elegance. It is your responsibility to describe how you have completed the assignment in the submission, not ours to glean this information from your code.

Lateness policy.  Programming assignments are due at 11pm on the date specified, with a 3-hour grace period. Late assignments are assessed a 4-point penalty per day or partial day: 0-3 hours late (no penalty), 3-24 (4 pts), 24-48 hours late (8 pts), etc. Your first 16 lateness points are automatically waived.

Collaboration policy.  Programming is an individual creative process much like composition. You must reach your own understanding of the problem and discover a path to its solution. During this time, discussions with other people are permitted and encouraged. However, when the time comes to write code that solves the problem, such discussions are no longer appropriate: the code must be your own work. If you have a question about how to use some feature of Java, the operating system, or some other relevant application, you can certainly ask your friends or the teaching assistants, but specific questions about code you have written must be treated more carefully. For each assignment, you must specifically describe in your readme.txt file, whatever help (if any) that you received from others and tell us the names of any individuals with whom you collaborated. This includes help from friends, classmates, lab TAs, and course staff members.

Do not, under any circumstances, copy another person's code. Incorporating someone else's code into your program in any form is a violation of academic regulations. This includes adapting solutions or partial solutions to assignments from any offering of this course or any other course. Abetting plagiarism or unauthorized collaboration by "sharing" your code is also prohibited. Sharing code in digital form is an especially egregious violation: do not e-mail your code or make your source files available to anyone.

There is one exception to the code-sharing rule: You may adapt code from the COS 126 or COS 226 course materials provided that you explain what code you use, and cite its source in your comments. An example citation appears in

This policy supplements the University's academic regulations, making explicit what constitutes a violation for this course. Princeton Rights, Rules, Responsibilities asserts:

The only adequate defense for a student accused of an academic violation is that the work in question does not, in fact, constitute a violation. Neither the defense that the student was ignorant of the regulations concerning academic violations nor the defense that the student was under pressure at the time the violation was committed is considered an adequate defense.
If you have any questions about these matters, please consult a course staff member. Violators will be referred to the Committee on Discipline for review; if found guilty, you will receive an F as a course grade plus whatever disciplinary action the Committee imposes.

Pair programming.   For all assignments, unless explicitly prohibited, you may work jointly with one partner in any precept. In such cases, both partners are responsible for jointly contributing to and understanding all parts of the completed assignment. In this case, only one partner submits the code and analysis; both partners receive the same grade.

What is pair programming? Pair programming "is a practice in which two programmers work side-by-side at one computer, continuously collaborating on the same design, algorithm, code, or test." One partner is driving (designing and typing the code) while the other is navigating (reviewing the work, identifying bugs, and asking questions). The two partners switch roles every 30-40 minutes, and on demand, brainstorm. Before pair programming, you must read the article All I really need to know about pair programming I learned in kindergarten.

Submission.  Submit your solutions electronically via the links at the top of this page. Be sure to write your name, login, and precept number on every file you submit. Also be sure to click the Check All Submitted Files button to make sure that you have submitted all of the required files and that they compile cleanly. If you do not follow these directions, you will lose a substantial number of points. You can resubmit and unsubmit files as needed up until the submission deadline.