6.046J Design and Analysis of Algorithms

6.046J Design and Analysis of Algorithms (Spring 2015, MIT OCW). Instructors: Prof. Erik Demaine, Prof. Srinivas Devadas, and Prof. Nancy Lynch. This is an intermediate algorithms course with an emphasis on teaching techniques for the design and analysis of efficient algorithms, emphasizing methods of application. Topics include divide-and-conquer, randomization, dynamic programming, greedy algorithms, incremental improvement, complexity, and cryptography. (from


Lecture 01 - Overview, Interval Scheduling
Lecture 02 - Divide and Conquer: Convex Hull, Median Finding
Lecture 03 - Divide and Conquer: FFT
Lecture 04 - Divide and Conquer: van Emde Boas Trees
Lecture 05 - Amortization: Amortized Analysis
Lecture 06 - Randomization: Matrix Multiply, Quicksort
Lecture 07 - Randomization: Skip Lists
Lecture 08 - Randomization: Universal and Perfect Hashing
Lecture 09 - Augmentation: Range Trees
Lecture 10 - Dynamic Programming: Advanced DP
Lecture 11 - Dynamic Programming: All-Pairs Shortest Paths
Lecture 12 - Greedy Algorithms: Minimum Spanning Tree
Lecture 13 - Incremental Improvement: Max Flow, Min Cut
Lecture 14 - Incremental Improvement: Matching
Lecture 15 - Linear Programming: LP, Reductions, Simplex
Lecture 16 - Complexity: P, NP, NP-completeness, Reductions
Lecture 17 - Complexity: Approximation Algorithms
Lecture 18 - Complexity: Fixed-Parameter Algorithms
Lecture 19 - Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees
Lecture 20 - Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees
Lecture 21 - Cryptography: Hash Functions
Lecture 22 - Cryptography: Encryption
Lecture 23 - Cache-Oblivious Algorithms: Medians and Matrices
Lecture 24 - Cache-Oblivious Algorithms: Searching and Sorting

6.046J Design and Analysis of Algorithms (Spring 2015)
Instructors: Prof. Erik Demaine, Prof. Srinivas Devadas, and Prof. Nancy Lynch. Lecture Notes. Exams and Solutions. Assignments and Solutions. Recitation Notes and Videos. Syllabus.