Schedule
Week 0  
#  Day  Date  Topic  Work Due  
1  F  8/25 
An introduction to the course
We begin to consider the core ideas of the course. 


Week 1  
#  Day  Date  Topic  Work Due  
2  M  8/28 
Shortest path
We continue our exploration of the shortest path problem from the prior class. 


3  W  8/30 
Asymptotic analysis
We begin to consider ways to analyze the running times of algorithms. 


4  F  9/1 
Reflective activities
We reflect on the learning goals of the first few days of class and ground our understanding in a variety of exercises. 


Week 2  
#  Day  Date  Topic  Work Due  
5  M  9/4 
Divideandconquer algorithms and structures
We explore one of the important algorithm design techniques, divide and conquer. Divide and conquer algorithms and structures achieve some efficiency by splitting the input in half. 


6  W  9/6 
Asymptotic analysis and recurrence relations
We explore ways to think about the running time of divideandconquer algorithms. 

7  F  9/8 
The Master Theorem
We consider proofs related to recurrence relations, and therefore to divideandconquer algorithms. 


Week 3  
#  Day  Date  Topic  Work Due  
8  M  9/11 
Roles of data structures and abstract data types
We begin to consider the ADTs and data structures that underlie many of the algorithms we write. 


9  W  9/13 
Hash Tables
We consider hash tables, one of the more popular implementations of the dictionary ADT. 


10  F  9/15 
More on dictionaries
We consider some basic issues of the tree ADT / data structure. 


Week 4  
#  Day  Date  Topic  Work Due  
11  M  9/18 
Binary search trees
We continue trees in general and binary search trees in particular. 


12  W  9/20 
Redblack trees
We start to consider redblack trees, one of the approaches for keeping search trees relatively balanced. 


13  F  9/22 
Redblack trees, continued
We continue our exploration of redblack trees. 


Week 5  
#  Day  Date  Topic  Work Due  
14  M  9/25 
23 trees
We continue to explore balanced trees by considering another approach to balancing trees. 


15  W  9/27 
Pause for breath
We pause to catch up on balanced trees and other issues. 


16  F  9/29 
Sorting
We begin our consideration of one of the most common algorithmic problems, that of putting a collection of values in order. 


Week 6  
#  Day  Date  Topic  Work Due  
17  M  10/2 
Lower bounds on sorting algorithms
We consider lower bounds on comparisonbased sorting algorithms. 


18  W  10/4 
O(n) sorting algorithms
We consider some algorithms that achieve O(n) running time, often by limiting the input in certain ways. 


19  F  10/6 
Radix sort
We continue our exploration of O(n) algorithms, focusing primarily on bucket sort and radix sort 


Week 7  
#  Day  Date  Topic  Work Due  
20  M  10/9 
Discussion of exam 1
We consider exam 1 


21  W  10/11 
Tries
We explore the trie data structure. 


22  F  10/13 
Pause for breath
We wrap up a variety of topics 


Fall Break  
Week 8  
#  Day  Date  Topic  Work Due  
23  M  10/23 
Detour  Skip lists
We consider some details of skip lists. 


24  W  10/25 
Program verification (1)
We begin to explore why and how we we use formal techniques to verify our algorithms. 


25  F  10/27 
Program verification (2)
We consider the details of common verification mechanisms. 


Week 9  
#  Day  Date  Topic  Work Due  
26  M  10/30 
Program verification (3)
We continue our exploration of program verification. 


27  W  11/1 
Program verification (4)
We conclude our exploration of program verification with a traditional example. 


28  F  11/3 
Shortest paths
We start our exploration of graphs by considering algorithms for computing the shortest path between nodes in a graph. 


Week 10  
#  Day  Date  Topic  Work Due  
29  M  11/6 
Minimum spanning trees
We consider an important class of graph algorithm, that of computing the minimum spanning tree of a graph. 


30  W  11/8 
Minimum spanning trees, continued
We explore the details and proofs of correctness of some MST algorithms. 


31  F  11/10 
Implementing graphs
We consider how we might implement/represent graphs in the computer. 


Week 11  
#  Day  Date  Topic  Work Due  
32  M  11/13 
Sets and unionfind
We consider an algorithm and structure that are useful in a variety of situations. 


33  W  11/15 
Network flows
We explore network flow algorithms and their applications. 


34  F  11/17 
Dynamic programming (1)
We consider another important algorithm design technique. 


Week 12  
#  Day  Date  Topic  Work Due  
35  M  11/20 
Dynamic programming (2)
We continue our consideration of dynamic programming 


36  W  11/22 
Discussion of exam 2
We consider common issues on exam 2 


Thanksgiving Break  
Week 13  
#  Day  Date  Topic  Work Due  
37  M  11/27 
Dynamic programming (3)
We conclude our initial exploration of dynamic programming by visiting a common dynamic programming algorithm, approximate string matching. 


38  W  11/29 
Basics of string matching
We consider some basic issues in string matching algorithms 


39  F  12/1 
Improved stringmatching algorithms
We continue to explore stringmatching algorithms 


Week 14  
#  Day  Date  Topic  Work Due  
40  M  12/4 
KnuthMorrisPratt, concluded
We conclude our exploration of string matching with the KnuthMorrisPratt algorithm 


41  W  12/6 
Wrapup
We start to conclude the class 

42  F  12/8 
Evaluate and debrief
We conclude the class 


Finals Week  
#  Day  Date  Topic  Work Due  
43  W  12/13 
Final Examination

