
This course offers a thorough exploration of algorithm design and analysis, equipping students with the
skills to understand and implement various algorithmic techniques such as divide and conquer, greedy
methods, dynamic programming, backtracking, Linear programming and branch and bound strategies.
Starting with a review of essential data structures and algorithm analysis, the course progresses to cover
advanced topics, including classical problems like matrix multiplication, sorting algorithms, and the traveling
salesperson problem. Students will also examine computational complexity concepts, including P, NP, NPhard, and NP-complete classifications, along with approximation algorithms.