Subject to updates.
Description:
This course is about good data structures, design of fast algorithms, algorithmic analysis (counting steps), and proofs (eg of the correctness
of algorithms).
PREREQUISITES: It is assumed that each student has already taken an undergraduate algorithms course and received a grade of B or better. If not, the student should take 15-450 first.
TOPICS TO BE COVERED: Specific data structure topics to be taught include:
Binomial Heaps, Fibonacci Heaps,
Amortized Analysis, Splay Trees.
Depending on the instructor, there may be lectures on Union-Find and Self-Organizing Data Structures.
Randomizing algorithms are often either simpler or faster than their nonrandomizing counterparts. It is assumed that the student will have seen the analysis of QuickSort. In this course, these ideas will be extended to Randomizing Binomial Search Trees.
Computational Geometry and backwards analysis. Plane and Planar Graphs, Planarity Testing Algorithms, Planar Separator Theorems.
Flow algorithms, Matching. Randomizing matching (using Tutte's theorem).
Reductions and NP Completeness, Cook's Theorem. Counting Problems and #P completeness, Counting bipartite matchings.
Approximation Algorithms for a variety of NP-complete problems.
Probability and Randomness. Chernoff Bounds. Random Walks on Graphs.
The Probabilistic Method of Erdos, Alon and Spencer.
Other topics selected by the instructor may include, but are not limited to, number-theoretic algorithms, numerical analysis, machine learning, and complexity theory.