Prerequisites: Discrete Mathematical Structures, Data Structures Objectives: Detailed study of the basic notions of the design of algorithms and the underlying data structures. Several measures of complexity are introduced. Emphasis on the structure, complexity, and efficiency of algorithms. Course Outline: Introduction; Asymptotic notations; Recursion and recurrence relations; Divide-and-conquer approach; Sorting; Search trees; Heaps; Hashing; Greedy approach; Dynamic programming; Graph algorithms; Shortest paths; Network flow; Disjoint Sets; Polynomial and matrix calculations; String-matching; NP complete problems; Approximation algorithms.
Reference Material: Introduction to Algorithms, T. H. Cormen, C. E. Leiserson, and R. L. Rivest, MIT