CS 302 Announcements Goals Syllabus Resources Calendar Staff
italian beach and city
Algorithms and Complexity
Photo © Mark Farber (www.markfarber.com)


11/10/2017: Office hours updated:

10/31/2017: Change to office hours for this week ONLY. 11/01/2017: 3pm-5pm, 11/02/2017: 12-2pm, 11/03/2017: cancelled

10/27/2017: Due date of PA3 now Oct. 15. Exam solutions on my door.

10/01/2017: Changes to Office Hours for the week of 10/02. No drop-in on Wed, Thurs, Friday. Additional office hours: Drop-in: Monday 3-4:30,f Tuesday (usual): 8:00-9:30.. Also by appointment through Calendly: Wed 10:15-1pm, Thursday 2-5pm, Friday 11:15-2:45pm, via Zoom

9/23/2017: New office hour schedule:

9/23/2017: Error found in pseudocode in PS2. Now corrected (see calendar for link), but link to old version is there too (called "Old Version").

9/20/2017 PS2 has been replaced!! Please see new version below.


The study of algorithms is central to computer science. Algorithms are important from a practical perspective (when creating programs or software), but they are also crucial for addressing some of the BIG questions of computer science: what can computers do, and what resources do they need to do it?

Learning Goals are broad and somewhat immeasurable goals that I want you to achieve by the end of the course. Learning Objectives are concrete, measurable learning outcomes that will help you to reach the Learning Goals.

Learning Goals

Learning Objectives

After completing this course, students should be able to


The syllabus contains important information! You are expected to be familiar with all of the information contained in the syllabus.

Time and location: Monday, Wednesday, Friday 1:45-2:35 PM in MBH 538

What do I call you? Please call me Professor Kimmel or Professor. I use the pronouns she/her/hers.

Professor Office Hours: in MBH 635.

Tutor Office Hours: See the CS Tutoring Site

Super Useful Department Wiki: Here!

Communication: I will use e-mail to communicate with you about urgent matters. Please check your Middlebury e-mail at least once a day. I will post less urgent messages (e.g. a change in office hours) to the announcements section of this site. Please check the Calendar regularly for an up-to-date record of assignments, due dates, and lecture notes.

There are no required texts. I will post lecture notes after each lecture. If you would like a different perspective from the one I provide in class, I suggest the following two texts, which are on reserve at Armstrong Library:

CSCI 200 and 201. We will be writing a lot of proofs in this course, so please review your proof writing notes from 200. Here is a short guide to writing a good proof.

Growth Mindset:
I expect all students to work to develop a growth mindset: awareness that intelligence is not fixed, and that your ability in any skill will increase through practice. I will provide many low-stakes opportunities for you to practice skills in this course, including in-class activities and problem sets.

Part of developing a growth mindset is viewing critical feedback (through grades or other forms of assessment) for what it is: an opportunity to understand your weaknesses and improve on them, rather than a sign of failure. This perspective will not only tend to improve your grades, but will make learning more enjoyable.

Group Work:
You will be assigned to a small group for in class discussions and problem solving. Groups will be assigned randomly. Diverse groups tend to perform better than homogeneous groups, so please think about what diverse perspectives or background you might bring to your group.

Technology in the Classroom
You may NOT use any type of cell phone, tablet, or computer during class, unless you have a compelling reason. Please come talk to me if you have a compelling reason for wanting to use technology. Otherwise, I will ask you to put the technology away, or step out of the class while using it. Taking notes on a laptop has been shown to be less effective and lower quiz scores not only for the student using the device, but for nearby students as well (because it distracts those around you).

Office Hours and E-mail Policy
Please come to office hours with specific questions, comments, or concerns. I will not answer coding questions or problem set questions via e-mail, except for logistical questions.

Problem Sets
As mentioned above, problem sets are an opportunity for you to practice the skills of this course, and to become aware of areas for further practice and improvement. Because of this, only a small part of your grade is based on the correctness of your responses.

Each problem set will have two parts:

Part 1:

Part 2:

Please see the Resources tab for a sample problem set procedure.

Programming Assignments
Programming assignments are an opportunity for you to apply your knowledge

