Design and Analysis of Algorithms : Schedule and lecture notes

The main content of the course consist of selected parts of Chapters 4, 5, 7, 9, 15, 17, 26, 34, 35, scheduled along seven lecture weeks as follows:

  • Week I: Lecture on simple recursions and their analysis (4-4.1, 4.3-4.5, 7.1). Overview of amortized analysis (Cartesian tree construction, dynamic arrays 17.4.2).
  • Week II : Lecture on more complex recurrences for divide and conquer type of problems: Strassen and linear time median finding (4.2,9.3). [Pseudocode of linear time Select fixed (base case to return j-th smallest element on small array)].
  • Week III: Lecture on shortest paths and network flows aiming to introduce to reductions and simple dynamic programming (26-26.3 omitting most proofs).
  • Week IV: Lecture on more advanced dynamic programming, like those related to trees (15.2, 15.5) and segmentation (1d clustering)
  • Week V: Lecture on NP-hardness without formalities, example reduction SAT->3CNF, approximation algorithms (34 and 35 lightweight)
  • Week VI: Lecture on NP-hardness with formalities, including Cook theorem and encodings (34 heavyweight)
  • Week VII: Lecture on randomized algorithms touching someway all the previous topics: randomized selection / quicksort, random path in DAG, randomized approximation of MAX-3CNF (5,7 + relevant parts of other chapters)