Skip to content
lectern.tv
MIT6.006Theory & Algosundergraduate· 2011

Introduction to Algorithms

Prof. Erik Demaine & Prof. Srini Devadas

Foundational MIT algorithms course covering asymptotic complexity, divide-and-conquer, hashing, balanced search trees, graph search, shortest paths, and dynamic programming.

Start Lecture 122 lectures · 19h total
Syllabus progress0 of 22 watched
MIT 6.006: Introduction to Algorithms

Syllabus

22
Lecture 1· 53:21

Algorithmic Thinking & Peak Finding in 1D and 2D

Shows why plausible-looking O(n) 2D divide-and-conquer algorithms can silently fail correctness—and how proving an invariant rescues both correctness and O(n log n) runtime.

Lecture 2· 48:51

MIT 6.006 Lecture 2: Models of Computation, Random Access Machine & Document Distance

Defines the Word-RAM model vs. pointer machines and Python's CPython cost model by iteratively accelerating a document-similarity algorithm from minutes down to milliseconds.

Lecture 3· 51:19

MIT 6.006 Lecture 3: Insertion Sort, Binary Insertion & Merge Sort Recurrences

Compares Θ(n²) in-place sorting against divide-and-conquer Merge Sort via recursion-tree cost accounting and auxiliary space trade-offs.

Lecture 4· 52:32

MIT 6.006 Lecture 4: Priority Queues, Binary Heaps & O(n) Build-Max-Heap

Visualizes implicit array-backed binary trees and proves why bottom-up Build-Max-Heap runs in linear O(n) time rather than O(n log n).

Lecture 5· 52:39

MIT 6.006 Lecture 5: Binary Search Trees & Runway Reservation Scheduling

Motivated by real-time airport runway scheduling, Demaine builds augmented Binary Search Trees supporting O(h) rank and range queries.

Lecture 6· 51:59

MIT 6.006 Lecture 6: AVL Trees, Tree Rotations & Guaranteed O(log n) Height

Proves via Fibonacci recurrence bounds that height-balance invariants keep AVL trees strictly O(log n) tall, then derives single and double rotations cleanly.

Lecture 7· 52:08

MIT 6.006 Lecture 7: Decision-Tree Ω(n log n) Lower Bound, Counting Sort & Radix Sort

Proves the information-theoretic Ω(n log n) comparison-sorting barrier via Stirling's approximation on n!, then breaks through it in linear time using integer Radix Sort.

Lecture 8· 51:15

MIT 6.006 Lecture 8: Hashing with Chaining, Simple Uniform Hashing & Universal Families

Rigorous randomized algorithms lecture showing how universal hash functions defeat adversarial key collisions in expected O(1) time.

Lecture 9· 52:47

Lecture 9: Table Doubling, Karp-Rabin (6.006)

This lecture explores the table doubling technique for dynamic array resizing and introduces the Karp-Rabin string matching algorithm, examining its probabilistic hashing approach.

Lecture 10· 50:55

Lecture 10: Open Addressing, Cryptographic Hashing (6.006)

This session details open addressing collision resolution strategies in hash tables, including linear and quadratic probing, and introduces principles of cryptographic hashing.

Lecture 11· 47:24

Lecture 11: Integer Arithmetic, Karatsuba Multiplication (6.006)

This lecture delves into efficient algorithms for integer arithmetic, focusing on the divide-and-conquer Karatsuba algorithm for fast polynomial and integer multiplication.

Lecture 12· 51:17

Lecture 12: Square Roots, Newton's Method (6.006)

This session introduces numerical methods for computing square roots, specifically applying Newton's method for iterative approximation and analyzing its convergence rate.

Lecture 13· 50:48

Lecture 13: Breadth-First Search (BFS) (6.006)

This lecture introduces Breadth-First Search (BFS) as a fundamental graph traversal algorithm, explaining its application for finding shortest paths in unweighted graphs.

Lecture 14· 50:31

Lecture 14: Depth-First Search (DFS), Topological Sort (6.006)

This session covers Depth-First Search (DFS) for graph traversal, demonstrating its use in cycle detection and for performing topological sort on directed acyclic graphs (DAGs).

Lecture 15· 53:15

Lecture 15: Single-Source Shortest Paths Problem (6.006)

This lecture defines the single-source shortest paths problem and introduces foundational concepts for solving it on graphs with varying edge weights, setting up subsequent algorithms.

Lecture 16· 51:26

Lecture 16: Dijkstra (6.006)

This session provides a detailed examination of Dijkstra's algorithm, analyzing its greedy approach for finding the single-source shortest paths in graphs with non-negative edge weights.

Lecture 17· 48:51

Lecture 17: Bellman-Ford (6.006)

This lecture introduces the Bellman-Ford algorithm, contrasting its iterative relaxation approach with Dijkstra's and demonstrating its ability to handle negative edge weights and detect negative cycles.

Lecture 18· 53:16

Lecture 18: Speeding up Dijkstra (6.006)

This session explores advanced techniques for optimizing Dijkstra's algorithm, focusing on the use of Fibonacci heaps and other priority queue implementations to improve its time complexity.

Lecture 19· 51:47

Lecture 19: Dynamic Programming I: Fibonacci, Shortest Paths (6.006)

This introductory dynamic programming lecture covers the Fibonacci sequence calculation and its application to shortest path problems in directed acyclic graphs.

Lecture 20· 52:12

Lecture 20: Dynamic Programming II: Text Justification, Blackjack (6.006)

This lecture continues dynamic programming, illustrating its versatility through optimal text justification algorithms and strategic decision-making in the game of Blackjack.

Lecture 21· 52:41

Lecture 21: Dynamic Programming III: Parenthesization, Edit Distance, Knapsack (6.006)

This advanced dynamic programming lecture examines optimal matrix chain parenthesization, calculates string edit distance using the Wagner-Fischer algorithm, and solves the 0/1 Knapsack problem.

Lecture 22· 49:20

Lecture 22: Dynamic Programming IV: Guitar Fingering, Tetris, Super Mario Bros. (6.006)

This lecture showcases the broad applicability of dynamic programming through unique case studies including optimal guitar fingering, high-score strategies in Tetris, and pathfinding in Super Mario Bros.