Appendix D — Appendix D: Glossary
Appendix D: Glossary
Quick-reference definitions for terms used in this book. Cross-references in italic.
Abstract class — a class with at least one pure virtual function. Cannot be instantiated directly.
Adjacency list — graph representation where each vertex has a list of its neighbors. O(V + E) space.
Adjacency matrix — graph representation as a V×V grid. O(V²) space.
Amortized analysis — averaging the cost of operations over a sequence; e.g., vector::push_back is amortized O(1).
AVL tree — self-balancing BST with the strict invariant that left/right subtree heights differ by at most 1.
Backtracking — DFS plus undoing state on return. Used for constraint satisfaction (8-queens, sudoku).
Balance factor — for an AVL node, height(left) - height(right).
Base case — the smallest version of a recursive problem, solved directly.
Big-O — upper bound on growth rate. f(n) = O(g(n)) if f ≤ c·g for large n.
Big-Omega (Ω) — lower bound on growth rate.
Big-Theta (Θ) — tight bound. Both O and Ω.
BFS — Breadth-First Search. Layer-by-layer traversal using a queue. O(V + E).
BST — Binary Search Tree. Left subtree all less, right all greater.
Class — a user-defined type with fields and methods.
Compile — translate source code to machine code (or intermediate code).
Const correctness — using const to mark read-only parameters and methods.
Copy constructor — T(const T&). Creates a new object from an existing one.
Copy assignment — T& operator=(const T&). Replaces the contents of an existing object.
DAG — Directed Acyclic Graph. Used for topological sort.
Deep copy — copies the contents a pointer points to, not just the pointer.
Destructor — ~T(). Runs when an object’s lifetime ends.
DFS — Depth-First Search. Recursive (or stack-based) traversal that goes deep before backtracking. O(V + E).
DFA — Deterministic Finite Automaton. Recognizes regular languages.
Dijkstra’s algorithm — shortest path in a graph with non-negative edge weights. O((V + E) log V).
DP — Dynamic Programming. Memoized recursion with overlapping subproblems and optimal substructure.
Edit distance — minimum number of insert/delete/replace edits to convert one string to another.
Friend — a function or class granted access to another class’s private members.
Hash function — maps a key to an array index. Good ones distribute uniformly.
Hash table — array-backed map using a hash function. Average O(1) lookup.
Heap — complete binary tree with the heap property (parent ≥ children for max-heap). Backed by an array.
Heapify — build a heap from an arbitrary array in O(n).
Inductive hypothesis — assumption that the statement holds for k; used to prove k+1.
Inheritance — declaring one class as derived from another, gaining its members.
In-order traversal — visit left, then node, then right. On a BST, produces sorted output.
Iterator — object that traverses a container, exposing * to read, ++ to advance, != to compare.
Leaf — a node with no children.
Linked list — chain of nodes, each pointing to the next.
Load factor — items / buckets in a hash table. Triggers rehash above ~0.7.
LCS — Longest Common Subsequence. 2D DP, O(mn).
LIS — Longest Increasing Subsequence. O(n²) DP or O(n log n) patience-sorting.
Master Theorem — closed-form for solving recurrences of the form T(n) = aT(n/b) + f(n).
Member initializer list — colon syntax for initializing fields in a constructor.
Memoization — top-down DP: recursive solution + cache.
Merge sort — divide-and-conquer sort. O(n log n), O(n) space, stable.
MST — Minimum Spanning Tree. Prim’s or Kruskal’s algorithm.
NFA — Nondeterministic Finite Automaton. Equivalent in power to DFA.
NP — class of problems whose solutions can be verified in polynomial time.
NP-complete — the “hardest” problems in NP. 3-SAT, vertex cover, etc.
Nullptr — typed null pointer (C++11). Prefer over NULL.
Open addressing — collision resolution by probing for the next empty slot.
Operator overloading — defining operators (+, ==, <<) for user types.
P — class of problems solvable in polynomial time.
Pointer — variable holding a memory address.
Polymorphism — runtime dispatch of methods based on object’s actual type.
Post-order traversal — visit left, right, then node. Used for tree deletion.
Pre-order traversal — visit node, then left, then right. Used for tree serialization.
Prefix code — code where no codeword is a prefix of another. Required for Huffman.
Priority queue — abstract data type with push and pop-min (or pop-max). Usually backed by a heap.
Pure virtual — virtual void f() = 0;. Forces derived classes to implement.
Quicksort — divide-and-conquer sort. Average O(n log n), worst O(n²), in place.
RAII — Resource Acquisition Is Initialization. Tying resource lifetime to object lifetime.
Rule of Three — if you write any of (destructor, copy ctor, copy assignment), write all three.
Rule of Five — Rule of Three + move ctor + move assignment (C++11).
Recurrence relation — equation expressing T(n) in terms of smaller values.
Recursion — function that calls itself.
Red-black tree — self-balancing BST using node colors. STL map/set.
Reference — alias for another variable. int& r = x;.
Rotation — restructuring operation for self-balancing trees (right, left, double).
Separate chaining — collision resolution by storing a list of items per bucket.
Shallow copy — copies pointers, not what they point to.
Sift-down — restore heap property by moving a value toward leaves.
Sift-up — restore heap property by moving a value toward the root.
Singleton — pattern guaranteeing exactly one instance of a class.
Stack frame — per-call activation record on the call stack.
Strategy pattern — replacing type-switches with polymorphism via injected behavior.
Strong induction — assume P(j) for all j ≤ k; prove P(k+1).
Subset construction — algorithm converting an NFA to an equivalent DFA.
Template — generic type/function parameterized by a type.
Topological sort — linear ordering of a DAG where every edge u → v has u before v.
Tree — connected undirected graph with no cycles, or rooted hierarchical structure.
Turing machine — abstract computation model with a tape, head, and transition function.
Union-find (DSU) — data structure tracking disjoint sets with find and unite. Used in Kruskal’s.
Vector — C++ dynamic array.
Virtual function — method that can be overridden in derived classes; dispatched via the vtable.
Vtable — per-class table of function pointers used for virtual dispatch.
Weak induction — assume P(k); prove P(k+1).