The course staff must critically examine over five thousand pages of homework submissions this semester! We desperately need your help to make sure homeworks are graded and returned quickly. If you have any questions or concerns about these policies, please don't hesitate to ask in lecture, during office hours, on Piazza, or by email.
I apologize in advance for the length of this document. Most of this stuff is obvious to almost everybody, but after teaching this class for many years, I've seen a lot of strange things.
Each student must submit individual Homework 0 solutions.
Starting with Homework 1, homework solutions may be submitted by groups of up to three students. We strongly encourage (but will not require) every student to work in a group with at least one other student. Students are are responsible for forming their own homework groups. Groups may be different for each numbered homework problem.
Submit your homework solutions in the drop boxes in the basement of Seibel. There's a separate drop box for each numbered homework question. If you put your homework in the wrong box, we won't get it. Except for Homework 0, please do not give your homework solutions to Jeff in class; he is fond of losing important pieces of paper.
In extreme circumstances, we may forgive quizzes, homeworks, or even exams. Extreme circumstances include documented illness or injury, but do not include registering late, travel for job interviews or conferences, forgetting the homework deadline, or just not finishing on time. We will compute your final course grade as if your forgiven homeworks and exams simply do not exist; your other work will have more weight. Please ask Jeff for details.
Yeah, if you could just go ahead and make sure
you do that from now on, that would be great.
To keep grading fast and consistent, each numbered homework problem will be graded by a single person, and we will record grades for each problem separately. We need your help to make distribution of problems to graders possible.
Use standard US Letter printer/copier paper (8.5" × 11"). Most notebook paper is far too flimsy. Use both sides of the page if possible.
Start your solution to each numbered problem on a new sheet of paper.
Clearly print the following information in large friendly letters on the first page of each solution.
"CS 473 Fall 2013"
The homework number
The problem number
Your name
Your NetID (not your UIN)
For group solutions, print the name and NetID of every group member; we use your NetIDs as error correction and to distinguish similar names. On the first page, please also indicate one discussion section where we should return your graded solutions. We will provide templates for both hand-written solutions and LaTeX solutions.
If necessary, staple your solution for each numbered problem once in the upper left corner. Please don't use paper clips, tape, glue, spit, or rubber bands; don't try to keep pages together by folding or tearing. Do not staple your entire homework together.
Put your solution to each numbered problem into the corresponding drop box. In particular, start each problem on a new sheet of paper, and do not staple your entire homework together.
Nicely typeset homework will be given a small amount of extra credit. The graders get to decide what "nicely" means. If you want to typeset your homework, we strongly recommend LaTeX. (In particular, we recommend TeXShop for Mac OS X, TeX Live for Linux (already included in most distributions), and MiKTeX for Windows.) We will provide a LaTeX template for Homework Zero solutions.
Write sensibly.
You will lose points for poor spelling, grammar, punctuation, arithmetic, algebra, logic, and so on. This rule is especially important for students whose first language is not English.
Make the punchline obvious. Emphasize key points (for example, running times) by putting a box around them, using a highlighter, or something similar.
Write top-down, breadth-first solutions. Describe the key ideas behind your solution before going into details. The reader should understand your approach almost immediately. A clearly written solution that includes all the main ideas but omits some low-level details is worth more than a complete, correct, detailed, but opaque solution.
State your assumptions. If a problem statement is ambiguous, explicitly state any additional assumptions that your solution requires. (Please also ask for clarification in class, in office hours, or on Piazza!) For example, if the performance of your algorithm depends on how the input is represented, tell us exactly what representation you require.
Don't submit code. Describe your algorithms using clean, human-readable pseudocode. Your description should allow a competent programmer who has not taken this course to easily implement your algorithm in their favorite language.
Penn and Teller get 25%
Be Concise
Keep it short. Every homework problem can be answered completely in at most two typeset pages or five handwritten pages; most problems require considerably less.
Omit irrelevant details. Don't turn in the piece of paper you used to figure out your answer; copy the relevant information onto a new empty page. Don't write "red-black tree" when you mean "balanced binary tree" or "dictionary".
Don't regurgitate. If your answer is similar to something we've seen in class, just say so and (carefully!) describe your changes. Vomiting will cost you points. For example, if the solution appears on page 6 of Jeff's notes, just write "See page 6 of Jeff's notes." Similarly, don't explain binary search; just write "binary search".
Don't bullshit. If you don't know the answer, just say so. Answering “I don't know” (and nothing else) is worth 25% partial credit. The "I don't know" rule applies to every problem and sub-problem (except extra credit problems) on every homework and exam. Synonyms like “No idea” or “WTF” or "" are acceptable substitutes, but you must write something; a blank page is worth zero points. Readable, correct, but suboptimal solutions are always worth more than 25%.
Don't submit code. We want to see your ideas, not syntactic sugar.
List everyone you worked with on each homework problem. Again, we strongly encourage you to work together, but you must give everyone proper credit. If you work in a group of 20 students, then all 20 names should appear on your homework solution. If someone was particularly helpful, describe their contribution. Be generous; if you're not sure whether someone should be included in your list of collaborators, include them. For discussions in class, in section, or in office hours, where collecting names is impractical, it's okay to write something like "discussions in class".
Answer the right question. No matter how clear and polished your solution is, it's worthless if it doesn't answer the question we asked. Make sure you understand the question before you start thinking about how to answer it. If something is unclear, ask for clarification! This is especially important on exams.
Justify your answers. Unless the problem specifically says otherwise, every homework problem requires a proof. Without a proof, even a perfectly correct solution is worth nothing. In particular, the sentence "It's obvious!" is not a proof—'obvious' is often a synonym for 'false'! However, proofs are only required on exams if we specifically ask for them.
By default, if a homework or exam problem asks you to describe an algorithm, you need to do several things to get full credit:
If necessary, formally restate the problem in terms of combinatorial objects such as sets, sequences, lists, graphs, or trees. In other words, tell us what the problem is really asking for. This is often the hardest part of designing an algorithm.
Give a concise pseudocode description of your algorithm. Don't regurgitate, and don't turn in code!
Describe a correct algorithm.
Justify the correctness of your algorithm. You usually won't have to do this on exams.
Analyze your algorithm's running time. This may be as simple as saying "There are two nested loops from 1 to n, so the running time is O(n²)." Or it may require setting up and solving a summation and/or a recurrence, in which case you'll also have to prove your answer is correct.
Describe the fastest correct algorithm you can, even if the problem does not include the words "fast" or "efficient". Faster algorithms are worth more points; brute force is usually not worth much. We will not always tell you what time bound to shoot for; that's part of what you're trying to learn. However, if your algorithm is incorrect, you won't get any points, no matter how fast it is!
Some problems may deviate from these default requirements. For example, we may ask you for an algorithm that uses a particular approach, even though another approach may be more efficient. (Answer the right question!) Some problems may ask you to analyze the space used by your algorithm in addition to the running time.