Part I: PRELIMINARIES Column 1: Cracking the Oyster A Friendly Conversation·Precise Problem Statement·Program Design·Implementation Sketch·Principles·Problems·Further Reading Column 2: Aha! Algorithms Three Problems·Ubiquitous Binary Search·The Power of Primitives·Getting It Together: Sorting·Principles·Problems·Further Reading·Implementing an Anagram Program Column 3: Data Structures Programs A Survey Program·Form-Letter Programming·An Array of Examples·Structuring Data·Powerful Tools for Specialized Data·Principles·Problems·Further Reading Column 4: Writing Correct Programs The Challenge of Binary Search·Writing the Program·Understanding the Program·Principles·The Roles of Program Verification·Problems·Further Reading Column 5: A Small Matter of Programming From Pseudocode to C·A Test Harness·The Art of Assertion·Automated Testing·Timing·The Complete Program·Principles·Problems·Further Reading·Debugging Part II: PERFORMANCE Column 6: Perspective on Performance A Case Study·Design Levels·Principles·Problems·Further Reading Column 7: The Back of the Envelope Basic Skills·Performance Estimates·Safety Factors·Little's Law·Principles·Problems·Further Reading·Quick Calculations in Everyday Life Column 8: Algorithm Design Techniques The Problem and a Simple Algorithm·Two Quadratic Algorithms·A Divide-and-Conquer Algorithm·A Scanning Algorithm·What Does It Matter?·Principles·Problems·Further Reading Column 9: Code Tuning 7 A Typical Story·A First Aid Sampler·Major Surgery——Binary Search·Principles·Problems·Further Reading Column 10: Squeezing Space The KeySimplicity·An Illustrative Problem·Techniques for Data Space·Techniques for Code Space·Principles·Problems·Further Reading·A Big Squeeze Part III: THE PRODUCT Column 11: Sorting 115 Insertion Sort·A Simple Quicksort·Better Quicksorts·Principles·Problems·Further Reading Column 12: A Sample Problem The Problem·One Solution·The Design Space·Principles·Problems·Further Reading Column 13: Searching The Interface·Linear Structures·Binary Search Trees·Structures for Integers·Principles·Problems·Further Reading·A Real Searching Problem Column 14: Heaps The Data Structure·Two Critical Functions·Priority Queues·A Sorting Algorithm·Principles·Problems·Further Reading Column 15: Strings of Pearls Words·Phrases·Generating Text·Principles·Problems·Further Reading Epilog to the First Edition Epilog to the Second Edition Appendix 1: A Catalog of Algorithms Appendix 2: An Estimation Quiz Appendix 3: Cost Models for Time and Space Appendix 4: Rules for Code Tuning Appendix 5: C++ Classes for Searching Hints for Selected Problems Solutions to Selected Problems Index