Quizzes and Tests
One of the primary ways I assess your learning is through quizzes and tests. However, you should also view these assessments as feedback on your own learning. There will be quizzes on most Fridays. Quizzes will usually consist of two problems, one from topics on the problem set due earlier that week, and one from earlier topics. (Questions will typically be similar to in-class activities or problem sets questions.)

The midterm will be self-scheduled, with pick-up from my office door from Wednesday Oct 18 at 11:05 until Friday Oct. 20 at 6pm.

The final will be scheduled, Dec. 16, 2-5pm.

Get Out of Jail Free Passes
I will drop your two lowest problem set scores, your two lowest quiz scores, and your lowest programming assignment score.

Evaluation and Grading
Your final grade will be determined as follows:

Note: rubric points do not necessarily correspond to percentage points.

Excused Absences and Extensions:
If you miss class because of sickness, a doctor/nurse's note should be provided. If you will miss class because of a religious observance, please notify me within the first two weeks of class. Other absences will be dealt with on a case by case basis, but please let me know as early as possible if you will not be able to attend a class. If you miss class, you are still responsible for the missed material. You should carefully read the lecture notes for the class you miss. I will be happy to answer questions related to the lecture, but I will not repeat the lecture for students who missed the original. Quizzes will be rescheduled as necessary for students with an excused absence.

In extenuating circumstances (e.g. personal crisis, serious illness, family problems) extensions for assignments or quizzes may be granted. Please contact me in this case.

Honor Code:
You are expected to maintain the highest level of academic integrity in this course. This means that work you submit must be the result of your own individual effort. You may discuss problem sets and programming assignments with other students in the course, but you may not collaborate in the actual writing of problem sets or code. (This is obviously to your benefit as a learner, since your skills will not improve if you do not practice those skills!)

If you work with another student on a problem set or programming assignment, or if another student contributes a significant idea that you use, please acknowledge that person (e.g. "I worked with xxx on this problem.") For programming assignments put this acknowledgment in a comment header.

Regarding problem sets: You may not read, copy, or possess another student's solutions, solutions from previous semesters, or solutions you may find online, while working on Part 1. While working on Part 2, in order to grade your problem set, you may obviously look at the written solutions I provide, but you can also look at other students' solutions in order to discuss self-grading. The reflection must be entirely your own work.

Regarding programming assignments: You can help one another, but I do not want to see identical assignments that differ only in small ways. If someone does show you code (as an explanation or asking for debugging help), do not copy it. Retain ideas, and go away and write your own version later. I encourage you to help classmates to debug misbehaving code. You are welcome to use the internet to look up approaches for basic language functionality, but you may not look up code that implements the complete solution.

The exams and quizzes must be entirely your own work. You may not share any information about tests or quizzes with any other students, either within or outside of the course.

Academic Accommodation:
Students with documented disabilities who may need accommodations in this class (e.g., extra time on exams) are encouraged to contact me as early as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through the Student Accessibility Office. Please contact one of the ADA Coordinators. Jodi Litchfield cab be reached at litchfie@middlebury.edu or 802-443-5936 and Courtney Cioffredi can be reached at cioffredi@middlebury.edu or 802-443-2169 for more information. All discussions will remain confidential.

This syllabus is a guideline, and parts may be subject to change if we find that they are not conducive to your learning.


Detailed Problem Set Procedure (with examples)

The following is a sample procedure for how problem sets work in this course.

  1. A problem set is assigned, usually on Mondays. Here is a sample problem set.
  2. The following Monday, you should turn in your answers to the problem set (this is Part 1 of the assignment). For example if you use Latex, your solution to the sample problem set might look like this.
  3. The same Monday that you turn in Part 1, I will post solutions, which would look like this for the sample problem set.
  4. The Wednesday after you submit Part 1, Part 2 will be due. Part 2 contains two subparts:
    • You should submit a marked up (using a pen whose color is not the same as the color of your solutions), graded copy of the problem set you submitted for Part 1. You should grade using the solutions I provide and these rubrics. You can also come discuss grading with me or the TAs. Note that the number of points next to a problem informs you which rubric you should use. Here is an example of grading for the sample problem set. In the sample, the problem is an 11-point problem, so you should use the rubric for 11-point problems. There are three categories for 11-point problems, so the grade includes a subgrade for each part, and an explanation as necessary.
    • You should submit a reflection on your experiences while working on and grading the problem set. Here is a worksheet with suggested questions to answer. For example, here is an example of a reflection for the sample problem set.
    Please staple the reflection to your graded problem set, and hand them in together. Your name, problem set number, and your total points should be visible on the top sheet.
  5. After turning in your self-grade, we will give you our grade and comments for Part 1 of the problem set, using the same rubric you used for your self-grade (i.e. this one). (This will hopefully be done through Canvas.)
  6. Based on the feedback from your self-grade and from our comments and grade, you should tailor your study for the quiz that week.
  7. We will return the combined problem set and reflection with a final grade for Part 2. Part 2 will be graded using this rubric.

