Learning Outcomes
Understand the mapping of problems to algorithmic solutions (e.g., as graph problems, linear
programs. Use advanced algorithmic techniques (e.g., randomization, approximation) to solve problems. Apply advanced analysis techniques (e.g., amortized, probabilistic, etc.) to algorithms.
Course Content (Syllabus)
Advanced data structures (e.g., Fibonacci heaps). String-based data structures and algorithms (e.g., suffix arrays, suffix trees, tries). Linear Programming (e.g., duality, simplex method, interior point algorithms). Number-theoretic algorithms (e.g., modular arithmetic, primality testing, integer factorization). Randomized algorithms. Approximation algorithms. Amortized analysis. Probabilistic analysis. Online algorithms and competitive analysis. Local Search.