Introduction: Definition, asymptotic notations and complexity analysis (best, worst, and average case), notions of optimality, amortize analysis.
Algorithm Design Techniques: Greedy, divide and conquer, dynamic programming with examples, fractional knapsack and 0-1 knapsack problems, integer, matrix and polynomial multiplication, convex hull, closest pairs, string matching, FFT, extended Euclid's algorithm.
Graphs and Graph Algorithms: Definition, representations of graphs , depth first search, breadth first search, Kruskal's and Prim’s algorithm for minimum spanning tree, Dijkstra’s single source shortest path algorithm, Floyd-Warshall all-pairs shortest path algorithm.
Computational Complexity: Introduction to NP completeness, the classes P and NP, polynomial reduction, NP hard and NP complete problems, introduction to branch-and-bound, backtracking and approximation algorithms.