This course includes topics on algorithm design techniques; methods for evaluating algorithm efficiency; data structure specification and implementation; and applications to fundamental computational problems in sorting and selection, graphs and networks, scheduling and combinatorial optimization, computational geometry, and arithmetic and matrix computation. It also introduces students to parallel algorithms and to computational complexity and a survey of NP-complete problems.