Please see Staff page.
Please see the Communication Policy.
This undergraduate course covers techniques for designing and analyzing algorithms and data structures
for a wide range of problems. Topics include:
Divide-and-conquer, greedy algorithms, dynamic programming, local search, and randomization
Balanced binary tree, hashing
Graph traversal, strongly connected components, shortest path, minimum spanning tree, max flows and minimum cuts, matching
Linear programming, duality, gradient descent
Streaming, sketching, minimum spanning tree, parallel and distributed algorithms, external memory algorithms
Easy and hard problems, decision problems, NP-Completeness, reducibility