This course will cover the basic aspects of the theory of algorithms, including divide-and-conquer, dynamic programming and greedy, several graph algorithms, randomized algorithms, and approximation algorithms, together with an introduction to undecidability, and to NP-completeness. 

Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Program: 
Undergraduate Program
Division: 
Electives