Best Practices for Problem Sets

You grades for nearly all problem set questions will depend on the clarity of your writing and thinking, and not just on correctness. It is very hard to write a good problem set solution that is both clear and correct on the first try. I strongly encourage you to revise your problem set solutions at least once. One of the things that makes this easier is typing your solutions. I recommend LaTex, but it is not required. See these tutorials for a good introduction to LaTex.

If you find you are struggling with a problem and getting frustrated, take a break and come back to it, preferably a day later. Research indicates that sleep is very important for learning. I have often been surprised when a concept that I could not grasp one day suddenly became clear the next day. (A corollary of this is that you should not start your problem set the day before it is due.)

If you find during the self-grade or based on our grading of a problem set that you have made a serious mistake, I recommend looking at the solution, then putting the solution away and trying to solve the problem again. This practice will help you to learn. If you find that you need more practice, try looking for similar problems in the textbooks listed above, or ask me for suggestions.

I do not expect you to do all parts of all problem sets correctly. The problem set is an opportunity for you to practice and learn. You can still get an A in this course without getting 100% on the problem sets.

Rubrics and Resources


NOTE! This calendar is subject to change (except for past dates.) Please check regularly.

Jump to This Week

class: Reading/Class eval: Quiz or Test PS: Problem Set or Other Assignment

Topics: DCR:Divide and Conquer / Recursion DP:Dynamic Programming GD:Greedy GR:Graph NP:NP Problems
PS=Problem Set, PA=Programming Assignment

Monday, Sept. 11

class Introductions Lecture Notes
PS Assign: Questionnaire (due Sept 15)
PS Assign: PS1 pdf/tex (due Sept 18 to Canvas)
PS Assign: PA1 (due Sept 25 to Canvas)

Wednesday, Sept. 13

class Divide and Conquer (Karatsuba) Lecture Notes

Friday, Sept. 15

class Divide and Conquer (Karatsuba) Lecture Notes
eval Quiz: Syllabus
PS Due: Questionnaire

Monday, Sept. 18

class Self-Grade and Reflection, Proofs of Algorithm Correctness Lecture Notes, Faulty Proof of Correctness, Solution for Proof of Correctness
PS Due: PS1
PS Assign: PS2 pdf/tex (due Sept 25 to Canvas) Old Version

Wednesday, Sept. 20

class Divide and Conquer (Closest Points) Lecture Notes
PS Due: Reflection/Grade PS1

Friday, Sept. 22

class Inductive Proofs of Correctness Lecture Notes
eval Quiz: PS1

Monday, Sept. 25

class Closest Points, Master Method Lecture Notes (Closest Points), Lecture Notes (Master Method)
PS Due: PS2
PS Due: PA1
PS Assign: PS3 (tex) (due Oct 2 to Canvas)
PS Assign: PA2, QuickSortNums.txt (due Oct 11 to Canvas)

Wednesday, Sept. 27

class Master Method (Proof) Lecture Notes
PS Due: Reflection/Grade PS2

Friday, Sept. 29

class Master Method and Loop Invariants Lecture Notes
eval Quiz: PS2

Monday, Oct. 2

class Randomized QuickSort Lecture Notes
PS Due: PS3
PS Assign: PS4 (tex) PS4 (due Oct 9 to Canvas)

Wednesday, Oct. 4

class Probability Crash Course Panopto Video, Lecture Notes (ppt from video)
Optional Readings: Mathematics for Computer Science Section IV, Introductory Statistics with Randomization and Simulation Appendix A
PS Due: Reflection/Grade PS3

Friday, Oct. 6

