There will be 2 in-class midterm exams, worth 22% each
The best 8 out of 10 assignments will be worth 20% total
The final exam is worth 35%
1% for completion of course evaluation survey at the end of the semester
If the grades are to be curved, they will only be curved up.
Most assignments are out for one or two weeks, with about three algorithm design problems per week that it is out. ~Two-thirds of the problems are written and the other ~third is based on applications by implementing algorithms in Python. They are to be submitted in pairs, but you are welcome to submit alone.
The purpose of the assignments are to provide practice with the algorithm design techniques covered in lecture, and in the implementation problems, to have hands-on experience employing them. (You will also get practice in recitation before the assignments on the same topics are due.) Hence, you should not split the problems amongst yourself and your partner then work separately, but rather work together on all problems. You may also work by yourselves at first, then come together to discuss each others' work before creating a single solution that you submit.
For each written problem, include your and your partner's names and NetIDs, and then cite any external sources or other collaborators (see Collaboration below).
Your algorithm solutions should include the following components, unless specified otherwise:
A concise, unambiguous, description of your algorithm. If it is consists of running an algorithm covered in lecture/recitation/previous assignments, you need only to state which algorithm. If your algorithm is obtained by making modifications to algorithms from elsewhere in the course, you need only to describe those changes. Your description may be in pseudocode or English; please do not give actual runnable code which is always less readable.
Describe what problem your algorithm actually solves. In some cases, the problem is exactly as it was described on the assignment (still state this if this is the case), but in many cases your algorithm will have additional parameters, take a different structure as input, or have other differences.
Justify that your algorithm is correct; that is, that your algorithm actually solves your stated problem. Formal proofs often use induction and/or loop invariants. When using algorithms from elsewhere in the course, you can of course use the fact that they are correct.
State how to use your algorithm to solve the given problem.
State and justify the running time of your algorithm, e.g., by deriving a recurrence that bounds the running time then solving it with recursion trees.
In addition to your partner, you are free and encouraged to consult any external resources you find useful (yes, even ChatGPT). The Introduction chapter of our textbook includes a non-exhaustive list of many other books you might find useful. However, you and your partner absolutely must write everything in your own words and, for each problem, cite any external resources used and list the names of everyone you worked with (except your partner, of course). You do not need to cite lecture, recitation, the course textbook, or any other materials that we provide. Give credit where it is due. For example, submitting someone else's solution (even from previous years) with minor changes will be considered academic dishonesty.
We note that it is important to be mindful of how you choose to approach completing the assignments in light of the policy above. While the homework assignments compose a substantial portion of your final grade, the rest of the grade is composed of exams which are done alone.
For writing up your solutions, we recommend using LaTeX. However, answers typed in other text processing software with correct formatting and properly converted to a PDF file will also be accepted. For example, Microsoft Word has an equation editor.
Handwritten answers are accepted, but they must be legible, aligned with the frame, in PDF format, and with high-quality scans/pictures. Whether your handwritten submissions are legible is up to the discretion of the graders. Please use a scanner app or an actual scanner and not just your default camera app.
Illegible or unviewable submissions will not be graded and will not receive any credit. Check your PDFs on Gradescope after submission!
All problem statements and associated Python files will be available on Sakai, and you will submit your solutions (both written and programming) to Gradescope, accessed via Sakai. Please let us know if you have trouble with the links.
After submitting your PDF for written problems, Gradescope will prompt you to label the pages to match each part/subproblem. Please do so carefully; this is considered a required part of the upload process. Then add your partner as a Group Member to your submission so that the assignment grade is also associated with them.
After submitting your programming assignments, your submission will be graded by the autograder. You should see your grade and any feedback shortly after submission. You can resubmit any number of times before the deadline. However, we do not recommend that you rely solely on the autograders to test and debug your code.
Assignments are due at 11:59PM (unless otherwise stated) on Gradescope. Assignments submitted between 12:00AM and 12:29AM on Gradescope will be accepted, but penalized with a 10% deduction of the final grade.
Beyond 12:30AM, there is no credit for late submissions, except for STINFs.
The maximum extension for a STINF is two days, but we will usually ask that you submit earlier than that. You should send your STINFs to both Kamesh and Alex, and should receive an email after the homework deadline with instructions. Note that your final assignment grade is computed using your best 8 assignments grades (your lowest 2 are dropped).
Please let us know in advance if you are missing a midterm exam. For reasons other than a STINF, we would need some documentation. It is at our discretion whether to entertain such a request.