Chapter 1 Design and Analysis of Algorithms 1.1 From Problems to Programs 1.2 Abstract Data Types 1.3 Data Types, Data Structures, and Abstract Data Types 1.4 The Running Time of a Program 1.5 Calculating the Running Time of a Program 1.6 Good Programming Practice 1.7 Super Pascal Chapter 2 Basic Data Types 2.1 The Data Type "List" 2.2 Implementation of Lists 2.3 Stacks 2.4 Queues 2.5 Mappings 2.6 Stacks and Recursive Procedures Chapter 3 Trees 3.1 Basic Terminology 3.2 The ADT TREE 3.3 Implementations of Trees 3.4 Binary Trees Chapter 4 Basic Operations on Sets 4.1 Introduction to Sets 4.2 An ADT with Union, Intersection, and Difference 4.3 A Bit-Vector Implementation of Sets 4.4 A Linked-List Implementation of Sets 4.5 The Dictionary 4.6 Simple Dictionary Implementations 4.7 The Hash Table Data Structure 4.8 Estimating the Efficiency of Hash Functions 4.9 Implementation of the Mapping ADT 4.10 Priority Queues 4.11 Implementations of Priority Queues 4.12 Some Complex Set Structures Chapter 5 Advanced Set Representation Methods 5.1 Binary Search Trees 5.2 Time Analysis of Binary Search Tree Operations 5.3 Tries 5.4 Balanced Tree Implementations of Sets 5.5 Sets with the MERGE and FIND Operations 5.6 An ADT with MERGE and SPLIT Chapter 6 Directed Graphs 6.1 Basic Definitions 6.2 Representations for Directed Graphs 6.3 The Single-Source Shortest Paths Problem 6.4 The All-Pairs Shortest Path Problem 6.5 Traversals of Directed Graphs 6.6 Directed Acyclic Graphs 6.7 Strong Components Chapter 7 Undirected Graphs 7.1 Definitions 7.2 Minimum-Cost Spanning Trees 7.3 Traversals 7.4 Articulation Points and Biconnected Components 7.5 Graph Matching Chapter 8 Sorting 8.1 The Internal Sorting Model 8.2 Some Simple Sorting Schemes 8.3 Quicksort 8.4 Heapsort 8.5 Bin Sorting 8.6 A Lower Bound for Sorting by Comparisons 8.7 Order Statistics Chapter 9 Algorithm Analysis Techniques 9.1 Efficiency of Algorithms 9.2 Analysis of Recursive Programs 9.3 Solving Recurrence Equations 9.4 A General Solution for a Large Class of Recurrences Chapter 10 Algorithm Design Techniques 10.1 Divide-and-Conquer Algorithms 10.2 Dynamic Programming 10.3 Greedy Algorithms 10.4 Backtracking 10.5 Local Search Algorithms Chapter 11 Data Structures and Algorithms for External Storage 11.1 A Model of External Computation 11.2 External Sorting 11.3 Storing Information in Files 11.4 External Search Trees Chapter 12 Memory Management 12.1 The Issues in Memory Management 12.2 Managing Equal-Sized Blocks 12.3 Garbage Collection Algorithms for Equal-Sized Blocks 12.4 Storage Allocation for Objects with Mixed Sizes 12.5 Buddy Systems 12.6 Storage Compaction Bibliography Index