This course discusses the design and analysis of efficient algorithms and algorithmic paradigms. Applications include sorting, searching dynamic structures, graph algorithms, computationally hard problems, and NP completeness. Prerequisite: Graduate standing.