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, KarpRabin  
R6  KarpRabin 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, lineartime 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: breadthfirst search and depthfirst search  Problem set 3 due 
L14  Searching III: topological sort and NPcompleteness  
R11  Breadthfirst search and depthfirst search  
Shortest paths  
L15  Shortest paths I: intro  
R12  Assistance for problem set  
L16  Shortest paths II: BellmanFord  Problem set 4 due 
R13 
Generic shortestpath algorithm: concepts, properties BellmanFord: examples, negativecost cycles 

L17  Shortest paths III: Dijkstra  
R14 
Handson 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  Handson dynamic programming: big ideas, memoization in Fibonacci, crazy cards, Dijkstra and BellmanFord 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: maximumsum subarray, 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, maxsum subarray, closest pair  
R22  Numerics review, Strassen’s algorithm for matrix multiplication  
Beyond 6.006  
L25  Beyond 6.006: followon classes, geometric folding algorithms  
R23  Review for the final exam 