Syllabus
 Goals
 Honor Code
 Inclusion
 Learning
 Logistics
 Technology
 Class Participation
 Assessments
 Grading
 Attendance
 Texts
Goals
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
 Ability to apply standard algorithmic paradigms to create, analyze runtime, and prove the correctness of algorithms for common, realworld problems.
 Appreciation of the creativity and beauty involved in algorithm design.
 Appreciation of the connection between algorithms and data structures.
 Awareness of the limits of efficient algorithms.
Learning Objectives
 Describe the following paradigms, give examples of algorithms that employ the following paradigms, classify algorithms according to the following paradigms, and create algorithms using the following paradigms:
 Divide and Conquer
 Dynamic Programming
 Greedy
 Randomized
 Prove correctness of deterministic algorithms using inductive proofs, loop invariants, exchange arguments, and proofs by contradiction.
 Analyze the runtime of algorithms. Analyze expected runtime of randomized algorithms using linearity of expectation and indicator variables.
 Explain commonly used graph algorithms and their analyses, and create new graph algorithms.
 Give examples of algorithms that use data structures, and explain how the choice of data structure can affect the performance of an algorithm.
 Understand the meaning of NP completeness, and describe several NP Complete problems.
 Create a reduction from one problem to another.
 Implement algorithms using various design paradigms.
Honor Code
You are expected to maintain the highest level of academic integrity in this course. All work you turn in should be your own. However, collaboration on problem sets and programming assignments is not only allowed, but encouraged, as long as you adhere to the following guidelines:
For problem sets, you may discuss or work on problems with others, but you should write up your solutions on your own, using your own words. However, I recommend practicing solving some problems on your own, since this is what you will have to do for quizzes and exams.
For programming assignments, spend as much time as you would like working with others to understand the project and sketch out an approach. Then, when you are ready, without the notes you used while working with others, write your own program. You may also discuss debugging approaches with a peer, but again, you should make changes to your code on your own. You may use code snippets that you find online to implement specific functionality, if you make a note in a comment about where you found the code, but you should not try to find code online that implements the full assignment.
If you work with another student on a problem set or programming assignment, please acknowledge that person (e.g. "I worked with xxx.")
The exams and quizzes must be entirely your own work. Exams and quizzes should be completed without any notes or other resources, unless specifically allowed for. You may not share any information about tests or quizzes with any other students, either within or outside of the course.
Inclusion
My goal is to create a classroom environment that is equitable, inclusive, and welcoming, in order to promote learning for all students. If aspects of this course create a barrier to inclusion, please let me know, and I will do my best to rectify the situation.
Academic Accommodations
Students with documented disabilities who believe that they may need accommodations in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through Student Accessibility Services. Please contact the ADA Coordinator Jodi Litchfield, who can be reached at litchfie@middlebury.edu or 8024435936 for more information. All discussions will remain confidential.
Learning
Learning happens when you develop new neural pathways. You do this by repeatedly practicing a skill. Thus, my role is not to impart information, but to facilitate your learning by providing guided practice with feedback.
Logistics
 Time and Location
 8:00am9:15am, MBH 219
 Faculty Info
 Shelby Kimmel
Please call me "Professor Kimmel" or "Professor"
Pronouns: she/her
Office: MBH 635
skimmel [at] middlebury (dot) edu  Prof Office Hours
 Location: MBH 635
Please come to office hours with specific questions, comments, or concerns
 Dropin: Mon: 121, Wed: 1011, Thur: 9:3010:30
 Appointment: go/KimmelHours. I will post hours at the beginning of each week  these will vary based on my schedule.
 Email: As a last resort, if Dropin and Appointment hours don't work with your schedule and you would like to meet, please send me an email.
 Communication

 Email: I will email you for urgent matters. You can always feel free to email me, but I will not answer coding questions or problem set questions via email, except for logistical questions.
 Announcements: I will use for less urgent messages (e.g. a change in office hours)
 Calendar: I will keep uptodate with assignments and lecture notes.
 Peer Tutors
 See the CS Tutoring Site
 BiHall Math Lab
 TBD
 Canvas Site
 Here
 Department Wiki
 Click Me! I'm super useful!
Technology
You are strongly discouraged from using any type of cell phone, tablet, or computer during class, unless you have a compelling reason why it will enhance your learning. Taking notes on a laptop has been shown to lower quiz scores not only for the student using the device, but for nearby students as well (because it distracts those around you).
If technology is used inappropriately, I reserve the right to forbid its use.
Class Participation
Your participation grade is based on your attendance (including ontime arrival) and the quality of your group work
Group Work
 What:
 Randomly assigned group of 3 or 4 students for solving and discussing problems, with new groups assigned approximately every 3 weeks.
 Why:
 Working in a group will help you to learn. Explaining an idea to someone else helps you to understand the idea at a deeper level. Hearing other people's perspectives broadens your own conceptions of how to approach problems.
 Working with other students will help you to build a community within the computer science department.
 Nearly all careers involve collaboration. Practicing working in groups will help you to become a better team member no matter what you do after Middlebury.
