11.1 Overview of key data structures
4911.3 Optimal Substructure
21.2 Time and space complexity analysis. Big O notation.
5011.4 Analysis
31.3 Algorithms for searching, sorting, recursion etc.
5111.5 Fractional Knapsack Problem
41.4 Python basics and setup
5211.6 Activity Selection Extensions
52.1 Implementing arrays and array-based lists in Python
5312.1 Overview
62.2 Linked lists - singly, doubly, circular
5412.2 Quicksort
72.3 Operations like search, insert, delete, traverse
5512.3 Merge Sort
83.1 Stack implementation using arrays and linked lists
5612.4 Binary Search
93.2 Stack operations like push, pop, peek
5712.5 Closest Pair
103.3 Queues using arrays and linked lists
5812.6 Convex Hull
113.4 Queue operations like enqueue, dequeue
5912.7 Strassen’s Matrix Multiplication
123.5 Priority queues
6012.8 Analysis
134.1 Binary Trees
6112.9 Karatsuba Multiplication
14Operations and Algorithms
6212.10 Dynamic Programming vs Divide-and-Conquer
154.2 Tree Traversals
6313.1 Overview
164.3 Balanced vs Unbalanced Trees
6413.2 0/1 Knapsack Problem
174.4 Common Operations
6513.3 Longest Common Subsequence
185.1 Max and Min Heap Implementation
6613.4 All-Pairs Shortest Path
195.2 Heap Operations
6713.5 Sequence Alignment
205.3 Heap Sort Algorithm
6814.1 Generating permutations/combinations
216.1 Hash Tables and Hash Functions
6914.2 Solving rat-in-maze and n-queen problems
226.2 Collision Resolution
7014.3 Sudoku Solver - Constraint Satisfaction
236.3 Hash Table Load Factors
7114.4 Pruning Branches, Avoiding Repeats
246.4 Dictionaries with Hash Tables
7215.1 P, NP, NP-complete and NP-hard Problems
257.1 String Search Algorithms
7315.2 Cook’s Theorem, Examples of Hard Problems
267.2 Pattern Matching
7415.3 Approximation Algorithms and Heuristics
277.3 Longest Common Subsequence
7516.1 Searching - binary, exponential, Fibonacci
287.4 String Manipulation
7616.2 Factorial Computation, Large Number Multiplication
298.1 Recursion Basics
7716.3 Primality Testing - Fermat’s, Solovay-Strassen
308.2 Recursive Function Design
7816.4 Numerical Integration - Quadrature
318.3 Recursive Sorting Algorithms
7917.1 Introduction to Randomized Algorithms
328.4 Divide and Conquer Algorithms
8017.2 Applications of Randomization in Algorithms
338.5 Backtracking and Memoization
8117.2.2 Quicksort, Quickselect, Skip Lists
349.1 Sequential and Binary Search
8217.3 Universal Hashing, Rabin Karp String Search
359.2 Sorting Algorithms
8317.4 Monte Carlo Algorithms, Las Vegas Algorithms
369.3 Sorting Algorithm Analysis
8418.1 Minimum Spanning Trees
379.4 Sorting in Python
8518.2 Shortest Paths on Weighted Graphs
389.5 Algorithm Stability
8618.3 Maximum Flow Problem
399.6 Adaptive Sorting Algorithms
8718.4 Bipartite Graph Matching
4010.1 Graph Definitions
8819.1 Task-based vs Data-based Parallelism
4110.2 Graph Representations
8919.2 Parallel Sorting Algorithms
42Python Adjacency Matrix
9019.3 Parallel Searching and MapReduce
4310.3 Graph Traversal Algorithms
9119.4 Synchronization for Parallel Algorithms
4410.4 Shortest Path Algorithms
9220.1 Persistent data structures for immutability
4510.5 Minimum Spanning Trees
9320.2 Making lists, trees etc. functional
4610.6 Graph Problems
9420.3 Lazy evaluation, Streams, memoization
4711.1 Activity Selection
9520.4 Applications like version control systems
4811.2 Huffman Encoding