Homework Policies
The course staff must critically examine
hundreds of pages of homework submissions this semester! We desperately need your help to make sure homeworks are graded fairly and returned quickly. If you have any questions or concerns about these policies, please don't hesitate to ask in lecture, in lab, during office hours, or on Ed Discussion.
I apologize in advance for the length of this document. Most of this stuff is obvious to almost everybody, but after teaching algorithms for a couple of decades, I've seen a lot of strange things.
Homework handouts and solutions are available on a different page.
What homework is for
Algorithm design and analysis is a set of skills that can only be developed through practice and feedback, just like cooking or basketball or integration or gardening or interviewing or teaching. Yes, there are several things that are useful to know and understand, but that knowledge and understanding is not enough. That comfortable feeling of "Oh, sure, I get it" when you watch a well-presented lecture, hear a TA carefully explain a homework solution, or read a solution written by Gemini or Claude, is a seductive, dangerous trap. You can only learn to do the thing by actually doing the thing.
The homework is your opportunity to practice doing the thing. The lectures and textbook and office hours and labs and guided problem sets hopefully provide good intuition and motivation and justification for the skills we want you to develop, but the best way to develop those skills is by trying to solve the problems yourself. The practice is far more important than the solution.
We aren't really asking you for solutions; we already have solutions. We're asking for examples of your skill in developing solutions, so that we can just you feedback to help you improve.
Because the homework is intended to help you develop new skills, you are likely to get stuck; for some problems, you may have no idea how to even start. And that's okay. Getting stuck is completely normal, even for experts. That's why we have office hours and a textbook and lecture videos and PrairieLearn and Discord and a library and Wikipedia; helping you get unstuck is part of our job. That's why we encourage you to work together; not so that you can share solutions, but so that you can share ideas and suggestions and feedback.
Similarly, you won't necessarily develop a complete solution to every homework problem yourself, and you may not be able to tell at first which parts of your final submitted solution are correct. And that's also okay. Asking for help is normal, even for experts. That's why we provide homework solutions—not just to show you the answer, but to help you see your own work more clearly. That's why we grade your homework submissions—not to give you points, but to give you feedback to help you improve.
To get the most out of any particular homework problem, it's important not just to aim for a solution to that specific problem, but to pay attention to how you're solving it. Every problem is an opportunity to practice that kind of problem. And I don't just mean every assigned homework problem; that includes every problem presented in class; every problem described in the textbook or notes, every lab problem, every solved problem in the homeworks, and even every exam problem.
It's also important to aim for improvement—not perfection (which is impossible), not being better than other people (which can be toxic), but doing the thing better than you did yesterday, every day.
In practice, course grades in CS 374 are determined almost entirely by exams, which ask you to demonstrate the skills that the homework is meant to develop. Ultimately, homework scores have minimal impact. Even if your only goal is to optimize your course grade, practicing with the homework problems—developing both your skill and your confidence in that skill—is more important than getting the right answers.
Collaboration and Outside Sources
You can use any resource at your disposal, but you must explicitly cite every resource you use.
Except for Homework 0, groups of up to three people can submit joint solutions, and we strongly encourage you to work with students outside your homework group and to use every resource at your disposal. However, you must write your solutions yourself, in your own words, using your own fingers, and you must give proper credit to your collaborators and other sources.
Every homework submission must include three disclosure statements, even if you did not use any external resources. Separate disclosures are required for each numbered homework problem; submissions without all three disclosure statements will not be graded. If you are typesetting your solutions with LaTeX, you are welcome to use our solution template.
- Collaborators: A list of everyone outside your homework group that you worked with.
Potential collaborators include other students in the class, other students not in the class, faculty and staff, family members, pseudonymous Reddit users, and random strangers on the bus. The only people you are not required to cite are are the course staff and members of your homework group (listed on the top of the first page of the solution). Be generous; if you're not sure whether someone should be included in your list of collaborators, include them. For discussions in large groups, where collecting individual names is impractical, it's okay to write something like "Monday study group" or "SIGPWNY meeting" or "family reunion".
If you did not work with anyone outside your homework group, write “Collaborators: None”.
- Sources: A list of every external source you used tp develop the submitted solutions.
External sources include reserach papers, textbooks and lecture notes from other classes, other web resources (including Leetcode and its ilk), YouTube videos, generative AI tools, and bathroom graffiti. The only sources that you are not required to cite are the official course materials (lectures, lecture notes, homework solutions, and exam solutions from this semester) and sources for prerequisite material (which we assume you already know). Be generous; if you're not sure whether your use of an outside source deserves citation, cite it.
If you did not consult any external sources, write “Sources: None”.
- AI use: A description of every AI tool you used and how you used it.
You are welcome to consult generative-AI tools, just like any other resource. If you do use generative-AI tools for any reason, you must include each of those tools in your list of sources (just like any other source), and you must include a brief explanation of how you used each tool. Potential uses include finding external sources, reviewing or clarifying course material, asking for examples or hints, implementing and experimenting with algorithms, sanity-checking draft solutions, correcting spelling and grammar mistakes, translating math into LaTeX syntax, or writing draft solutions from scratch (which you then rewrite yourself in your own words). Be honest, generous, and detailed. For example, don't just write "to polish my writing"; describe exactly how you used AI to polish your writing.
If you did not use any AI tools, write “AI use: None”.
Late, Dropped, and Forgiven Homework
Homework can be submitted up to 24 hours late for 80% partial credit, but no later.
We will drop your six lowest homework problem scores.
-
Homework assignments are due every Tuesday at 9pm, except in weeks with exams. Gradescope will accept homework submissions until Wednesday at 9pm, but all submissions received after 9pm Tuesday will receive a 20% late penalty. We will not accept homework more than 24 hours late for any reason.
-
Gradescope allows multiple submissions for the same problem, but only the last submission actually counts. In particular, late submissions will be penalized even if an earlier submission for the same problem was correct and on time.
-
To offset this rather draconian lateness policy, we will drop your six lowest homework problems scores (equivalent to two weekly assignments) when we calculate final grades.
-
Forgiving homework:
We may forgive coursework under extreme circumstances that prevent the submission of a significant fraction of the homework, such as a documented disability, illness, injury, or other emergency. We will compute your final course grade as if your forgiven homeworks do not exist; your other coursework will have more weight. Students requiring accommodation for a disability should first contact DRES. Please ask Chandra or Jeff for further details.
Deadly Sins
We've identified a small number of bad writing (and thinking) habits that are strongly corre,d with poor performance in algorithms courses, but are easy to avoid. Homework and exam solutions that commit any of these sins will be penalized. We’re not trying to be scary or petty (Honest!), but we do want to break a few common bad habits that seriously impede mastery of the course material.
-
Don't cheat.
Write everything in your own words, and properly cite every outside source you use in the required disclosure statements.
-
Write general 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.
-
Write for humans, not compilers.
Algorithms should be described using pseudocode and/or structured English. We reserve the right to give bare code a grade of zero, even if it is perfectly correct. Whenever you introduce a new abstract object (for example, a graph, a recurrence, a data structure, or an algorithm), you must explain in English what it means.
-
In particular, whenever you describe a function/algorithm with input parameters, you must explicitly describe the meaning of each input parameter and exactly how the output of your function/algorithm depends on those input parameters.
-
We are not asking you to separately explain your algorithm line by line in English; rather, we want a complete specification of the problem that your algorithm is solving. Describe how to use your algorithm, not just how it works.
-
If the problem statement already includes a complete specification of your algorithm, you do not need to repeat it. On the other hand, if your algorithm uses additional input parameters or solves a more general problem than the one we ask for, then the problem statement does not include a complete specification of your algorithm.
-
You (and your clanker slaves) should already be doing this whenever you write code. After all, code is never written primarily for the compiler. Code is written primarily for the next programmer, who doesn't share your intuition, training. or intelligence, and who probably thinks your favorite programming lagnuage sucks. You know, you in three months.
Just keep doing it.
-
Greedy algorithms require formal proofs of correctness.
If you use a greedy algorithm, you must give a formal proof of correctness, or you will get zero credit, even if the algorithm is perfectly correct. Are you sure you don't want to use dynamic programming instead?
Logistics: How to submit
- Submit homework solutions as paginated PDF files on Gradescope. Submit one PDF file for each numbered homework problem. If you write your solutions on a tablet, your submitted PDF file must be broken into standard US-letter or A4 pages; do not submit smaller extracts or one long scroll. Gradescope will not accept other text file formats such as plain text, HTML, LaTeX source, or Microsoft Word (.doc or .docx). Homework submitted as images (.png or .jpg) will not be graded.
-
Except for Homework 0, groups of at most three students can submit group solutions. We strongly encourage (but will not require) every student to work in a group with at least one other student. Students are responsible for forming their own homework groups. Groups may be different for each numbered homework problem. Gradescope automatically limits groups to at most three students.
-
Exactly one member of each group submits the solution to each problem. Even if the groups are identical, the submitter may be different for each numbered homework problem.
-
The submitter also tells Gradescope the names of the other group members. (The other group members must have already enrolled on Gradescope.) Gradescope then automatically applies the grade for that submission to everyone in the group. If this information is not entered correctly, the other group members' grades can be delayed or lost entirely.
-
The submitter also selects which pages are relevant for each lettered subproblem ((a), (b), etc.).
-
As error correction, each submitted PDF file must include the following information in large friendly letters at the top of the first page.
- The homework number
- The problem number
- The name and NetID of every group member.
If you are typesetting your solutions with LaTeX, you are welcome to use our solution template.
-
If you discover that you did not receive credit for your group's homework submission, please ask someone in your group to submit a regrade request. We will use the information at the top of the first page to verify that you are a member of that homework group.
Please make it easy for the graders to figure out what you mean in the short time they have to grade your solution. 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 in the required disclosure statements. If you fail to properly cite a collaborator or an outside source, you are taking credit for ideas that are not your own; that is plagiarism. Copying text from other sources, even with proper citation, even with the person's/author's explicit permission, even if you process the text using text spinner or similar AI tools, is plagiarism. Don't do that.
-
Please see our academic integrity policy for more details.
Be Clear
-
Write legibly.
You will lose points if the graders find your work difficult to read. Writing legibly also helps you think more clearly.
-
We recommend typesetting your homework, especially if you have sloppy handwriting. We recommend using LaTeX, but you are welcome to use whatever program and/or markup language you like. A LaTeX homework template is avialable.
-
You are welcome to submit scans of solutions hand-written on paper, provided they are clear and easy to read. Write with black ink (not pencil) on white unlined paper (not notebook or graph paper), and use a scanning app to create a high-quality PDF.
-
You are also welcome to submit solutions that were hand-written using a tablet, provided they are clear and easy to read. Write (primarily) with a black pen on plain white background. Make sure your exported PDF is broken into standard US-letter or A4 pages and that your text is legible even if the PDF is printed at actual size. Do not submit smaller snippets or one long scroll.
-
The graders have complete discretion to decide whether a submission is difficult to read. In borderline cases, the graders will first give a warning, asking the student for specific improvements in future homework submissions, rather than immediately deducting points. Please take this feedback seriously.
-
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.
-
Write carefully.
We can only grade what you actually write, not what you mean. We cannot read your mind, and we will not insult you by trying. If your answer is ambiguous, the graders are explicitly instructed to choose an interpretation that makes it wrong.
- Don't submit your first draft.
Revise, revise, revise. First figure out the solution, then think about the right way to present it, and only then start writing what you plan to submit. See also “write legibly”.
- 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, and on Ed Discussion!) For example, if the performance of your algorithm depends on how the input is represented, tell us exactly what representation you require. Yes, even if the assumption is “obvious”.
- Don't submit code.
Describe your algorithms using clean, human-readable pseudocode. Your description should allow a competent programmer to directly implement your algorithm, in their favorite language, using a software library containing implementations of every algorithm we’ve seen in class, without knowing what problem you're trying to solve. Oh, and they think your favorite programming language sucks.
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 "AVL tree" when you mean "balanced binary tree" or "dictionary". Don't write "depth-first search" when you mean "whatever-first search". Don't submit code; we want to see your ideas, not syntactic sugar. If your solution requires more than two typeset pages, you are probably including too many irrelevant details.
-
Don't regurgitate. Don't explain binary search; just write "binary search". Don't write the pseudocode for Dijkstra's algorithm; just write "Dijkstra's algorithm". If the solution appears on page 374 of Jeff's book, just write "See page 374 of the Jeff's book." 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, especially if you get the details wrong.
-
Don't bullshit. You will not get partial credit for word salad that happens to include some correct keywords.
Content: What to write
- Answer the right question. No matter how clear and polished your solution is, it's worthless if it doesn't answer the question we actually 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.
-
By default, if a homework or exam problem asks you to describe an algorithm, you need to do several things to get full credit:
- Describe the problem that your algorithm is supposed to solve. 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 must provide a brief justification for your solutions, as evidence that you understand why they are correct. Unless we explicitly say otherwise, we generally do not want a complete proof of correctness (because complete proofs would be too long, tedious, and unenlightening) but rather a high-level sketch of the major steps in the proof. Correctness arguments are required on exams only when we specifically ask for them.
- Analyze your algorithm's worst-case 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 recurrence, in which case you'll also have to justify your solution. We only care about worst-case running time. Unless we specifically ask otherwise, you do not have to analyze space.
- 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 usually won't 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 may not get any points, no matter how fast it is!
For each problem we assign, we have a target running time in mind. Correct algorithms that meet the target running time are worth full credit. Slower algorithms are worth significant partial credit. We typically deduct 2 or 3 points out of 10 for each extra factor of n in the running time; however, every correct and clearly presented algorithm, no matter how slow, is worth partial credit. On the other hand, algorithms that are faster than the target time bound are worth extra credit; again, we typically award 2 or 3 points for each factor of n. We usually do not give the target running time in the problem statement, because when we do, a lot more students submit incorrect algorithms with the correct running time. First make it work; then make it faster.
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!)