class Randomized QuickSort Panopto Video, Lecture Notes (ppt from video)
eval Quiz: PS3

Monday, Oct. 9

classDynamic Programming: MWIS Lecture Notes
PS Due: PS4
PS Assign: PS5 (tex) (due Oct 16)
PS Assign: PA3 (due Nov 8) Please use this file of unknown animals

Wednesday, Oct. 11

classMWIS and Indicator Random Variables Lecture Notes
PS Due: PA2
PS Due: Reflection/Grade PS4

Friday, Oct. 13

class More Loop Invariants Lecture Notes
eval Quiz: PS4

Monday, Oct. 16

class Midterm Review Midterm Instructions, Review questions, Review solutions
PS Due: PS5

Wednesday, Oct. 18

eval Midterm self-scheduled from Oct. 11 to Oct. 13

Friday, Oct. 20

class No class!
PS Assign: Mid-semester Evaluation Survey

Monday, Oct. 23

No Class!

Wednesday, Oct. 25

class Dynamic Programming: Knapsack Lecture Notes
PS Assign: PS6 (tex) (due Oct 30)
PS Due: Reflection/Grade PS5
PS Due: Mid-semester Evaluation Survey

Friday, Oct. 27

class Dynamic Programming: Knapsack Lecture Notes
eval Quiz: PS5

Monday, Oct. 30

class Dynamic Programming: Sequence Alignment Lecture Notes
PS Due: PS6
PS Assign: PS7 (tex) (due Nov 6)

Wednesday, Nov. 1

class Dynamic Programming: Sequence Alignment Lecture Notes
PS Due: Reflection/Grade PS6

Friday, Nov. 3

class Dynamic Programming: Sequence Alignment Lecture Notes
eval Quiz: PS6

Monday, Nov. 6

class Greedy Scheduling Lecture Notes
PS Due: PS7
PS Assign: PS8 (tex) PS8 (due Nov 13)

Wednesday, Nov. 8

class Greedy Scheduling Lecture Notes
PS Due: Reflection/Grade PS7

Friday, Nov. 10

class BFS Shortest Path Lecture Notes
eval Quiz: PS7

Monday, Nov. 13

class Dijkstra Shortest Path Lecture Notes
PS Due: PS8
PS Assign: PS9 (tex) (due Nov 20)

Wednesday, Nov. 15

class Data Structures in Shortest Path Algorithms Lecture Notes
PS Due: PA3
PS Due: Reflection/Grade PS8

Friday, Nov. 17

class Data Structures in Shortest Path Algorithms Lecture Notes
eval Quiz: PS8

Monday, Nov. 20

class More Shortest Path Algorithms Lecture Notes on Dijkstra Heap Runtime, Lecture Notes on Bellman Ford
PS Due: PS9

Wednesday, Nov. 22

No Class!

Friday, Nov. 24

No Class!

Monday, Nov. 27

class P and NP Lecture Notes, Bellman-Ford Runtime Lecture Notes
PS Assign: PS10 (tex) (due Dec 4)

Wednesday, Nov. 29

class Reductions Lecture Notes
PS Due: Reflection/Grade PS9

Friday, Dec. 1

class Subset Sum is NP-hard Lecture Notes
eval Quiz: PS9

Monday, Dec. 4

class Schoning's Algorithm Notes, Probability Analysis Recap Notes, Greedy Recap Notes
PS Due: PS10

Wednesday, Dec. 6

class Greedy and Probability Review Continued Video

Friday, Dec. 8

class Last Day Slides
eval Quiz: PS10
PS Due: Reflection/Grade PS10


Prof. Shelby Kimmel

Shelby Kimmel Headshot
Office: MBH 635
Office Hours:
  • Drop-in: Mon 3-4, Tues 8:00-9:30 am, Wed 3-4, Friday 3-4
  • By appointment: Thursday 9am-noon + other times. Click Here to book at least 12 hours in advance.
If none of these times work for you and you would like to meet with me, please e-mail me to arrange a meeting.
Email: skimmel [at] middlebury [dot] edu

Nick Jaczko (Tutor)

Nick Jaczko Headshot

Scott Westvold (Tutor)

Scott Westvold Headshot

Anna Parker (Grader)

Anna Parker Headshot