This course aims to introduce basics of algorithm design techniques with analysis of various approaches of solving problems using divide and conquer, dynamic programming, Greedy method and graph algorithms.