Students in this course will study efficient algorithms for sorting, searching, graphs, sets, matrices, and other applications, and will learn to design and analyze new algorithms. Students will also learn to recognize and prove NP-Completeness.