CSCI-GA.1170-001/002 Fundamental Algorithms, Fall 2012

Lecturer: Prof. Yevgeniy Dodis,, (212) 998-3084, room 413, WWH. Office hour: Tuesday 5-6
Meeting Time/Place: T 7-9, room 109, WWH.
Recitation Time/Place: W 5-6, room 109, WWH.
Recitation Instructor: Daniel Dadush,, (212) 998-3153, Rm 425, WWH. Office hour: Thu 3-4, room 425.
Teaching Assistant: Divesh Aggarwal,, (212) 998-3150, Rm 409, WWH. Office hour: Mon 10-11, room 1314.
Midterm: Tuesday, October 23, in class. Final: Tuesday, December 18th, 7:10-9:00PM, Room 109, WWH.
Mailing list: To subscribe to the class list, follow instructions at
To post a message to all the list members, send email to Please, post only messages interesting to everybody taking the class. Specific class-related questions and most of your other correspondence should be directed to the instructor.
Course Homepage:

Lecture Summaries (see also Selected Notes from MIT)

Additional Handouts:

Problem Sets: (Please remember to write each new problem on separate, one-sided 8.5x11 sheet(s) of paper, each new sheet with your name, homework number and problem number on top.)

Brief Course Description:

This is an introductory course in algorithms. We will cover standard topics such as sorting, divide-and-conquer, various data structures, graph algorithms, dynamic programming, greedy algorithms, and - time permitting - NP-completeness and basic approximation algorithms. The emphasis will be given to arguing the correctness of algorithms and performing the analysis of their running time.


Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliff Stein, published by MIT Press.
You can get either the THIRD EDITION (recommended) or the SECOND EDITION. The exercises will refer to the THIRD edition.


There will be one in-class midterm and a final exam, in addition to approximately weekly homework assignments. Tentative grade split is 40% homework, 25% midterm and 35% final exam. Students on the "boundary" between two grades can increase their grade by doing accurate self-grading, as explained below.

Programming Project:

Currently, I plan on not giving the final programming project. If this changes, the details of the project will appear here.


Each problem set will consist of several problems. Some of the homework exercises will be routine, but others will be more challenging. I do not expect you to solve all of the homework problems, but I hope that you will benefit from working on the more difficult ones. Homework will be assigned the day of the class, and will be due the following week (unless stated otherwise). No late homework will be accepted. The solutions will be discussed during the recitation of the week the homework is due. We encourage the students to come to the recitation - not only for the homework solutions, - but primarily to see examples of the problems similar to those assigned for the following week.

The maximum point value for each problem (and, sometimes, parts of the problem) will be stated on the homework. Some questions in the homework will be for the extra credit, and will be explicitly marked as such (together with their maximum extra credit) on each assignment. Solving such problems can make your overall grade for the homework above 100%, or, alternatively, effectively "erase" the credit lost for not solving some of the required problems.

Each problem in a given problem set must be written on a separate, one-sided 8.5x11 sheet of paper, with the student's name, homework number and problem number on top. If several such sheets are required for a given problem, put your name, homework number, problem number and "page number out of " (starting from 1) on each such sheet. For example, if your name is John Doe, you are solving Problem 3 of Homework 5, and the solution required you to use three sheets of 8.5x11 paper, the second sheet should have "John Doe, Homework 5, Problem 3, page 2/3" on top. (If only one sheet is required, no need to put "page 1/1", it is the default.)

Do not bend or staple any of the sheets, as we will be making Xerox copies of your homework (this is also why we do not want you to write on both sides). We encourage, but do not require, the students to type their solutions. This is much easier to grade and edit, and much harder to lose. In particular, while Microsoft Word or other such primitive editors can be used (and are already better than hand written solutions!), we suggest to use Latex, and will provide a latex file for each homework (where the students need to replace "stars" ***** by their solutions). Students are welcome to look at this short Latex tutorial for some useful pointers.


We also ask students to keep a copy of their solutions before handing them in (which is yet another advantage of typed solutions, where this feature comes for free). Another way where such copies are useful is for self-grading. In particular, after the students handed in their homework and learned the correct solutions during the following recitation, but before getting back their graded solutions, the students can hand in their self-graded homework, using the same grading system they expect from the actual graders. Unlike regular homework, students should staple together all the problems before handing them in. We believe self-grading their own mistakes will greatly improve the students' understanding of the material. Moreover, as explained above, students on the "boundary" between two grades can increase their grade by doing accurate self-grading.

Concluding Remarks: