This course provides Strategies of algorithms synthesis and analysis. Design methodologies of classical algorithm categories such as: divide-and-conquer, greedy method, dynamic programming, search and traversal, backtracking, and branch-and-bound. Computational complexity and important theoretical results from lower-and upper-bound studies, NP-hard, and NP-complete problems will be addressed.