Course Meeting Times
Lectures: 2 sessions / week, 1.5 hours / session
Recitations: 1 session / week, 1 hour / session
Course Objectives and Outcomes
Course Objectives
This course introduces students to the analysis and design of computer algorithms. Upon completion of this course, students will be able to do the following:
 Analyze the asymptotic performance of algorithms.
 Demonstrate a familiarity with major algorithms and data structures.
 Apply important algorithmic design paradigms and methods of analysis.
 Synthesize efficient algorithms in common engineering design situations.
Course Outcomes
Students who complete the course will have demonstrated the ability to do the following:
 Argue the correctness of algorithms using inductive proofs and loop invariants.
 Analyze worstcase running times of algorithms using asymptotic analysis. Compare the asymptotic behaviors of functions obtained by elementary composition of polynomials, exponentials, and logarithmic functions. Describe the relative merits of worst, average, and bestcase analysis.
 Analyze averagecase running times of algorithms whose running time is probabilistic. Employ indicator random variables and linearity of expectation to perform the analyses. Recite analyses of algorithms that employ this method of analysis.
 Explain the basic properties of randomized algorithms and methods for analyzing them. Recite algorithms that employ randomization. Explain the difference between a randomized algorithm and an algorithm with probabilistic inputs.
 Analyze algorithms using amortized analysis, when appropriate. Recite analyses of simple algorithms that employ this method of analysis. Describe different strategies for amortized analysis, including the accounting method and the potential method.
 Describe the divideandconquer paradigm and explain when an algorithmic design situation calls for it. Recite algorithms that employ this paradigm. Synthesize divideandconquer algorithms. Derive and solve recurrences describing the performance of divideandconquer algorithms.
 Describe the dynamicprogramming paradigm and explain when an algorithmic design situation calls for it. Recite algorithms that employ this paradigm. Synthesize dynamicprogramming algorithms, and analyze them.
 Describe the greedy paradigm and explain when an algorithmic design situation calls for it. Recite algorithms that employ this paradigm. Synthesize greedy algorithms, and analyze them.
 Explain the major algorithms for sorting. Recite the analyses of these algorithms and the design strategies that the algorithms embody. Synthesize algorithms that employ sorting as a subprocedure. Derive lower bounds on the running time of comparisonsorting algorithms, and explain how these bounds can be overcome.
 Explain the major elementary data structures for implementing dynamic sets and the analyses of operations performed on them. Recite algorithms that employ data structures and how their performance depends on the choice of data structure. Synthesize new data structures by augmenting existing data structures. Synthesize algorithms that employ data structures as key components.
 Explain the major graph algorithms and their analyses. Employ graphs to model engineering problems, when appropriate. Synthesize new graph algorithms and algorithms that employ graph computations as key components, and analyze them.
 Demonstrate a familiarity with applied algorithmic settings  such as computational geometry, operations research, security and cryptography, parallel and distributed computing, operating systems, and computer architecture  by reciting several algorithms of importance to different fields.
Prerequisites
A strong understanding of programming and a solid background in discrete mathematics, including probability, are necessary prerequisites to this course.
For MIT Students, this course is the header course for the MIT/EECS Engineering Concentration of Theory of Computation. You are expected to have taken 6.001 Structure and Interpretation of Computer Programs and 6.042J / 18.062J Mathematics for Computer Science, and received a grade of C or higher in both classes. If you do not meet these requirements, you must talk to a TA before registering for the course.
Lectures
Lectures will be held twice a week on Mondays and Wednesdays for 1.5 hours. You are responsible for material presented in lectures, including oral comments made by the lecturer.
Recitations
Students must attend a onehour recitation session each week. The course staff will schedule recitations. You are responsible for material presented in recitation. Attendance in recitation has been well correlated in the past with exam performance. Recitations also give you a more intimate opportunity to ask questions and interact with the course staff. Your recitation instructor will assign your final grade. Recitations will be taught by the teaching assistants on Fridays.
Handouts
Most handouts will be made available on the server in formats suitable for printing. Students should download and print out the handouts from the server. You will be informed via the server and/or email where and when the few handouts that are not available from the server can be obtained.
Text
Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. Introduction to Algorithms. 3rd ed. MIT Press, 2009. ISBN: 9780262033848.
Extra Help
Each Teaching Assistant will post his or her weekly office hours on the server. As an experiment, we will offer homework labs during the term. The time and location will be on the specific problem set. A homework lab is a place where you can go to do your homework with others in the class. Teaching Assistants will be available at the homework lab to help if you have questions about the problem set.
In addition, as a free service to its students, the MIT Department of Electrical Engineering and Computer Science provides oneonone peer assistance in many basic undergraduate Course VI classes. During the first nine weeks of the term, you may request a tutor who will meet with you for a few hours a week to aid in your understanding of course material. You and your tutor arrange the hours that you meet, for your mutual convenience. More information is available on the HKN Web page.
Tutoring is also available from the Tutorial Services Room (TSR) sponsored by the Office of Minority Education. The tutors are undergraduate and graduate students, and all tutoring sessions take place in the TSR or the nearby classrooms.
Registration
Please fill out a signup sheet on the course server. The information you provide will help the course staff to get to know you better and create a mailing list and a course directory. Signing up is a requirement of the course. You will find it difficult to pass the course if you aren’t in the class! You should notify your TA immediately if you drop the course after having registered. Listeners should also register for the course in order to be on the mailing list.
You must register before Ses #1. We will email your recitation assignment to you one day after Ses #1.
Problem Sets
Nine problem sets will be assigned during the semester. The course calendar shows the tentative schedule of assignments and due dates, but the actual due date will always be on the problem set itself.

Late homework will generally not be accepted. If there are extenuating circumstances, you should make prior arrangements with your recitation instructor. An excuse from the Dean’s Office will be required if prior arrangements have not been made.

Each problem should be written up on a separate sheet (or sheets) of paper, since problems may be graded by separate graders. Mark the top of each sheet with the following:
 your name,
 the name of your recitation instructor,
 the problem number,
 the people you worked with on the problem (see Collaboration Policy), or “Collaborators: none” if you solved the problem completely alone.
You may handwrite or type your answers. You must submit your answers on threehole punch paper and hand in a physical copy. The course staff puts rings through the holes to avoid losing homework. In addition, your graded homework can easily be included in your looseleaf course notebook.

You should be as clear and precise as possible in your writeup 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 is legible. 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. 
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.
Describing Algorithms
You will often be called upon to “give an algorithm” to solve a certain problem. Your writeup 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.
Grading Policy
The final grade will be primarily based on problem sets, one inclass quiz (Q1), one takehome quiz (Q2), and a final. The problem sets will together be worth about 80 points, the inclass quiz about 80 points, the takehome quiz about 150 points, and the final exam about 180 points.
Although the problem sets account for only 80 points in your final grade, you must do them. The following table shows the impact of failing to do problems:
PROBLEMS SKIPPED  IMPACT 

0  None 
1  Onehundredth of a Letter Grade 
2  Onetenth of a Letter Grade 
3  Onefifth of a Letter Grade 
4  Onefourth of a Letter Grade 
5  Onethird of a Letter Grade 
6  Onehalf of a Letter Grade 
7  One Letter Grade 
8  Two Letter Grades 
9 or more  Fail 
Please observe that this table is for problems skipped, not problem sets. The specifics of this grading policy are subject to change if the need arises.
Collaboration Policy
The goal of homework is to give you practice in mastering the course material. Consequently, you are encouraged to collaborate on problem sets. In fact, students who form study groups generally do better on exams than do students who work alone. If you do work in a study group, however, you owe it to yourself and your group to be prepared for your study group meeting. Specifically, you should spend at least 3045 minutes trying to solve each problem beforehand. If your group is unable to solve a problem, talk to other groups or ask your recitation instructor.
You must write up each problem solution by yourself without assistance, however, even if you collaborate with others to solve the problem. You are asked on problem sets to identify your collaborators. If you did not work with anyone, you should write “Collaborators: none.” If you obtain a solution through research (e.g., on the Web), acknowledge your source, but write up the solution in your own words. It is a violation of this policy to submit a problem solution that you cannot orally explain to a member of the course staff.
No collaboration whatsoever is permitted on exams. The course has a takehome exam for the second quiz which you must do entirely on your own, even though you will be permitted several days in which to do the exam. More details about the collaboration policy for the takehome exam will be forthcoming in lecture 20. Please note that this lecture constitutes part of the exam, and attendance is mandatory.
Plagiarism and other antiintellectual behavior cannot be tolerated in any academic environment that prides itself on individual accomplishment. If you have any questions about the collaboration policy, or if you feel that you may have violated the policy, please talk to one of the course staff. Although the course staff is obligated to deal with cheating appropriately, we are more understanding and lenient if we find out from the transgressor himself or herself rather than from a third party.
This course has great material, so have fun!