Instructor Information

Name: Nisarg Shah
Webpage: This Page
Email: firstname at
Office: SF 2301C (not that you will find me there)

Important Links

Course Page: This page!
Discussion Board: Piazza
Online Homework Submission: MarkUs

Zoom Information

All registered students will soon receive an email with the password to the Zoom meetings.


Both sections (LEC 0101 and 0102) will have lectures at the same time. The lectures will be delivered live by the instructors. Students attending the lectures live will have an opportunity to ask questions via chat, and the instructor or a TA will answer them. The lectures will be recorded, and the recording will be posted after each session.

Time: Tue 4-5 and Thu 1-3
Place: Link

Office Hours

Time: Starting 10/21, Wed 10-11, Fri 4-5 Wed 4-5, Fri 10-11
Place: Link


There will be a tutorial each week at the same time for both sections. Starting Oct 13, each section will be broken into two tutorials based on students' birth month: A = Jan-Jun, B = Jul-Dec. Each section will be broken into three tutorials based on students' birth month: A = Jan-Apr, B = May-Aug, C = Sep-Dec.

A problem set will be released prior to each tutorial. Students are encouraged to attempt the problems before coming to the tutorials. During the tutorials, the TAs will explain the problems, allow students to discuss them in small breakout rooms, and then go over key steps of the solutions.

Some tutorial slots will be used for conducting exams. Hence, it is essential to be able to attend the tutorials live. No alternative arrangements will be made for missed tests, except in case of medical needs accompanied with proper official documentatio.

Time: Tue 5-6 (for all sections)
LEC 0101-A: Link
LEC 0101-B: Link
LEC 0102-A: Link
LEC 0102-B: Link

Grading Scheme

Assignments: 30% (Best 3 out of 4, 10% each)
Term Tests: 40% (20% each)
End-of-Term Test: 30%

Due Dates

Assignment 1: Oct 13
Assignment 2: Nov 1
Assignment 3: Nov 23
Assignment 4: Dec 7
Midterm 1: Oct 20
Midterm 2: Nov 17

Course Learning Goals

By the end of this course, you will be familiar with standard algorithm design techniques (divide and conquer, greedy algorithms, dynamic programming, network flow, linear programming, approximation, randomization), and understand the importance of computational complexity. More specifically, you will be able to:
  • recognize algorithms and write new ones that employ each technique,
  • prove correctness of such algorithms and analyze their efficiency,
  • demonstrate membership in P and NP,
  • show NP-completeness.


The primary reference for this course will be the slides uploaded by the instructors. In addition, you should refer to the following textbooks. Readings from these books will be posted along with each lecture.

  • Required: [CLRS] Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms.
  • Supplementary: [DPV] Dasgupta, Papadimitriou, Vazirani: Algorithms.
  • Supplementary: [KT] Kleinberg; Tardos: Algorithm Design.

For information about assignments, exams, grading, and policies, refer to the course information sheet.