Analysis and Design of Algorithms
This course aims to introduce students to the techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics include dynamic programming, greedy algorithms, amortized analysis, graph algorithms, graph and tree traversal, and shortest paths. Advanced topics may include network flow, computational geometry, and number-theoretic algorithms.