Attendance
Because of the emphasis on group work, it is important that you attend class regularly. I will use Plickers to keep attendance and for feedback, but the correctness of your Plicker responses will not affect your grade. If you lose your Plicker QR code, ask me for your number and print out another copy from here.Assessments
Problem Sets
The problem sets provide you with opportunities to practice problem solving, and importantly, to figure out what you understand and where you need additional practice. The problems will not necessarily be cookiecutter versions of the problems we do in class. Instead, you will sometimes have to transfer knowledge from a problem you've seen before to something new. The only way to develop this skill is to practice. If you need additional practice beyond the problem set, you are responsible for finding further practice problems (for example in these open access textbooks).
You will be graded on effort and thoughtfulness, not correctness. Each problem set will have four parts, and all parts are submitted through Canvas. I will drop your two lowest problem set scores.
 Rough draft: It is extremely difficult to complete one of my problem sets in one sitting. Your brain needs time to understand, brainstorm, and synthesize ideas, and this process generally takes a couple of days (and several good night's sleep) and occurs even if you are not actively thinking about the problem set. To encourage you to do this, you must submit a "rough draft" of your problem set. This draft should demonstrate that you have spent time (at least 12 hours) thinking about the problem set before the day it is due. The draft can take the form of rough notes, pictures of blackboards where you've attempted problems, or anything else that demonstrates time spent working on the problem set. See instructions for how to submit.
 Problem Set: Provides opportunity and incentive to practice skills of the course. See instructions for how to submit.
 SelfGrade: Helps you to figure out what you understand, and where you need more practice. I will give you my solutions to the problem set, and you will go through your solutions and use this rubric to give yourself a grade. Your selfgrade will be done through the Canvas feedback system, as per these instructions.
 Reflection: Studies have shown that thinking critically about your learning process improves your learning. To facilitate this thinking, after each problem set, you will write a reflection, using this worksheet as a starting point. Submission is through Canvas.
For problems where there are many correct (and many incorrect) approaches, such as proofs, TAs will also provide a "grade" for that problem using the Canvas feedback system after you have submitted your selfgrade. This TA grade is only for feedback purposes and will not affect your grade in the class. Additionally, if you put questions into your selfgrade, the TAs will respond.
If you are the first to find a typo in the problem set or solutions, I will give you a small bonus.
Sometimes, life happens. You can choose to not submit up to 2 problem sets (all parts) without an effect on your grade. If you turn in all problem sets, I will drop your two lowest problem set grades. You do not need to tell me when you are not turning them in. You are still responsible for all material.
Programming Assignments
There will be two programming assignments. They will be graded for correctness, readability, documentation, and style, and must be written in Java.
Goals: Connect some of the abstract mathematical concepts we learn in class to more concrete problems.
 Practice writing code from scratch without any template.
 Practice finding and learning how to use unfamiliar packages and/or builtin functions/methods.
Quizzes
There will be a weekly quiz for me to assess your understanding and problem solving. Additionally, studies have shown that giving these types of assessments improves learning through the "testing effect." Quizzes will usually consist of two problems, one from topics on the problem set due earlier that week, and one from earlier topics. Some quizzes will be held in class, and some will be taken at home through Canvas. All quizzes are completely closed book/note (unless otherwise specified) and must be completed individually. I will drop your two lowest quiz scores.
Tests
The midterms will be selfscheduled. You should plan to set aside 3 hours during the exam window to take the test. If your schedule will not allow this, please let me know as soon as possible. The dates of the midterms are:
 March 1415
 April 1819
Final:
 Friday, May 17, 2pm5pm
Grading
Your final grade will be determined as follows: Final: 30%
 Midterm 1: 10%
 Midterm 2: 15%
 Quizzes: 20%
 Problem Sets: 10%
 Programming Assignments: 7.5%
 Class Participation and Attendance: 7.5%
Attendance:
It is important for you to attend class because of the group problem solving we do  your being in class helps your classmates to learn, just like their presence will help you to learn. It is also important that you are on time to class, as it is disruptive not just to you, but also to the people you work with if you are trying to catch up on what you missed instead of working on the current material. Thus, your class participation grade will depend on your regular, ontime attendance. If you will have to miss a class, please let me know as early as possible; you are still responsible for the missed material. I will be happy to answer questions related to the lecture, but I will not repeat the lecture for students who missed the original.
Texts
There are no required texts; lecture notes are posted on the Calendar. However, you may find the following textbooks (which are all available digitally at no cost to you, although for some you must be either on campus, use the Middlebury VPN, or log into the library) useful for finding practice problems. In addition, you may find SensusAccess helpful, a service which converts pdfs into mp3 or ebook format.
 Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein. (Everything)
 Algorithms and Data Structures by Kurt Mehlhorn and Peter Sanders. (Karatsuba Multiplication, greedy algorithms, dynamic programming, graph Algorithms)
 Problems on Algorithms by Ian Parberry and William Gasarch (I have made a lumpsum donation on behalf of the class. (Only problems, Everything)
 Graphs, networks and algorithms by Dieter Jungnickel, (graph algorithms).
The following are if you would like some resources on proof writing:
 Discrete Mathematics: an Open Introduction by Oscar Levin. (sets, logic, proofs, graphs)
 Book of Proof by Richard Hammack. (sets, logic, proofs, functions)