"New CS 473": Homework and Exam Policies
The course staff must critically examine several 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. (So don't staple your entire homework together!) If you put your homework in the wrong box, we won't get it. Do not give your homework solutions to Jeff in class; he is fond of losing important pieces of paper.

We will not accept late homework for any reason. To offset this rather draconian policy, we will drop your eight lowest homework problem scores; see the grading policies for more details.

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.
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.

Homework solutions must be submitted on standard US Letter (8.5" × 11") printer/copier paper. Do not use notebook paper; it's much too flimsy. Use both sides of the paper if possible.

Start your solution to each numbered problem on a new sheet of paper. If necessary, staple each solution 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.

Don't staple your entire homework together. Otherwise, you won't be able to submit each problem into its own dropbox.

Clearly print the following information in large friendly letters on the first page of each solution.
 "New CS 473 Spring 2015"
 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 will provide templates for both handwritten solutions and LaTeX solutions.

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 solutions.
Please make it easy for the graders to figure out what you mean in the short time they have to grade your solution. A portion of every homework grade is specifically devoted to clarity and style.
If your solutions are difficult to read or understand, you will lose points.
Be Honest
 Write everything in your own words, and properly cite every outside source you use. We strongly encourge you to use any outside source at your disposal, provided you use your sources properly and give them proper credit. If you get an idea from an outside source, citing that source will not lower your grade. Failing to properly cite an outside source—thereby taking credit for ideas that are not your own—is plagiarism.
The only sources that you are not required to cite are the official course materials (lectures, lecture notes, homework and exam solutions from this semester) and sources for prerequisite material (which we assume you already know by heart).
 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".

Please see our academic integrity policy for more details.
Be Clear

Write legibly.
If we can't decipher your solution, we can't give you credit. If you have sloppy handwriting, use LaTeX. Please don't submit your first draft. Writing legibly also helps you think more clearly.

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. Writing sensibly also helps you think sensibly.

Write carefully.
We can only grade what you actually write, not what you mean. We will not attempt to read your mind. If your answer is ambiguous, we will deliberately choose the interpretation that makes it wrong. Writing carefully also helps you think carefully.

Avoid the Three Deadly Sins. Yes, we are completely serious about these. We reserve the right to add more Deadly Sins later in the course.
 Write solutions, not examples.
Don't describe algorithms by showing the first two or three iterations and then writing "and so on". Similarly, don't try to prove something by demonstrating it for a few small examples and then writing “do the same thing for all n”. Any solution that includes phrases like “and so on”, “etc.”, “do this for all n”, or “repeat this process” automatically gets a score of zero. Those phrases indicate precisely where you should have used iteration, recursion, or induction but didn’t.

Declare all your variables.
Whenever you use a new variable or nonstandard symbol for the first time, you must specify both its type and its meaning, in English. Similarly, when you describe any algorithm, you must first describe in English precisely what the algorithm is supposed to do. Any solution that contains undeclared variables automatically gets a score of zero, unless it is otherwise perfect.

Never use weak induction. Always, always, always use a strong induction hypothesis, even in proofs that only apply the induction hypothesis at n1. Why would you even want to tie n2 hands behind your back? Any proof that uses a weak induction hypothesis automatically gets a score of zero, unless it is otherwise perfect. Basically, weak induction should die in a fire.
 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, humanreadable pseudocode. Your description should allow a bright student in CS 225 to easily implement your algorithm in their favorite language.
 Don't submit your first draft.
Revise, revise, revise. After you figure out the solution, then think about the right way to present it, and only then start writing what you plan to submit. Yes, even on exams; do your initial scratch work on the back of the page.
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. Yes, I am aware of the crushing irony.
 Omit irrelevant details. Don't write "redblack tree" when you mean "balanced binary tree" or "dictionary". Don't submit code; We want to see your ideas, not syntactic sugar.

Don't regurgitate. Don't explain binary search; just write "binary search". Don't write the pseudocode for Dijkstra's algorithm; just write "Disjktra's algorithm". If the solution appears on page 6 of Jeff's notes, just write "See page 6 of Jeff's notes." If your answer is similar to something we've seen in class, just say so and (carefully!) describe your changes. You will lose points for vomiting.

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 required problem and subproblem on every homework and exam, but not to extra credit problems. Synonyms like “No idea” or “Je ne sais pas” or "WTF" 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%.
 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!)