Undergraduate · NUST
How to design efficient algorithms and rigorously analyze their correctness and performance.
Course Description
This course covers the fundamental paradigms of algorithm design — divide and conquer, dynamic programming, and greedy strategies — together with the mathematical tools used to analyze algorithm correctness and asymptotic time/space complexity. Applications span sorting and searching, graph algorithms (shortest paths, minimum spanning trees, network flow), and an introduction to NP-completeness as a way of recognizing computationally hard problems.
Emphasis is placed on developing the ability to design a correct, efficient algorithm from first principles for a novel problem, and to rigorously justify both its correctness and its running time.
Course Outcomes / Objectives
Text Books