Analysis and Design of Algorithms provides a structured view of algorithm design techniques in a concise, easy-to-read manner. The book was written with an express purpose of being easy – to understand, read, and carry. It presents a pioneering approach in the teaching of algorithms, based on learning algorithm design techniques, and not merely solving a collection of problems. This allows students to master one design technique at a time and apply it to a rich variety of problems. Analysis and Design of Algorithms covers the algorithmic design techniques of divide and conquer, greedy, dynamic programming, branch and bound, and graph traversal. For each of these techniques, there are templates and guidelines on when to use and not to use each technique. Many sections contain innovative mnemonics to aid the readers in remembering the templates and key takeaways. Additionally, the book covers NP-completeness and the inherent hardness of problems. The third edition includes a new section on polynomial multiplication, as well as additional exercise problems, and an updated appendix. Written with input from students and professionals, Analysis and Design of Algorithms is well suited for introductory algorithm courses at the undergraduate and graduate levels. The structured organization of the text makes it especially appropriate for online and distance learning.