Course Meeting Times
Lectures: 2 sessions / week, 1.5 hours / session
Recitations: 1 session / week, 1 hour / session
This course assumes that students know how to analyze simple algorithms and data structures from having taken 6.006. It introduces students to the design of computer algorithms, as well as analysis of sophisticated algorithms.
This course is the header course for the Theory of Computation concentration. You are expected, and strongly encouraged, to have taken:
Petitions for waivers will be considered by the course staff. Students will be responsible for material covered in prerequisites.
Lectures and Recitations
You are responsible for material presented in lectures, including oral comments made by the lecturer.
You are also responsible for material presented in recitations. Attendance in recitation has been well correlated in the past with exam performance. Recitations also give you a more personalized opportunity to ask questions and interact with the course staff. Your recitation instructor, together with the lecturers, will assign your final grade.
Nine problem sets will be assigned during the semester. Homework must be turned in by 9pm on the due date, which is typically a Wednesday.
Problem sets should be submitted in PDF format. Formatting your problem set in LaTeX will make it easier for us to read; however, any method of generating the PDF is acceptable (including scanning handwritten documents), as long as it is clearly legible.
The problem sets include exercises that should be solved but not handed in. These questions are intended to help you master the course material and will be useful in solving the assigned problems. Material covered in exercises will be tested on exams.
Guide to Writing Up Homework
You should be as clear and precise as possible in your write-up of solutions. Understandability of your answer is as desirable as correctness, because communication of technical material is an important skill.
A simple, direct analysis is worth more points than a convoluted one, both because it is simpler and less prone to error and because it is easier to read and understand. Sloppy answers will receive fewer points, even if they are correct, so make sure that your handwriting and your thoughts are legible. If writing your problem set by hand, it is a good idea to copy over your solutions to hand in, which will make your work neater and give you a chance to do sanity checks and correct bugs. If typesetting, reviewing the problem set while typing it in often has this effect. In either case, going over your solution at least once before submitting it is strongly recommended.
You will often be called upon to “give an algorithm” to solve a certain problem. Your write-up should take the form of a short essay. A topic paragraph should summarize the problem you are solving and what your results are. The body of your essay should provide the following:
- A description of the algorithm in English and, if helpful, pseudocode.
- At least one worked example or diagram to show more precisely how your algorithm works.
- A proof (or indication) of the correctness of the algorithm.
- An analysis of the running time of the algorithm.
Remember, your goal is to communicate. Graders will be instructed to take off points for convoluted and obtuse descriptions.
The final grade will be based on the problem sets, one in-class quiz, one take-home quiz, a final during final exam week, and participation during the weekly recitation sections. Quiz 1 will be given in class; Quiz 2 will be a take-home exam, available on Monday at 9am and due Friday at noon.
The grading breakdown is as follows:
Although the problem sets account for only 20% of your final grade, you are required to at least attempt them. The following table shows the impact of failing to attempt problems:
|1||1/100 of a letter grade|
|2||1/10 of a letter grade|
|3||1/5 of a letter grade|
|4||1/4 of a letter grade|
|5||1/3 of a letter grade|
|6||1/2 of a letter grade|
|7||One letter grade|
|8||Two letter grades|
|9 or more||Fail the course|
Please observe that this table is for questions skipped, not problem sets.
The primary written reference for the course is:
Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. Introduction to Algorithms. 3rd ed. MIT Press, 2009. ISBN: 9780262033848.
In previous semesters the course has used the first or second edition of this text. We will be using material and exercise numbering from the third edition, making earlier editions unsuitable as substitutes.