The text covers important algorithm design techniques, such as greedy algorithms, dynamic programming, and divide-and-conquer, and gives applications to contemporary problems. Techniques including Fast Fourier transform, KMP algorithm for string matching, CYK algorithm for context free parsing and gradient descent for convex function minimization are discussed in detail. The book's emphasis is on computational models and their effect on algorithm design. It gives insights into algorithm design techniques in parallel, streaming and memory hierarchy computational models. The book also emphasizes the role of randomization in algorithm design, and gives numerous applications ranging from data-structures such as skip-lists to dimensionality reduction methods.
Design and Analysis of Algorithms: A Contemporary Perspective
Preface; Acknowledgement; 1. Model and analysis; 2. Basics of probability and tail inequalities; 3. Warm up problems; 4. Optimization I: brute force and greedy strategy; 5. Optimization II: dynamic programming; 6. Searching; 7. Multidimensional searching and geometric algorithms; 8. String matching and finger printing; 9. Fast Fourier transform and applications; 10. Graph algorithms; 11. NP completeness and approximation algorithms; 12. Dimensionality reduction; 13. Parallel algorithms; 14. Memory hierarchy and caching; 15. Streaming data model; Appendix A. Recurrences and generating functions; Index.