Instructor Information


Name: Nisarg Shah (Webpage)
Course Email: csc373-2023-09@cs.toronto.edu (Do NOT send course related emails to my personal email address, otherwise you may not get a response.)
Office: SF 3312 (do not drop by unless you have scheduled a meeting with me)

Important Links


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

Course Delivery


All times are in Eastern time zone.

Tutorial divisions are by birth month: A = Jan-Jun, B = Jul-Dec (Only a single tutorial per section starting Oct 27)

Section Meeting Time Room
LEC 0101 Lectures Mon 11-12
Wed 11-13
MP 202
SS 2102
Tutorials Fri 11-12 A: BA 1190
B: BA 1200 (merged with A in BA 1190 starting Oct 27)
LEC 0201 Lectures Mon 15-16
Wed 15-17
AH 400
AH 400
Tutorials Fri 15-16 A: BA 1210
B: MP 134 (merged with A in BA 1210 starting Oct 27)
Both Sections Office Hours Mon 13:30-14:30
Fri 13-14
SF 3312 (unless an announcement says differently)

Tutorial Format


A problem set will be released on the course web page 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 and then go over key steps of the solutions.


Midterm Time & Format


Midterms will be conducted in person on Fridays during two slots: 11-13 and 14-16. Each student, by default, must attend the slot that overlaps with their assigned tutorial. If you have a conflict and need to write in the other slot (or request an alternate slot), you must reach out to the instructor at least one week prior to the midterm. Check the midterm dates below.


Grading Scheme


Best 3/4 Assignments: 30% (10% each)
2 Midterms: 40% (20% each)
Embedded EthiCS Module: 5%
Final Exam: 25%

Due Dates


Assignment 1: Oct 9
Assignment 2: Part A by Oct 30, Part B by Nov 6
Assignment 3: Nov 27
Assignment 4: Dec 6
Midterm 1: Nov 3
Midterm 2: Nov 24

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.

Textbook


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.