This course is an advanced form of an introductory algorithms course, and is meant to have a thorough grounding in core Algorithms required for pursuing PG degree in Computer Science. The course covers topics such as asymptotic notation, recurrence relation, graph algorithms, heaps, dynamic programming, greedy algorithms, divide and conquer, NP-completeness where the UG contents of each topic is first reviewed (in a fast-paced manner), and is followed by some advanced content.

1. Students are able to design and analyse algorithms using techniques like divide and conquer, greedy and dynamic programming.

2. Students are able to use standard data structures like heaps, trees and graphs for designing algorithms.

3. Students are able to prove NP-completeness of problems using reductions.

4. Students are able to state modern techniques to handle intractable problems like randomization, approximation, backtracking search.