Introduction to Algorithms

Fall 2021
Professor: Aaron Roth
TAs: Natalie Collina, Ira Globus-Harris, Georgy Noarov, Amithab Arumugam, Alexander Go, Adarsh Rao, Adam Weidman, Saurabh Shah, Olivia Gottlieb, Jared Asch, Cindy Jiang, Colin Hosking, Alexandra Tanner, Arnav Aggarwal.
Meeting Time: Monday/Wednesday 3:30-5:00
Room: Town 100


Overview: In this course, we will survey the field of algorithm design, with an eye towards theory. Our goal will be to design and analyze algorithms for solving problems of different sorts, whose solutions are non-obvious. We will see various techniques for discrete optimization problems (greedy methods, divide and conquer methods, dynamic programming, and flow based methods), as well as for continuous optimization problems (gradient descent, linear programming, and multiplicative weights).

Prerequisites: This will be a mathematically rigorous theory course for advanced undergraduates. Students should have taken (at least) CIS 120, 160, and 262, and be comfortable with rigorous proofs and asymptotic notation.

Goals and Grading: The goal of this course is to give students a rigorous introduction to the design and analysis of algorithms. Grading will be based on participation on Piazza (5%), problem sets (45%), two midterms (15% each), and a final exam (20%).

Textbook:We won't be following a textbook very closely. Two textbooks that contain most of the material we will be covering and will be useful references are: Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein, and Algorithm Design by Kleinberg and Tardos.

Office Hours and Discussion: Office Hours: See Piazza
We will be using Piazza to discuss class material, answer questions, and make announcements. The Piazza page for CIS 320 is piazza.com/upenn/fall2021/cis320/home. Students are encouraged to ask questions about the material on Piazza so that everyone can benefit and contribute to their answers.

Topics Covered:
  1. Introduction to the Analysis of Algorithms
  2. Sorting
  3. Divide and Conquer
  4. Dynamic Programming
  5. Greedy Algorithms
  6. Max Flow
  7. Online Optimization: Multiplicative Weights
  8. Zero Sum Games and the Minimax Theorem
  9. Machine Learning: Boosting
  10. Machine Learning: Online Prediction and Calibration
  11. Linear Programming
  12. NP Completeness

Problem Sets and Exams:
Problem sets will be turned in and graded via GradeScope. The course entry code is: 3Y263J.
  1. Problem Set 0 (Pre-Course Check In) --- survey on GradeScope. Due Wednesday September 8 at 3:29 PM.
  2. Problem Set 1. Due Wednesday September 22 at 3:29 PM, via Gradescope.
  3. Problem Set 2. Due Wednesday October 6 at 3:29 PM, via Gradescope.
  4. Problem Set 3. Due Wednesday October 27 at 3:29 PM, via Gradescope.
  5. Problem Set 4. Due Wednesday November 10 at 3:29 PM, via Gradescope.
  6. Problem Set 5. Due Wednesday November 24 at 3:29 PM, via Gradescope.
  7. Problem Set 6. Due Wednesday December 8 at 3:29 PM, via Gradescope.
  8. Final Exam. Due Monday December 20 at 5:00 PM, via Gradescope.

Lectures: