Chapter 0 Preface¶
Chapter 1 Introduction¶
Chapter 2 Biographies¶
Chapter 3 Programming Tutorials¶
- 3.1. Command Line Basics
- 3.2. Parsing Command Line Parameters In Your Progam
- 3.3. Using Parameters in Eclipse
- 3.4. Using/Installing VT Development Tools
- 3.5. Common Debugging Methods
- 3.6. Debugging In Eclipse
- 3.7. Reading Input (from Files or Otherwise)
- 3.8. Random Access Files In Java
- 3.9. JUnit Testing And You
- 3.10. Writing JUnit Tests
- 3.11. Code Coverage In JUnit
Chapter 4 Design I¶
Chapter 5 Pointers¶
- 5.1. Pointers Chapter Introduction
- 5.2. Basic Pointers
- 5.2.1. What is a pointer?
- 5.2.2. Pointer Reference and Dereference
- 5.2.3. Pointer Assignment
- 5.2.4. Bad Pointers
- 5.2.5. Syntax
- 5.2.6. Example Pointer Code
- 5.2.7. Pointer Rules Summary
- 5.2.8. How Do Pointers Work In Java?
- 5.2.9. How Are Pointers Implemented In The Machine?
- 5.2.10. The Term 'Reference'
- 5.2.11. Why Are Bad Pointer Bugs So Common?
- 5.3. Local Memory
- 5.4. Reference Parameters
- 5.5. Heap Memory
- 5.6. Pointers Exercises
Chapter 6 Mathematical Background¶
Chapter 7 Searching I¶
Chapter 8 Algorithm Analysis¶
- 8.1. Chapter Introduction
- 8.2. Problems, Algorithms, and Programs
- 8.3. Comparing Algorithms
- 8.4. Best, Worst, and Average Cases
- 8.5. Faster Computer, or Faster Algorithm?
- 8.6. Asymptotic Analysis and Upper Bounds
- 8.7. Lower Bounds and \(\Theta\) Notation
- 8.8. Calculating Program Running Time
- 8.9. Analyzing Problems
- 8.10. Common Misunderstandings
- 8.11. Multiple Parameters
- 8.12. Space Bounds
- 8.13. Code Tuning and Empirical Analysis
- 8.14. Algorithm Analysis Summary Exercises
Chapter 9 Linear Structures¶
- 9.1. Chapter Introduction: Lists
- 9.2. The List ADT
- 9.3. Array-Based List Implementation
- 9.4. Linked Lists
- 9.5. Comparison of List Implementations
- 9.6. Doubly Linked Lists
- 9.7. List Element Implementations
- 9.8. Stacks
- 9.9. Linked Stacks
- 9.10. Freelists
- 9.11. Implementing Recursion
- 9.12. Queues
- 9.13. Linked Queues
- 9.14. Linear Structure Summary Exercises
Chapter 10 Recursion¶
- 10.1. Introduction
- 10.2. Writing a recursive function
- 10.3. Code Completion Practice Exercises
- 10.3.1. Programming Exercise: Largest
- 10.3.2. Programming Exercise: Multiply
- 10.3.3. Programming Exercise: GCD
- 10.3.4. Programming Exercise: Logs
- 10.3.5. Programming Exercise: Cummulative Sum
- 10.3.6. Programming Exercise: Array Sum
- 10.3.7. Programming Exercise: Digits Sum
- 10.3.8. Programming Exercise: Characters
- 10.4. Writing More Sophisticated Recursive Functions
- 10.5. Harder Code Completion Practice Exercises
- 10.6. Writing Practice Exercises
- 10.7. Tracing Recursive Code
- 10.8. Tracing Practice Exercises
- 10.9. Summary Exercises
Chapter 11 Design II¶
Chapter 12 Binary Trees¶
- 12.1. Binary Trees Chapter Introduction
- 12.2. Binary Trees
- 12.3. Binary Tree as a Recursive Data Structure
- 12.4. The Full Binary Tree Theorem
- 12.5. Binary Tree Traversals
- 12.6. Implementing Tree Traversals
- 12.7. Information Flow in Recursive Functions
- 12.8. Binary Tree Node Implementations
- 12.9. Composite-based Expression Tree
- 12.10. Binary Tree Space Requirements
- 12.11. Binary Search Trees
- 12.12. Dictionary Implementation Using a BST
- 12.13. Binary Tree Guided Information Flow
- 12.14. Multiple Binary Trees
- 12.15. A Hard Information Flow Problem
- 12.16. Array Implementation for Complete Binary Trees
- 12.17. Heaps and Priority Queues
- 12.18. Huffman Coding Trees
- 12.19. Trees versus Tries
- 12.20. Proof of Optimality for Huffman Coding
- 12.21. Binary Tree Chapter Summary
Chapter 13 Sorting¶
- 13.1. Chapter Introduction: Sorting
- 13.2. Sorting Terminology and Notation
- 13.3. Insertion Sort
- 13.4. Bubble Sort
- 13.5. Selection Sort
- 13.6. The Cost of Exchange Sorting
- 13.7. Optimizing Sort Algorithms with Code Tuning
- 13.8. Shellsort
- 13.9. Mergesort Concepts
- 13.10. Implementing Mergesort
- 13.11. Quicksort
- 13.12. Heapsort
- 13.13. Binsort
- 13.14. Radix Sort
- 13.15. An Empirical Comparison of Sorting Algorithms
- 13.16. Lower Bounds for Sorting
- 13.17. Sorting Summary Exercises
Chapter 14 File Processing¶
Chapter 15 Hashing¶
Chapter 16 Memory Management¶
Chapter 17 Indexing¶
Chapter 18 General Trees¶
Chapter 19 Graphs¶
Chapter 20 Grammars¶
Chapter 21 Functional Programming¶
- 21.1. Functional Programming - Part 1 (W 2/10/16)
- 21.2. Functional Programming - Part 2 (F 2/12/16)
- 21.3. Functional Programming - Part 3 (M 2/15/16)
- 21.4. Functional Programming - Part 4 (W 2/17/16)
- 21.5. Functional Programming - Part 5 (F 2/19/16)
- 21.6. Functional Programming - Part 6 (M 2/22/16)
- 21.7. Functional Programming - Part 7 (W 2/24/16)
- 21.8. Functional Programming - Part 8 (F 2/26/16)
- 21.9. Functional Programming - Part 9 (M 2/29/16)
Chapter 22 Lambda Calculus¶
Chapter 23 Interpreting the Functional Language SLang 1¶
Chapter 24 Interpreting the Imperative Language SLang 2¶
Chapter 25 Interpreting the Object-Oriented Language SLang 3¶
Chapter 26 Spatial Data Structures¶
Chapter 27 Searching¶
Chapter 28 Search Structures¶
Chapter 29 Advanced Analysis¶
Chapter 30 Algorithms¶
Chapter 31 Lower Bounds¶
Chapter 32 Miscellaneous¶
Chapter 33 Limits to Computing¶
- 33.1. Limits to Computing
- 33.2. Reductions
- 33.3. NP-Completeness
- 33.4. Circuit Satisfiability
- 33.5. Formula Satisfiability
- 33.6. 3-CNF Satisfiability
- 33.7. The Clique Problem
- 33.8. The Independent Set Problem
- 33.9. The Vertex Cover Problem
- 33.10. The Hamiltonian Cycle Problem
- 33.11. The Traveling Salesman Problem
- 33.12. NP-Completeness Proofs
- 33.13. Reduction of Circuit SAT to SAT
- 33.14. Reduction of SAT to 3-SAT
- 33.15. Reduction of 3-SAT to Clique
- 33.16. Reduction of Clique to Independent Set
- 33.17. Reduction of Independent Set to Vertex Cover
- 33.18. Reduction of 3-SAT to Hamiltonian Cycle
- 33.19. Reduction of Hamiltonian Cycle to Traveling Salesman
- 33.20. Coping with NP-Complete Problems
- 33.21. Unsolveable Problems