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.
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. Please do not give your homework to Jeff in class; he is fond of losing important pieces of paper.
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 paper (8.5" × 11") or a close approximation. Most US notebook paper is close enough. Use both sides of the page if possible.
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.
Clearly print the following information at the top of every page.
Your NetID (not your UIN)
The day and time of your discussion section
The homework number
The problem number
For example: "HW0 #3 — Jeff Erickson (jeffe) — Wed 2:00". For group solutions, print the name and NetID of every group member on every page, but please indicate only one discussion section. We use your NetIDs as error correction and to distinguish similar names; we will return your graded solutions in the indicated section.
Put your solution to each problem into the corresponding drop box. In particular, start each problem on a new sheet of paper, and don't 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.
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%
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.