This course is designed to teach techniques for the design and analysis of efficient computer algorithms through theoretical backgrounds and examples of advanced methods and data structures. Topics include asymptotic growth analysis of functions, average and worst case analysis, sorting and selection problems, advanced search trees, graph theory and related algorithms, divide and conquer and greedy programming paradigms, hashing, complexity classes of P, NP and NP-complete.

**Prerequisites: **

CMPS255 – Object Oriented Programming

MATH333 – Calculus III