'Look through the Table of Contents and you might conclude that this is just another algorithms book. Don't be fooled. What makes this book special – what makes this book the first of its kind – is Tim Roughgarden's singular ability to weave algorithm design with pedagogical design. Learners need opportunities to check their understanding at key points, to study examples, to see algorithms in contexts that they care about, to confront the needed mathematical background buffered by these motivating contexts. It's all here, carried along by Roughgarden's enthusiasm not only for algorithms but also for the people who want to learn them.' Daniel Zingaro, University of Toronto
Part I. The Basics: 1. Introduction; 2. Asymptotic notation; 3. Divide-and-Conquer algorithms; 4. The master method; 5. QuickSort; 6. Linear-time selection; Part II. Graph Algorithms and Data Structures: 7. Graphs: the Basics; 8. Graph search and its applications; 9. Dijkstra's shortest-path algorithm; 10. The heap data structure; 11. Search trees; 12. Hash tables and Bloom filters; Part III. Greedy Algorithms and Dynamic Programming; 13. Introduction to greedy algorithms; 14. Huffman codes; 15. Minimum spanning trees; 16. Introduction to dynamic programming; 17. Advanced dynamic programming; 18. Shortest paths revisited; Part IV. Algorithms for NP-Hard Problems; 19. What is NP-Hardness?; 20. Compromising on correctness: efficient inexact algorithms; 21. Compromising on speed: exact inefficient algorithms; 22. Proving problems NP-hard; 23. P, NP, and all that; 24. Case study: the FCC incentive auction; Appendix A. Quick review of proofs By induction; Appendix B. Quick review of discrete probability; Epilogue. A field guide to algorithm design; Hints and solutions.