Chapter 1 Introduction¶
Chapter 2 Arrays: Searching and Sorting¶
- 2.1. Chapter Introduction: Arrays
- 2.2. Searching in an Array
- 2.3. Chapter Introduction: Sorting
- 2.4. Sorting Terminology and Notation
- 2.5. Insertion Sort
- 2.6. Bubble Sort (optional)
- 2.7. Selection Sort
- 2.8. The Cost of Exchange Sorting (optional)
- 2.9. Optimizing Sort Algorithms with Code Tuning (optional)
- 2.10. Mergesort Concepts
- 2.11. Implementing Mergesort
- 2.12. Quicksort
- 2.13. An Empirical Comparison of Sorting Algorithms
- 2.14. Lower Bounds for Sorting (optional)
- 2.15. Arrays as Sets or Maps
- 2.16. Sorting Summary Exercises
Chapter 3 Algorithm Analysis¶
- 3.1. Chapter Introduction: Algorithm Analysis
- 3.2. Problems, Algorithms, and Programs
- 3.3. Comparing Algorithms
- 3.4. Best, Worst, and Average Cases
- 3.5. Faster Computer, or Faster Algorithm?
- 3.6. Asymptotic Analysis and Upper Bounds
- 3.7. Lower Bounds and \(\Theta\) Notation
- 3.8. Calculating Program Running Time
- 3.9. Analyzing Problems
- 3.10. Common Misunderstandings
- 3.11. Multiple Parameters
- 3.12. Space Bounds
- 3.13. Code Tuning and Empirical Analysis
- 3.14. Algorithm Analysis Summary Exercises
- 3.15. Algorithm Analysis Summary Exercises
- 3.16. Growth Rates Review (optional) (WORK IN PROGRESS)
- 3.17. Summation Techniques (optional) (WORK IN PROGRESS)
- 3.18. Solving Recurrence Relations (optional) (WORK IN PROGRESS)
- 3.19. Amortized Analysis (optional) (WORK IN PROGRESS)
Chapter 4 Linear Structures¶
- 4.1. Chapter Introduction: Lists
- 4.2. The List ADT
- 4.3. Static Array-Based Lists
- 4.4. Dynamic Array-Based Lists
- 4.5. Linked Lists
- 4.6. Comparison of List Implementations
- 4.7. Implementing Maps using Lists
- 4.8. Doubly Linked Lists (optional)
- 4.9. Dynamic Array-Based Stacks
- 4.10. Linked Stacks
- 4.11. Implementing Recursion
- 4.12. Array-Based Queues
- 4.13. Linked Queues
- 4.14. Linear Structure Summary Exercises
Chapter 5 Binary Trees¶
- 5.1. Chapter Introduction: Binary Trees
- 5.2. Binary Trees
- 5.3. Binary Tree as a Recursive Data Structure
- 5.4. Binary Tree Node Implementations
- 5.5. The Full Binary Tree Theorem (optional)
- 5.6. Binary Tree Traversals
- 5.7. Implementing Tree Traversals
- 5.8. Information Flow in Recursive Functions
- 5.9. Binary Tree Space Requirements (optional)
- 5.10. Multiple Binary Trees (optional)
- 5.11. A Hard Information Flow Problem (optional)
- 5.12. Binary Tree Chapter Summary
Chapter 6 General Trees and Union-Find (optional)¶
Chapter 7 Search Trees¶
Chapter 8 Priority Queues¶
Chapter 9 Hash Tables¶
- 9.1. Chapter Introduction: Hashing
- 9.2. Hash Function Principles
- 9.3. Sample Hash Functions
- 9.4. Separate Chaining
- 9.5. Converting Objects to Table Indices
- 9.6. Bucket Hashing (optional)
- 9.7. Open Addressing
- 9.8. Improved Collision Resolution
- 9.9. Analysis of Open Addressing
- 9.10. Open Addressing, Deletion
- 9.11. Hash Tables in Real Life (optional)
- 9.12. Hashing Chapter Summary Exercises
Chapter 10 Graphs¶
Chapter 11 Limits to Computing (optional)¶
- 11.1. Limits to Computing (optional) (WORK IN PROGRESS)
- 11.2. Reductions (optional) (WORK IN PROGRESS)
- 11.3. NP-Completeness (optional) (WORK IN PROGRESS)
- 11.4. Circuit Satisfiability (optional) (WORK IN PROGRESS)
- 11.5. Formula Satisfiability (optional) (WORK IN PROGRESS)
- 11.6. 3-CNF Satisfiability (optional) (WORK IN PROGRESS)
- 11.7. The Clique Problem (optional) (WORK IN PROGRESS)
- 11.8. The Independent Set Problem (optional) (WORK IN PROGRESS)
- 11.9. The Vertex Cover Problem (optional) (WORK IN PROGRESS)
- 11.10. The Hamiltonian Cycle Problem (optional) (WORK IN PROGRESS)
- 11.11. The Traveling Salesman Problem (optional) (WORK IN PROGRESS)
- 11.12. NP-Completeness Proofs (optional) (WORK IN PROGRESS)
- 11.13. Reduction of Circuit SAT to SAT (optional) (WORK IN PROGRESS)
- 11.14. Reduction of SAT to 3-SAT (optional) (WORK IN PROGRESS)
- 11.15. Reduction of 3-SAT to Clique (optional) (WORK IN PROGRESS)
- 11.16. Reduction of Clique to Independent Set (optional) (WORK IN PROGRESS)
- 11.17. Reduction of Independent Set to Vertex Cover (optional) (WORK IN PROGRESS)
- 11.18. Reduction of 3-SAT to Hamiltonian Cycle (optional) (WORK IN PROGRESS)
- 11.19. Reduction of Hamiltonian Cycle to Traveling Salesman (optional) (WORK IN PROGRESS)
- 11.20. Coping with NP-Complete Problems (optional) (WORK IN PROGRESS)
- 11.21. Unsolveable Problems (optional) (WORK IN PROGRESS)
- 11.22. Turing Machines (optional) (WORK IN PROGRESS)