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 |