Ⅰ PRELIMINARIES
1 Data Structures and Algorithms
1.1 A Philosophy of Data Structures
1.1.1 The Need for Data Structures
1.1.2 Costs and Benefits
1.2 Abstract Data Types and Data Structures
1.3 Problems, Algorithms, and Programs
1.4 Further Reading
1.5 Exercises
2 Mathematical Preliminaries
2.1 Sets and Relations
2.2 Miscellaneous Notation
2.3 Logarithms
2.4 Recursion
2.5 Summations and Recurrences
2.6 Mathematical Proof Techniques
2.6.1 Proof by Contradiction
2.6.2 Proof by Mathematical Induction
2.7 Estimating
2.8 Further Reading
2.9 Exercises
3 Algorithm Analysis
3.1 Introduction
3.2 Best, Worst, and Average Cases
3.3 A Faster Computer, or a Faster Algorithm?
3.4 Asymptotic Analysis
3.4.1 Upper Bounds
3.4.2 Lower Bounds
3.4.3 Notation
3.4.4 Simplifying Rules
3.5 Calculating the Running Time of a Program
3.6 Analyzing Problems
3.7 Common Misunderstandings
3.8 Multiple Parameters
3.9 Space Bounds
3.10 Some Practical Considerations
3.11 Further Reading
3.12 Exercises
3.13 Projects
Ⅱ FUNDAMENTAL DATA STRUCTURES
Ⅲ Sorting and Searching
Ⅳ Applications and Advanced Topics
Ⅴ APPENDIX
A Utility Functions
Bibliography
Index