This table provides information about both the lecture (L) and recitation (R) sessions.
| SES # | TOPICS | KEY DATES |
|---|---|---|
| Introduction and document distance | ||
| L1 | Introduction and document distance | |
| R1 | Document distance in Python (docdist{1,2,3,4}.py) | |
| L2 | More document distance, mergesort | |
| R2 | Python cost model, review for asymptotic notation and mergesort | |
| Binary search trees | ||
| L3 | Airplane scheduling, binary search trees | |
| R3 | Binary search trees | |
| L4 | Balanced binary search trees | |
| R4 | AVL Trees (balanced binary search trees) | |
| Hashing | ||
| L5 | Hashing I: chaining, hash functions | Problem set 1 due |
| R5 | Hashing in Python, mutability | |
| L6 | Hashing II: table doubling, Karp-Rabin | |
| R6 | Karp-Rabin review, rolling hashes principles and code | |
| L7 | Hashing III: open addressing | |
| R7 |
Open addressing: theory review, Python code More rolling hashes |
|
| Sorting | ||
| L8 | Sorting I: heaps | |
| R8 |
Overview of sorting methods Heaps as data structures: principles, sorting, priority queues |
|
| L9 | Sorting II: heaps | Problem set 2 due |
| L10 | Sorting III: lower bounds, linear-time sorting | |
| R9 | Quiz review: interesting problems | Quiz 1 |
| L11 | Sorting IV: stable sorting, radix sort | |
| R10 | Counting, radix and bucket sorting, gas simulation | |
| Searching | ||
| L12 | Searching I: graph search, representations, and applications | |
| L13 | Searching II: breadth-first search and depth-first search | Problem set 3 due |
| L14 | Searching III: topological sort and NP-completeness | |
| R11 | Breadth-first search and depth-first search | |
| Shortest paths | ||
| L15 | Shortest paths I: intro | |
| R12 | Assistance for problem set | |
| L16 | Shortest paths II: Bellman-Ford | Problem set 4 due |
| R13 |
Generic shortest-path algorithm: concepts, properties Bellman-Ford: examples, negative-cost cycles |
|
| L17 | Shortest paths III: Dijkstra | |
| R14 |
Hands-on Dijkstra: pseudocode, preconditions, examples, why it works Priority queues: review, extended Python implementation |
|
| L18 | Shortest paths IV: Dijkstra speedups | |
| R15 | Array implementation of Dijkstra | Quiz 2 |
| Dynamic programming | ||
| L19 | Dynamic programming I: memoization, Fibonacci, Crazy Eights, guessing | |
| R16 | Hands-on dynamic programming: big ideas, memoization in Fibonacci, crazy cards, Dijkstra and Bellman-Ford algorithm as dynamic programming | |
| L20 | Dynamic programming II: longest common subsequence (LCS), parent pointers | |
| R17 | More dynamic programming: beating Super Mario Brothers, getting points back on tests (LCS), Crazy Eights | |
| L21 | Dynamic programming III: text justification, parenthesization, knapsack, pseudopolynomial time, Tetris training | Problem set 5 due |
| R18 | Even more dynamic programming: maximum-sum sub-array, more Tetris | |
| L22 | Dynamic programming IV: piano fingering, structural DP (trees), vertex cover, dominating set, and beyond | |
| R19 | Knapsack and its variants, structural dynamic programming: covering a tree with templates, dominating set | |
| Numerics | ||
| L23 | Numerics I | |
| R20 | Dynamic programming practice: live Python coding, dominating sets, structural dynamic programming: covering a tree with templates | |
| L24 | Numerics II | Problem set 6 due |
| R21 | Divide and conquer vs. dynamic programming on problems: matrix multiplication, tower, max-sum subarray, closest pair | |
| R22 | Numerics review, Strassen's algorithm for matrix multiplication | |
| Beyond 6.006 | ||
| L25 | Beyond 6.006: follow-on classes, geometric folding algorithms | |
| R23 | Review for the final exam | |
