Design and Analysis of Algorithms
MIT's upper-level algorithms sequence advancing into divide-and-conquer FFT, amortized analysis, randomized algorithms, network flow, linear programming, NP-completeness, and approximation.
Syllabus
18Course Overview, Interval Scheduling
This inaugural lecture for MIT's core algorithms course introduces foundational concepts in algorithm design, emphasizing efficiency analysis and formal proofs of correctness. The session details a greedy algorithm for optimal interval scheduling.
Divide & Conquer: Convex Hull, Median Finding
This lecture introduces the divide-and-conquer paradigm, applying it to fundamental computational geometry problems including the determination of a convex hull and efficient median finding algorithms.
R1. Matrix Multiplication and the Master Theorem
This recitation reviews dynamic programming via Weighted Interval Scheduling, introduces Strassen's algorithm for matrix multiplication, and rigorously applies the Master Theorem to analyze recursive algorithm complexities.
Divide & Conquer: FFT
Professor Demaine introduces the Fast Fourier Transform (FFT) as a foundational divide and conquer algorithm. The lecture details the algorithm's application to polynomial multiplication, outlining its recursive structure and computational complexity.
R2. 2-3 Trees and B-Trees
This recitation from MIT's 6.046J course examines the structural properties and operational complexities of 2-3 Trees and B-Trees, essential balanced search tree data structures for efficient data storage and retrieval.
Divide & Conquer: Van Emde Boas Trees
This lecture introduces the van Emde Boas tree, a specialized tree data structure designed for efficient predecessor, successor, minimum, and maximum queries on integers within a known range. Professor Demaine details its recursive divide-and-conquer construction and analyzes its O(log log U) time complexity.
Amortization: Amortized Analysis
Professor Demaine elucidates amortized analysis techniques, detailing the aggregate, accounting, and potential methods. The lecture applies these formalisms to demonstrate the efficiency of dynamic data structures.
Randomization: Matrix Multiply, Quicksort
This lecture introduces the principles of randomized algorithms, illustrating their application through the analysis of probabilistic approaches to matrix multiplication verification and the Quicksort algorithm.
Randomization: Skip Lists
This lecture introduces skip lists as an efficient randomized data structure, detailing their construction, search, insertion, and deletion operations with probabilistic analysis. Focus is placed on their performance characteristics.
Randomization: Universal & Perfect Hashing
Professor Demaine examines universal hashing families and perfect hashing schemes, exploring their theoretical foundations and practical implications for efficient data storage and retrieval. The lecture discusses collision resolution.
Augmentation: Range Trees
This lecture covers the augmentation of data structures, with a particular focus on range trees and their application to geometric search problems. It details how to enhance existing structures for new queries.
Dynamic Programming: Advanced DP
This lecture introduces the core principles of dynamic programming, illustrating its application to complex optimization problems. It covers optimal substructure and overlapping subproblems.
Dynamic Programming: All-Pairs Shortest Paths
Professor Demaine explores algorithmic solutions for the All-Pairs Shortest Paths problem, utilizing dynamic programming approaches like the Floyd-Warshall algorithm. The lecture analyzes complexity and correctness.
Greedy Algorithms: Minimum Spanning Tree
This lecture introduces greedy algorithms, demonstrating their application to the Minimum Spanning Tree problem through Kruskal's and Prim's algorithms. It examines the conditions for greedy optimality.
Incremental Improvement: Max Flow, Min Cut
This lecture introduces network flow problems, focusing on the Max Flow-Min Cut theorem and its implications for finding maximum throughput. The Ford-Fulkerson algorithm is explored in detail.
Incremental Improvement: Matching
Building on network flow concepts, this lecture delves into matching problems in graphs, including bipartite matching and general graph matching algorithms. It connects flow networks to combinatorial optimization.
Linear Programming: LP, Reductions, Simplex
Professor Devadas introduces linear programming, covering its formulation, reductions, and the Simplex algorithm for solving optimization problems. The lecture emphasizes geometric interpretations and duality.
Complexity: P, NP, NP-completeness, Reductions
Professor Demaine systematically introduces the fundamental concepts of computational complexity theory, covering the definitions of P, NP, and NP-completeness. The lecture details the critical role of polynomial-time reductions in establishing the relationships between decision problems.

















