This well-organized textbook provides the design techniques of algorithms in a simple and straight forward manner. The book begins with a description of the fundamental concepts such as algorithm, functions and relations, vectors and matrices. Then it focuses on efficiency analysis of algorithms. In this unit, the technique of computing time complexity of the algorithm is discussed along with illustrative examples. Gradually, the text discusses various algorithmic strategies such as divide and conquer, dynamic programming, Greedy algorithm, backtracking and branch and bound. Finally the string matching algorithms and introduction to NP completeness is discussed. Each algorithmic strategy is explained in stepwise manner, followed by examples and pseudo code. Thus this book helps the reader to learn the analysis and design of algorithms in the most lucid way.