Introduction to design and analysis of algorithms: time and space complexity, verification of correctness; advanced algorithm design strategies: iterative, divide and conquer, greedy method, dynamic programming, branch and bound, etc.; specific examples drawn from sorting, searching, string searching, graph problems, matrices, polynomial arithmetic, cryptography; hard problems and approximation algorithms: Knapsack, bin packing, and graph coloring problems, etc.