The course explores the analysis of algorithms and the relevance of analysis to the design of efficient computer algorithms. Advanced topics in complexity theory. Problem classification. The classes P, NP, P-space, co-NP. Matching and network flow algorithms. Algorithms for parallel, distributed and Cloud computing will be examined. Also Matrix multiplication and Approximation algorithms. Students learn about advanced algorithms and techniques for classifying and dealing with hard problems. Students also get experience applying these algorithms to applications through home-work and a class project.