This course is considered as the second part of a two-course sequence on algorithmic solution design and advanced data structures. This course provides advanced algorithms from different application areas to illustrate the techniques used to construct specific strategies for solving problems, and to study the performance of these algorithms. Topics include space and time tradeoffs, dynamic programming, greedy technique, iterative improvement, and .limitation of algorithm power.