This course provides an introduction to the theory underlying computer algorithms. Students successfully completing this class will have a basic understanding of how algorithms for problem solving on computers are designed and analyzed, and will be prepared begin independently designing algorithms to solve new problems. The course begins with a tutorial of the basic algorithmic analysis techniques, continues with a study of basic algorithms for solving common computing problems, and concludes with a look at computational complexity and approximate solutions.

Topic include efficiency classifications and mathematical analysis of recursive and non-recursive algorithms; design techniques: brute force, greedy, decrease-and-conquer, divide-and-conquer, transform-and-conquer, dynamic programming, iterative improvement, backtracking, branch-and-bound, space and time tradeoffs; NP-completeness; approximation algorithms; computational problems: sorting, searching, string processing, graphs, arithmetic, linear algebra.

Specific Outcomes