An investigation of algorithmic paradigms: divide and conquer, dynamic programming, greedy algorithms, graph algorithms, randomized algorithms, undecidability; NP-completeness, approximation algorithm, sorting lower bound, selected topics from amortized analysis, network flow, and linear programming. Three lecture hours and one hour of discussion a week for one semester. Only one of the following may be counted: Computer Science 331, 331H, 357, 357H, 378 (Topic: Algorithms and Complexity). Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321); and credit with a grade of at least C- or registration for: Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C).

Undergraduate Program
Core - Theory