← Back to Teaching

Undergraduate · NUST

CS-251 — Design and Analysis of Algorithms

How to design efficient algorithms and rigorously analyze their correctness and performance.

Credit hours: 3
Prerequisite Course(s): Data Structures
Office hours: By appointment

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