- Week 1: Programming Challenges
- Week 2: Algorithmic Warm-up
- Week 3: Greedy Algorithms
- Week 4: Divide and Conquer
- Week 5: Dynamic Programming - Part 1
- Week 6: Dynamic Programming - Part 2
- Week 1: Basic Data Structures
- Week 2: Priority Queues and Disjoint Sets
- Week 3: Hash Tables and Hash Functions
- Week 4: Binary Search Trees
- Week 1: Graph Decomposition
- Week 2: Graph Decomposition (continued)
- Week 3: Paths in Graphs
- Week 4: Paths in Graphs (continued)
- Week 5: Minimum Spanning Trees
- Week 1: From Genome Sequencing to Pattern Matching
- Week 2: Burrows-Wheeler Transform and Suffix Arrays
- Week 3: Knuth–Morris–Pratt Algorithm
- Week 4: Constructing Suffix Arrays and Suffix Trees
- 2. Construct Suffix Array
- 3. Pattern Matching with Suffix Array
- [4. Construct Suffix Tree from Suffix Array]
- Week 1: Flows in Networks
- Week 2: Linear Programming
- Week 3: NP-complete Problems
- Week 4: Coping with NP-completeness
- Week 5: Streaming Algorithms
- Master-Theorem
- Algorithms: Dasgupta-Papadimitriou-Vazirani ( 2006 )
- Algorithms and Data Structures: Mehlhorn-Sanders ( 2007 )
- Introduction to Algorithms: Cormen-Leiserson-Rivest-Stein ( 2009 )
- Introduction to Algorithms: A Creative Approach ( 2019 )
- Discrete Probability
- Mathematical Proofs