Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Title Page
Copyright Page
Table of Contents
Preface
PART I - Preliminaries
1 - Data Structures and Algorithms
1.1 A Philosophy of Data Structures
1.2 Abstract Data Types and Data Structures
1.3 Design Patterns
1.4 Problems, Algorithms, and Programs
1.5 Further Reading
1.6 Exercises
2 - Mathematical Preliminaries
2.1 Sets and Relations
2.2 Miscellaneous Notation
2.3 Logarithms
2.4 Summations and Recurrences
2.5 Recursion
2.6 Mathematical Proof Techniques
2.7 Estimation
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.5 Calculating the Running Time for a Program
3.6 Analyzing Problems
3.7 Common Misunderstandings
3.8 Multiple Parameters
3.9 Space Bounds
3.10 Speeding Up Your Programs
3.11 Empirical Analysis
3.12 Further Reading
3.13 Exercises
3.14 Projects
PART II - Fundamental Data Structures
4 - Lists, Stacks, and Queues
4.1 Lists
4.2 Stacks
4.3 Queues
4.4 Dictionaries
4.5 Further Reading
4.6 Exercises
4.7 Projects
5 - Binary Trees
5.1 Definitions and Properties
5.2 Binary Tree Traversals
5.3 Binary Tree Node Implementations
5.4 Binary Search Trees
5.5 Heaps and Priority Queues
5.6 Huffman Coding Trees
5.7 Further Reading
5.8 Exercises
5.9 Projects
6 - Non-Binary Trees
6.1 General Tree Definitions and Terminology
6.2 The Parent Pointer Implementation
6.3 General Tree Implementations
6.4 K-ary Trees
6.5 Sequential Tree Implementations
6.6 Further Reading
6.7 Exercises
6.8 Projects
PART III - Sorting and Searching
7 - Internal Sorting
7.1 Sorting Terminology and Notation
7.2 Three Θ(n2) Sorting Algorithms
7.3 Shellsort
7.4 Mergesort
7.5 Quicksort
7.6 Heapsort
7.7 Binsort and Radix Sort
7.8 An Empirical Comparison of Sorting Algorithms
7.9 Lower Bounds for Sorting
7.10 Further Reading
7.11 Exercises
7.12 Projects
8 - File Processing and External Sorting
8.1 Primary versus Secondary Storage
8.2 Disk Drives
8.3 Buffers and Buffer Pools
8.4 The Programmer’s View of Files
8.5 External Sorting
8.6 Further Reading
8.7 Exercises
8.8 Projects
9 - Searching
9.1 Searching Unsorted and Sorted Arrays
9.2 Self-Organizing Lists
9.3 Bit Vectors for Representing Sets
9.4 Hashing
9.5 Further Reading
9.6 Exercises
9.7 Projects
10 - Indexing
10.1 Linear Indexing
10.2 ISAM
10.3 Tree-based Indexing
10.4 2-3 Trees
10.5 B-Trees
10.6 Further Reading
10.7 Exercises
10.8 Projects
PART IV - Advanced Data Structures
11 - Graphs
11.1 Terminology and Representations
11.2 Graph Implementations
11.3 Graph Traversals
11.4 Shortest-Paths Problems
11.5 Minimum-Cost Spanning Trees
11.6 Further Reading
11.7 Exercises
11.8 Projects
12 - Lists and Arrays Revisited
12.1 Multilists
12.2 Matrix Representations
12.3 Memory Management
12.4 Further Reading
12.5 Exercises
12.6 Projects
13 - Advanced Tree Structures
13.1 Tries
13.2 Balanced Trees
13.3 Spatial Data Structures
13.4 Further Reading
13.5 Exercises
13.6 Projects
PART V - Theory of Algorithms
14 - Analysis Techniques
14.1 Summation Techniques
14.2 Recurrence Relations
14.3 Amortized Analysis
14.4 Further Reading
14.5 Exercises
14.6 Projects
15 - Lower Bounds
15.1 Introduction to Lower Bounds Proofs
15.2 Lower Bounds on Searching Lists
15.3 Finding the Maximum Value
15.4 Adversarial Lower Bounds Proofs
15.5 State Space Lower Bounds Proofs
15.6 Finding the ith Best Element
15.7 Optimal Sorting
15.8 Further Reading
15.9 Exercises
15.10 Projects
16 - Patterns of Algorithms
16.1 Dynamic Programming
16.1.2 All-Pairs Shortest Paths
16.2 Randomized Algorithms
16.3 Numerical Algorithms
16.4 Further Reading
16.5 Exercises
16.6 Projects
17 - Limits to Computation
17.1 Reductions
17.2 Hard Problems
17.3 Impossible Problems
17.4 Further Reading
17.5 Exercises
17.6 Projects
PART VI - APPENDIX
A - Utility Functions
Bibliography
Index
← Prev
Back
Next →
← Prev
Back
Next →