Introduction to Analysis of Algorithms
The course develops techniques used in the design and analysis of algorithms, with an emphasis on problems arising in computing applications. Example applications are drawn from systems and networks, artificial intelligence, computer vision, data mining, and computational biology. This course covers four major algorithm design techniques (greedy algorithms, divide-and-conquer, dynamic programming, and network flow), undecidability and NP-completeness and its application for cryptography, and algorithmic techniques for intractable problems (such as identification of structured special cases, approximation algorithms, local search heuristics, and online algorithms).
Topics
- Identify problems solvable with a greedy algorithm, design and prove the correctness of such an algorithm, and supply asymptotic running time for a variety of given algorithms.
- Recognize problems to which divide and conquer or dynamic programming approaches may apply, design algorithms with these approaches, and analyze their computational efficiency.
- Recognize resource management as well as partition problems that can be reduced to network flow or cut problems, implement correct strategies for finding optimal flows/cuts, and understand the properties of these strategies.
- Apply randomization to produce tractable algorithms for several specific computationally challenging problems.
- Recognize whether or not certain problems are computationally intractible (e.g. NP-Hard, undecidable), and use reductions from known problems to establish intractability.
- Use approximation algorithms to efficiently produce near-optimal solutions for intractable problems, and bound how close these algorithms are to being optimal.
- Be able to recognize, implement, and understand the properties of several famous and important algorithms including Gale-Shapley method for stable matchings, Prim's and Kruskal's algorithms for finding minimum spanning trees, Bellman-Ford's algorithm for finding shortest paths in a graph, and Ford-Fulkerson's algorithm for finding max flows in networks.
Official roster learning outcomes
Prerequisites & course information
CS 2800 and CS 3110; or a minimum grade of A- in CS 2110 or CS 2112 and CS 2800.
Catalogue variants
- Introduction to Analysis of Algorithms · 4.0 · Undergraduate