[395] Russel Schaffer and Robert Sedgewick. The analysis of heapsort. Journal of Algorithms, 15(1):76–100, 1993.
[396] Tao B. Schardl, I-Ting Angelina Lee, and Charles E. Leiserson. Brief announcement: Open Cilk. In Proceedings of the 30th Annual ACM Symposium on Parallelism in
Algorithms and Architectures, pages 351–353, 2018.
[397] A. Schönhage, M. Paterson, and N. Pippenger. Finding the median. Journal of Computer and System Sciences, 13(2):184–199, 1976.
[398] Alexander Schrijver. Theory of Linear and Integer Programming. John Wiley & Sons, 1986.
[399] Alexander Schrijver. Paths and flows—A historical survey. CWI Quarterly, 6(3):169–183, 1993.
[400] Alexander Schrijver. On the history of the shortest paths problem. Documenta Mathematica, 17(1):155–167, 2012.
[401] Robert Sedgewick. Implementing quicksort programs. Communications of the ACM, 21(10):847–857, 1978.
[402] Robert Sedgewick and Kevin Wayne. Algorithms. Addison-Wesley, fourth edition, 2011.
[403] Raimund Seidel. On the all-pairs-shortest-path problem in unweighted undirected graphs.
Journal of Computer and System Sciences, 51(3):400–403, 1995.
[404] Raimund Seidel and C. R. Aragon. Randomized search trees. Algorithmica, 16(4–5):464–
497, 1996.
[405] João Setubal and João Meidanis. Introduction to Computational Molecular Biology. PWS
Publishing Company, 1997.
[406] Clifford A. Shaffer. A Practical Introduction to Data Structures and Algorithm Analysis.
Prentice Hall, second edition, 2001.
[407] Jeffrey Shallit. Origins of the analysis of the Euclidean algorithm. Historia Mathematica, 21(4):401–419, 1994.
[408] M. Sharir. A strong-connectivity algorithm and its applications in data flow analysis.
Computers and Mathematics with Applications, 7(1):67–72, 1981.
[409] David B. Shmoys. Computing near-optimal solutions to combinatorial optimization
problems. In William Cook, László Lovász, and Paul Seymour, editors, Combinatorial
Optimization, volume 20 of DIMACS Series in Discrete Mathematics and Theoretical Computer Science. American Mathematical Society, 1995.
[410] Avi Shoshan and Uri Zwick. All pairs shortest paths in undirected graphs with integer weights. In Proceedings of the 40th Annual Symposium on Foundations of Computer
Science, pages 605–614, 1999.
[411] Victor Shoup. A Computational Introduction to Number Theory and Algebra. Cambridge University Press, second edition, 2009.
[412] Julian Shun. Shared-Memory Parallelism Can Be Simple, Fast, and Scalable. Association for Computing Machinery and Morgan & Claypool, 2017.
[413] Michael Sipser. Introduction to the Theory of Computation. Cengage Learning, third edition, 2013.
[414] Steven S. Skiena. The Algorithm Design Manual. Springer, second edition, corrected printing, 2012.
[415] Daniel D. Sleator and Robert E. Tarjan. A data structure for dynamic trees. Journal of Computer and System Sciences, 26(3):362–391, 1983.
[416] Daniel D. Sleator and Robert E. Tarjan. Amortized efficiency of list update rules. In Proceedings of the Sixteenth Annual ACM Symposium on Theory of Computing, pages 488–492, 1984.
[417] Daniel D. Sleator and Robert E. Tarjan. Amortized efficiency of list update and paging rules. Communications of the ACM, 28(2):202–208, 1985.
[418] Daniel D. Sleator and Robert E. Tarjan. Self-adjusting binary search trees. Journal of the ACM, 32(3):652–686, 1985.
[419] Michael Soltys-Kulinicz. An Introduction to the Analysis of Algorithms. World Scientific, third edition, 2018.
[420] Joel Spencer. Ten Lectures on the Probabilistic Method, volume 64 of CBMS-NSF
Regional Conference Series in Applied Mathematics. Society for Industrial and Applied Mathematics, 1993.
[421] Daniel A. Spielman and Shang-Hua Teng. Smoothed analysis of algorithms: Why the
simplex algorithm usually takes polynomial time. Journal of the ACM, 51(3):385–463, 2004.
[422] Gilbert Strang. Introduction to Applied Mathematics. Wellesley-Cambridge Press, 1986.
[423] Gilbert Strang. Linear Algebra and Its Applications. Thomson Brooks/Cole, fourth edition, 2006.
[424] Volker Strassen. Gaussian elimination is not optimal. Numerische Mathematik, 14(3):354–
356, 1969.
[425] T. G. Szymanski. A special case of the maximal common subsequence problem. Technical Report TR-170, Computer Science Laboratory, Princeton University, 1975.
[426] Robert E. Tarjan. Depth first search and linear graph algorithms. SIAM Journal on Computing, 1(2):146–160, 1972.
[427] Robert E. Tarjan. Efficiency of a good but not linear set union algorithm. Journal of the ACM, 22(2):215–225, 1975.
[428] Robert E. Tarjan. A class of algorithms which require nonlinear time to maintain disjoint sets. Journal of Computer and System Sciences, 18(2):110–127, 1979.
[429] Robert E. Tarjan. Data Structures and Network Algorithms. Society for Industrial and Applied Mathematics, 1983.
[430] Robert E. Tarjan. Amortized computational complexity. SIAM Journal on Algebraic and Discrete Methods, 6(2):306–318, 1985.
[431] Robert E. Tarjan. Class notes: Disjoint set union. COS 423, Princeton University, 1999.
Available at https://www.cs.princeton.edu/courses/archive/spr00/cs423/handout3.pdf.
[432] Robert E. Tarjan and Jan van Leeuwen. Worst-case analysis of set union algorithms.
Journal of the ACM, 31(2):245–281, 1984.
[433] George B. Thomas, Jr., Maurice D. Weir, Joel Hass, and Frank R. Giordano. Thomas’
Calculus. Addison-Wesley, eleventh edition, 2005.
[434] Mikkel Thorup. Faster deterministic sorting and priority queues in linear space. In Proceedings of the 9th ACM-SIAM Symposium on Discrete Algorithms, pages 550–555, 1998.
[435] Mikkel Thorup. Undirected single-source shortest paths with positive integer weights in linear time. Journal of the ACM, 46(3):362–394, 1999.
[436] Mikkel Thorup. On RAM priority queues. SIAM Journal on Computing, 30(1):86–109, 2000.
[437] Mikkel Thorup. High speed hashing for integers and strings.
http://arxiv.org/abs/1504.06804, 2015.
[438] Mikkel Thorup. Linear probing with 5-independent hashing.
http://arxiv.org/abs/1509.04549, 2015.
[439] Richard Tolimieri, Myoung An, and Chao Lu. Mathematics of Multidimensional Fourier Transform Algorithms. Springer, second edition, 1997.
[440] P. van Emde Boas. Preserving order in a forest in less than logarithmic time and linear space. Information Processing Letters, 6(3):80–82, 1977.
[441] P. van Emde Boas, R. Kaas, and E. Zijlstra. Design and implementation of an efficient priority queue. Mathematical Systems Theory, 10(1):99–127, 1976.
[442] Charles Van Loan. Computational Frameworks for the Fast Fourier Transform. Society for Industrial and Applied Mathematics, 1992.
[443] Benjamin Van Roy. A short proof of optimality for the MIN cache replacement
algorithm. Information Processing Letters, 102(2–3):72–73, 2007.
[444] Robert J. Vanderbei. Linear Programming: Foundations and Extensions. Kluwer Academic Publishers, 1996.
[445] Virginia Vassilevska Williams. Multiplying matrices faster than Coppersmith-Winograd.
In Proceedings of the 44th Annual ACM Symposium on Theory of Computing, pages 887–
898, 2012.
[446] Vijay V. Vazirani. Approximation Algorithms. Springer, 2001.
[447] Rakesh M. Verma. General techniques for analyzing recursive algorithms with
applications. SIAM Journal on Computing, 26(2):568–581, 1997.
[448] Berthold Vöcking, Helmut Alt, Martin Dietzfelbinger, Rüdiger Reischuk, Christian Scheideler, Heribert Vollmer, and Dorothea Wager, editors. Algorithms Unplugged.
Springer, 2011.
[449] Antony F. Ware. Fast approximate Fourier transforms for irregularly spaced data. SIAM
Review, 40(4):838–856, 1998.
[450] Stephen Warshall. A theorem on boolean matrices. Journal of the ACM, 9(1):11–12, 1962.
[451] Mark Allen Weiss. Data Structures and Problem Solving Using C++. Addison-Wesley, second edition, 2000.
[452] Mark Allen Weiss. Data Structures and Problem Solving Using Java. Addison-Wesley, third edition, 2006.
[453] Mark Allen Weiss. Data Structures and Algorithm Analysis in C++. Addison-Wesley, third edition, 2007.
[454] Mark Allen Weiss. Data Structures and Algorithm Analysis in Java. Addison-Wesley, second edition, 2007.
[455] Herbert S. Wilf. Algorithms and Complexity. A K Peters, second edition, 2002.
[456] J. W. J. Williams. Algorithm 232 (HEAPSORT). Communications of the ACM, 7(6):347–
348, 1964.
[457] Ryan Williams. Faster all-pairs shortest paths via circuit complexity. SIAM Journal on Computing, 47(5):1965–1985, 2018.
[458] David P. Williamson. Network Flow Algorithms. Cambridge University Press, 2019.
[459] David P. Williamson and David B. Shmoys. The Design of Approximation Algorithms.
Cambridge University Press, 2011.
[460] Shmuel Winograd. On the algebraic complexity of functions. In Actes du Congrès International des Mathématiciens, volume 3, pages 283–288, 1970.
[461] Yifan Xu, I-Ting Angelina Lee, and Kunal Agrawal. Efficient parallel determinacy race detection for two-dimensional dags. In Proceedings of the 23rd ACM SIGPLAN
Symposium on Principles and Practice of Parallel Programming (PPoPP), pages 368–380, 2018.
[462] Chee Yap. A real elementary approach to the master recurrence and generalizations. In M.
Ogihara and J. Tarui, editors, Theory and Applications of Models of Computation. TAMC
2011, volume 6648 of Lecture Notes in Computer Science, pages 14–26. Springer, 2011.
[463] Yinyu Ye. Interior Point Algorithms: Theory and Analysis. John Wiley & Sons, 1997.
[464] Neal E. Young. Online paging and caching. In Encyclopedia of Algorithms, pages 1457–
1461. Springer, 2016.
[465] Raphael Yuster and Uri Zwick. Answering distance queries in directed graphs using fast matrix multiplication. In Proceedings of the 46th Annual Symposium on Foundations of Computer Science, pages 389–396, 2005.
[466] Jisheng Zhao and Vivek Sarkar. The design and implementation of the Habanero-Java parallel programming language. In Symposium on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA), pages 185–186, 2011.
[467] Uri Zwick. All pairs shortest paths using bridging sets and rectangular matrix
multiplication. Journal of the ACM, 49(3):289–317, 2002.
[468] Daniel Zwillinger, editor. CRC Standard Mathematical Tables and Formulae. Chapman & Hall/CRC Press, 31st edition, 2003.



This index uses the following conventions. Numbers are alphabetized as
if spelled out; for example, “2-3-4 tree” is indexed as if it were “two-
three-four tree.” When an entry refers to a place other than the main
text, the page number is followed by a tag: ex. for exercise, pr. for
problem, fig. for figure, and n. for footnote. A tagged page number often
indicates the first page of an exercise or problem, which is not
necessarily the page on which the reference actually appears.
α( n), 533
α-strongly convex function, 1041
β-smooth function, 1041
δ
(shortest-path distance), 558
(shortest-path weight), 604
ϕ(golden ratio), 69
(conjugate of the golden ratio), 69
ϕ( n) (Euler’s phi function), 920
π (predecessor in a breadth-first tree), 555
(predecessor in a shortest-paths tree), 608
ρ( n)-approximation algorithm, 1104, 1120
o-notation, 60
O′-notation, 73 pr.
-notation, 73 pr.
ω-notation, 61
Ω-notation, 51, 54 fig., 55–56
-notation, 73 pr.
-notation, 73 pr.
Θ-notation, 33, 51, 54 fig., 56

-notation, 73 pr.
{ } (set), 1153
∈ (set member), 1153
∉ (not a set member), 1153
∅
(empty language), 1052
(empty set), 1153
⊆ (subset), 1154
⊂ (proper subset), 1154
∩ (set intersection), 1154
∪ (set union), 1154
− (set difference), 1154
| |(flow value), 672
(length of a string), 959
(set cardinality), 1156
× (Cartesian product), 1157
〈 〉(sequence), 1162
(standard encoding), 1052
[ a, b] (closed interval), 1157
( a, b) (open interval), 1157
[ a, b) or ( a, b] (half-open interval), 1157
(choose), 1180
∥ ∥ (euclidean norm), 1219
⌈ ⌉ (ceiling), 63
⌊ ⌊ (floor), 63
∂ (partial derivative), 1023
∑ (sum), 1140
∏ (product), 1144
→ (adjacency relation), 1165
↝ (reachability relation), 1165
∥ (concatenation), 291
¬ (NOT), 1065
⋘ (left shift), 305
⋙ (logical right shift), 285
⊕
(group operator), 917
(semiring operator), 651 n.
(symmetric difference), 706
⊗
(convolution operator), 880
(semiring operator), 651 n.
* (closure operator), 1052
| (divides relation), 904
∤ (does-not-divide relation), 904
= (mod n) (equivalent, modulo n), 64
≠ (mod n) (not equivalent, modulo n), 64
[ a] n (equivalence class modulo n), 905
+ n (addition modulo n), 917
· n (multiplication modulo n), 917
(Legendre symbol), 954 pr.
⊏ (prefix relation), 959
⊐ (suffix relation), 959
// (comment symbol), 22
≫ (much-greater-than relation), 533
≪ (much-less-than relation), 761
≤P (polynomial-time reducibility relation), 1062, 1071 ex.
AA-tree, 358
abelian group, 917
absent child, 1173
absolutely convergent series, 1140
absorption laws for sets, 1155
abstract problem, 1048
abuse of asymptotic notation, 55, 59–60
acceptable pair of integers, 950
acceptance
by an algorithm, 1053
by a finite automaton, 968
accepting state, 967
for binary counters, 455
for dynamic tables, 463
Ackermann’s function, 544
activity-selection problem, 418–425
acyclic graph, 1166
ADD-BINARY-INTEGERS, 25 ex.
add instruction, 26
addition
of matrices, 1217
modulo n (+ n), 917
of polynomials, 877
additive group modulo n, 918
addressing, open, see open-address hash table
ADD-SUBARRAY, 783 pr.
adjacency-list representation, 550–551
replaced by a hash table, 553 ex.
adjacency-matrix representation, 551–552
adjacency relation (→), 1165
adjacent vertices, 1165
Advanced Encryption Standard (AES), 291
adversary, 204, 286, 805, 807, 941
AES, 291
for breadth-first search, 558
for depth-first search, 566–567
for Dijkstra’s algorithm, 623–624
for disjoint-set data structures, 525–526, 527 ex.
for the Knuth-Morris-Pratt algorithm, 977–978
for Prim’s algorithm, 597
for rod cutting, 370
for shortest paths in a dag, 617
aggregate flow, 864
Akra-Bazzi recurrence, 115–119
solving by Akra-Bazzi method, 117–118
compare-exchange, 222 pr.
correctness of, 6
decision, 1053
deterministic, 135
lookahead, 815 ex.
nondeterministic, 765
oblivious, 222 pr.
offline, 791
online, see online algorithm
origin of word, 48
parallel, see parallel algorithm
push-relabel, 702
randomized, see randomized algorithm
recursive, 34
running time of, 29
streaming, 818
as a technology, 13
verification, 1058
ALLOCATE-NODE, 506
all-pairs shortest paths, 605, 646–669
in dynamic graphs, 669
in ϵ-dense graphs, 668 pr.
Floyd-Warshall algorithm for, 655–659
Johnson’s algorithm for, 662–667
by matrix multiplication, 648–655, 668–669
α-balanced, 472 pr.
α( n), 533
α-strongly convex function, 1041
alternating path, 705
by aggregate analysis, 370, 449–453
for breadth-first search, 558
for depth-first search, 566–567
for Dijkstra’s algorithm, 623–624
for disjoint-set data structures, 525–526, 527 ex., 531 ex., 534–540, 541 ex.
for the Knuth-Morris-Pratt algorithm, 977–978
for making binary search dynamic, 472 pr.
for Prim’s algorithm, 597
for restructuring red-black trees, 473 pr.
for shortest paths in a dag, 617
for stacks on secondary storage, 517 pr.
for weight-balanced trees, 472 pr.
amortized cost
in the accounting method, 453
in aggregate analysis, 449
in the potential method, 456
amortized progress, 1028
see also amortized analysis, competitive analysis, probabilistic analysis
ancestor, 1172
lowest common, 543 pr.
AND gate, 1065
and, in pseudocode, 24
antisymmetric relation, 1160
approximation
of summation by integrals, 1150
approximation algorithm, 1103–1136
for bin packing, 1131 pr.
for MAX-CNF satisfiability, 1124 ex.
for maximum clique, 1131 pr.
for maximum matching, 1132 pr.
for maximum spanning tree, 1134 pr.
for maximum-weight cut, 1124 ex.
for MAX-3-CNF satisfiability, 1120–1121
for parallel machine scheduling, 1133 pr.
randomized, 1120
for traveling-salesperson problem, 1109–1115
for vertex cover, 1106–1109, 1121–1124
for weighted set cover, 1132 pr.
for 0-1 knapsack problem, 1134 pr.
approximation error, 842
approximation ratio, 1104, 1120
approximation scheme, 1105
APPROX-MIN-WEIGHT-VC, 1123
APPROX-SUBSET-SUM, 1128
APPROX-TSP-TOUR, 1111
APPROX-VERTEX-COVER, 1107
arbitrage, 641 pr.
arc, see edge
argument of a function, 1161–1162
arithmetic instructions, 26
arithmetic, modular, 64, 916–923
arithmetic series, 1141
arithmetic with infinities, 611
arm in a disk drive, 498
array
indexing into, 22–23, 26 n., 252
inversion in, 47 pr.
Monge, 123 pr.
passing as a parameter, 24
articulation point, 582 pr.
assignment
associative laws for sets, 1155
associative operation, 917
asymptotically larger, 62
asymptotically nonnegative, 54
asymptotically positive, 54
asymptotically smaller, 62
asymptotically tight bound, 56
asymptotic lower bound, 55
asymptotic notation, 53–63, 72 pr.
and graph algorithms, 548
and linearity of summations, 1141
asymptotic running time, 49
asymptotic upper bound, 54
attribute
in clustering, 1006
in a graph, 552
of an object, 23
augmentation of a flow, 678
augmented primal linear program, 870
augmenting data structures, 480–496
widest, 700 pr.
authentication, 309 pr., 938–939, 942
auxiliary hash function, 295
average-case running time, 32, 128
back substitution, 823
balanced search tree
AA-trees, 358
k-neighbor trees, 358
left-leaning red-black binary search trees, 358
scapegoat trees, 358
treaps, 358
weight-balanced trees, 358, 472 pr.
balls and bins, 143–144, 1212 pr.
base- a pseudoprime, 944
base case
of a divide-and-conquer algorithm, 34, 76
base, in DNA, 393
basis function, 841
Bayes’s theorem, 1189
BELLMAN-FORD, 612
Bellman-Ford algorithm, 612–616
for all-pairs shortest paths, 647
in Johnson’s algorithm, 664–666
and objective functions, 632 ex.
to solve systems of difference constraints, 630–631
Yen’s improvement to, 640 pr.
Bernoulli trial, 1196
in bucket sort analysis, 217
in finding prime numbers, 943
in randomized selection analysis, 232
best-case running time, 34 ex.
β-smooth function, 1041
BFS, 556
see also breadth-first search
BIASED-RANDOM, 129 ex.
biconnected component, 582 pr.
big-oh notation ( O), 50, 54–55
big-omega notation (Ω), 51, 54 fig., 55–56
bijective function, 1162
binary character code, 431
binary counter
analyzed by accounting method, 455
analyzed by aggregate analysis, 451–453
analyzed by potential method, 458–459
binary entropy function, 1182
binary gcd algorithm, 953 pr.
binary heap, see heap
binary logarithm (lg), 66
binary reflected Gray code, 471 pr.
binary relation, 1158
binary search, 44 ex.
with fast insertion, 472 pr.
in insertion sort, 45 ex.
in searching B-trees, 512 ex.
AA-trees, 358
deletion from, 322–325, 326 ex.
with equal keys, 327 pr.
k-neighbor trees, 358
left-leaning red-black binary search trees, 358
persistent, 355 pr.
randomly built, 328 pr.
right-converting of, 337 ex.
scapegoat trees, 358
for sorting, 326 ex.
splay trees, 359
weight-balanced trees, 358
see also red-black tree
binary-search-tree property, 313–314
vs. min-heap property, 315 ex.
binary tree, 1173
number of different ones, 329 pr.
representation of, 265
see also binary search tree
binomial coefficient, 1181–1182
binomial distribution, 1198–1201
and balls and bins, 143
in bucket sort analysis, 217
maximum value of, 1202 ex.
binomial expansion, 1181
binomial theorem, 1181
bin packing, 1131 pr.
bipartite graph, 1167
complete, 716
corresponding flow network of, 694
bipartite matching, 693–697, 704–743
bisection of a tree, 1177 pr.
bitonic euclidean traveling-salesperson problem, 407 pr.
bitonic sequence, 644 pr.
bitonic tour, 407 pr.
bit operation, 904
in Euclid’s algorithm, 954 pr.
bit-reversal permutation, 897
bit vector, 274 ex.
black-height, 332
block
on a disk, 499, 512 ex., 517 pr.
blocking flow, 702
blocking pair, 716
block representation of matrices, 254
block structure in pseudocode, 21–22
body, 1032
Boole’s inequality, 1190 ex.
boolean combinational circuit, 1065
boolean combinational element, 1065
boolean connective, 1073
boolean data type, 26
boolean formula, 1043, 1060 ex., 1073–1074
boolean function, 1182 ex.
boolean operators, 24
Borůvka’s algorithm, 603
bottleneck spanning tree, 601 pr.
bottleneck traveling-salesperson problem, 1115 ex.
bottoming out, 76
bottom of a stack, 254
BOTTOM-UP-CUT-ROD, 369
bottom-up method, for dynamic programming, 368
bound
asymptotically tight, 56
asymptotic lower, 55
asymptotic upper, 54
on binomial coefficients, 1181–1182
on binomial distributions, 1201
polylogarithmic, 67
on the tails of a binomial distribution, 1203–1210
see also lower bounds
bounding a summation, 1145–1152
box, nesting, 640 pr.
B+-tree, 501
branch instructions, 26
breadth-first forest, 728
in the Hopcroft-Karp algorithm, 711
in the Hungarian algorithm, 727–728
and shortest paths, 558–561, 605
similarity to Dijkstra’s algorithm, 624, 625 ex.
bridge, 582 pr.
B*-tree, 502 n.
compared with red-black trees, 497, 503
full node in, 502
minimum degree of, 502
2-3-4 trees, 502
B-TREE-CREATE, 506
B-TREE-DELETE, 513
B-TREE-INSERT, 508
B-TREE-INSERT-NONFULL, 511
B-TREE-SPLIT-CHILD, 507
B-TREE-SPLIT-ROOT, 509
BUBBLESORT, 46 pr.
bucket, 215
BUCKET-SORT, 216
BUILD-MAX-HEAP, 167
BUILD-MAX-HEAP′, 179 pr.
BUILD-MIN-HEAP, 169
Burrows-Wheeler transform (BWT), 1000 pr.
butterfly operation, 894
BWT (Burrows-Wheeler transform), 1000 pr.
by, in pseudocode, 22
cache line, see cache block
cache obliviousness, 519
caching
call
in a parallel computation, 753
by value, 23
cancellation lemma, 886
cancellation of flow, 679
capacity
of a cut, 682
of an edge, 671
of a vertex, 676 ex.
capacity constraint, 672
cardinality of a set (| |), 1156
Carmichael number, 945, 953 ex.
Cartesian product (×), 1157
Cartesian sum, 885 ex.
c-competitive, 793
ceiling function (⌈ ⌉), 63
ceiling instruction, 26
center of a cluster, 1008
centralized scheduler, 759
centroid of a cluster, 1009
certain event, 1185
certificate
in a cryptosystem, 942
for verification algorithms, 1058
CHAINED-HASH-DELETE, 278
CHAINED-HASH-INSERT, 278
CHAINED-HASH-SEARCH, 278
changing variables, to solve a recurrence, 120 pr.
character code, 431
character data type, 26
chess-playing program, 768–769
child
in a binary tree, 1173
in a parallel computation, 753
in a rooted tree, 1172
Chinese remainder theorem, 928–931
chirp transform, 893 ex.
choose
, 1180
chord, 486 ex.
ciphertext, 938
circuit
boolean combinational, 1065
depth of, 894
for fast Fourier transform, 894–897
CIRCUIT-SAT, 1067
circuit satisfiability, 1064–1071
circular, doubly linked list with a sentinel, 262
circular linked list, 259
class
complexity, 1054
equivalence, 1159
in breadth-first search, 581 pr.
in depth-first search, 569–570, 571 ex.
clean area, 222 pr.
climate change, 845
clique, 1081
CLIQUE, 1081
clique problem
approximation algorithm for, 1131 pr.
closed convex body, 1032
closed interval ([ a, b]), 1157
closed semiring, 669
closest-point heuristic, 1115 ex.
closure
group property, 917
of a language (*), 1052
transitive, see transitive closure
cluster, 1008
for parallel computing, 748
Lloyd’s procedure for, 1011–1013
primary, 303
CNF (conjunctive normal form), 1043, 1076
CNF satisfiability, 1124 ex.
coarsening leaves of recursion
in merge sort, 45 pr.
in quicksort, 198 ex.
when recursively spawning, 764
codeword, 432
codomain, 1161
coefficient
binomial, 1181
coefficient representation, 879
and fast multiplication, 882–884
cofactor, 1221
coin changing, 446 pr.
collection of sets, 1156
collision, 275
resolution by chaining, 277–281
resolution by open addressing, 293–301
collision-resistant hash function, 941
coloring, 425 ex., 1100 pr., 1176 pr.
color, of a red-black-tree node, 331
column-major order, 222 pr., 253
column rank, 1220
columnsort, 222 pr.
column vector, 1215
combination, 1180
combinational circuit, 1065
combinational element, 1065
combine step, in divide-and-conquer, 34, 76
comment, in pseudocode (//), 22
commodity, 864
common divisor, 906
greatest, see greatest common divisor
common multiple, 916 ex.
common subexpression, 894
common subsequence, 394
commutative laws for sets, 1154
commutative operation, 917
compact list, 269 pr.
COMPACT-LIST-SEARCH, 269 pr.
COMPACT-LIST-SEARCH′, 270 pr.
COMPARE-EXCHANGE, 222 pr.
COMPARE-EXCHANGE-INSERTION-SORT, 223 pr.
compare-exchange operation, 222 pr.
comparison sort, 205
and binary search trees, 315 ex.
randomized, 219 pr.
and selection, 241
compatible activities, 418
compatible matrices, 1218
competitive analysis, 792
competitive ratio, 793
expected, 808
unbounded, 804
complement
of an event, 1186
of a graph, 1085
of a language, 1052
of a set, 1155
complementary slackness, 873 pr.
complete graph, 1167
bipartite, 716
complete k-ary tree, 1174
see also heap
completeness of a language, 1072 ex.
complete step, 759
completion time, 446 pr., 816 pr., 1133 pr.
COMPLETION-TIME-SCHEDULE, 817 pr.
complexity class, 1054
co-NP, 1059
complexity measure, 1054
complex numbers
inverting matrices of, 838 ex.
multiplication of, 90 ex.
complex root of unity, 885
component
biconnected, 582 pr.
connected, 1166
strongly connected, 1166
component graph, 576
composite number, 905
witness to, 946
composition
of logarithms, 66
of parallel traces, 762 fig.
compression
of images, 412 pr.
compulsory miss, 440
computational depth, see span
computation dag, 754 n.
COMPUTE-LCP, 993
COMPUTE-PREFIX-FUNCTION, 978
COMPUTE-SUFFIX-ARRAY, 988
COMPUTE-TRANSITION-FUNCTION, 974
concatenation
of languages, 1052
operator (∥), 291
of strings, 959
concrete problem, 1049
conditional branch instruction, 26
conditional independence, 1190 ex.
conditional probability, 1187, 1189
configuration, 1068
conjugate of the golden ratio ( ), 69, 70 ex.
conjugate transpose, 838 ex.
conjunctive normal form, 1043, 1076
connected component, 1166
identified using depth-first search, 572 ex.
identified using disjoint-set data structures, 521–523
CONNECTED-COMPONENTS, 522
connected graph, 1166
connective, 1073
co-NP (complexity class), 1059
conquer step, in divide-and-conquer, 34, 76
conservation of flow, 672
consistency
of literals, 1082
sequential, 756
constrained gradient descent, 1032–1034
constraint
difference, 627
equality, 632 ex.
nonnegativity, 854
contain, in a path, 1165
continuous master theorem, 112
continuous uniform probability distribution, 1187
contraction
of an undirected graph by an edge, 1168
contraction algorithm, 701 pr.
control instructions, 26
convergence property, 611, 634–635
convergent series, 1140
converting binary to decimal, 910 ex.
convex body, 1032
convex function, 1025–1027, 1194
α-strongly convex, 1041
convex set, 675 ex.
convolution (⊗), 880
convolution theorem, 892
copy instruction, 26
correctness of an algorithm, 6
corresponding flow network for bipartite matching, 694
countably infinite set, 1156
counter, see binary counter
probabilistic, 153 pr.
in computing suffix arrays, 992
in radix sort, 213
COUNTING-SORT, 209
coupon collector’s problem, 144
path, 698 pr.
by a subfamily, 1116
credit, 453
critical edge, 690
critical path
in a dag, 619
of a PERT chart, 617
of a task-parallel trace, 757
cross edge, 569
cryptographic hash function, 291
cubic spline, 847 pr.
currency exchange, 641 pr.
cutcapacity of, 682
global, 701 pr.
minimum, 682
net flow across, 682
of an undirected graph, 587
weight of, 1124 ex.
CUT-ROD, 366
hamiltonian, 1043, 1056, 1085–1090
minimum mean-weight, 642 pr.
negative-weight, see negative-weight cycle
cycle cover, 741 pr.
cyclic group, 932
dag, see directed acyclic graph
DAG-SHORTEST-PATHS, 617
d-ary heap, 179 pr.
in shortest-paths algorithms, 668 pr.
data-movement instructions, 26
data-parallel model, 789
data structure, 9, 249–359, 477–545
AA-trees, 358
bit vectors, 274 ex.
deques, 258 ex.
dictionaries, 249
direct-address tables, 273–275
for dynamic graphs, 479
dynamic trees, 478
exponential search trees, 226, 478
Fibonacci heaps, 478
k-neighbor trees, 358
left-leaning red-black binary search trees, 358
order-statistic trees, 480–486
potential of, 456
radix trees, 327 pr.
scapegoat trees, 358
skip lists, 359
treaps, 358
van Emde Boas trees, 478
weight-balanced trees, 358
data type, 26
decision by an algorithm, 1053
and optimization problems, 1045
decision tree, 206–207, 219 pr.
decision variable, 851
DECREASE-KEY, 173
decrementing, 22
decryption, 936
default vertex labeling, 724
degree
minimum, of a B-tree, 502
of a node, 1173
of a vertex, 1165
degree-bound, 877
DELETE, 250
DELETE-LARGER-HALF, 460 ex.
deletion
from binary search trees, 322–325, 326 ex.
from chained hash tables, 278
from direct-address tables, 274
from hash tables with linear probing, 302–303
from heaps, 178 ex.
from interval trees, 491
from linked lists, 261
from open-address hash tables, 294–295
from order-statistic trees, 484–485
from queues, 256
from stacks, 254
DeMorgan’s laws
for propositional logic, 1078
dense graph, 549
ϵ-dense, 668 pr.
dense matrix, 81
density
of prime numbers, 943
of a rod, 372 ex.
dependence
and indicator random variables, 131
linear, 1220
see also independence
depth
average, of a node in a randomly built binary search tree, 328 pr.
of a circuit, 894
of a node in a rooted tree, 1173
of quicksort recursion tree, 191 ex.
of a stack, 202 pr.
depth-determination problem, 542 pr.
depth-first forest, 564
in finding articulation points, bridges, and biconnected components, 582 pr.
in finding strongly connected components, 576–581
in the Hopcroft-Karp algorithm, 711
in topological sorting, 573–576
depth-first tree, 564
deque, 258 ex.
DEQUEUE, 257
derivative of a series, 1142
descendant, 1172
destination vertex, 605
det, 1221
determinant, 1221
deterministic algorithm, 135
parallel, 765
DETERMINISTIC-SEARCH, 154 pr.
DFS, 565
see also depth-first search
DFS-VISIT, 565
DFT, 888
diagonal matrix, 1215
diameter
of a network, 646
of a tree, 563 ex.
dictionary, 249
difference
of sets (−), 1154
symmetric, 706
difference constraints, 626–632
differentiation of a series, 1142
digital signature, 938
digraph, see directed graph
DIJKSTRA, 620
for all-pairs shortest paths, 646, 666
with edge weights in a range, 626 ex.
implemented with a Fibonacci heap, 623–624
implemented with a min-heap, 623
with integer edge weights, 625–626 ex.
in Johnson’s algorithm, 664
similarity to breadth-first search, 624, 625 ex.
similarity to Prim’s algorithm, 624
d-independent family of hash functions, 288
DIRECT-ADDRESS-DELETE, 274
DIRECT-ADDRESS-INSERT, 274
DIRECT-ADDRESS-SEARCH, 274
directed acyclic graph (dag), 1167
and back edges, 573
and component graphs, 578
and hamiltonian paths, 1060 ex.
longest simple path in, 407 pr.
for representing a parallel computation, 754
single-source shortest-paths algorithm for, 616–619
directed equality subgraph, 727
directed graph, 1164
all-pairs shortest paths in, 646–669
constraint graph, 628
hamiltonian cycle of, 1043
incidence matrix of, 553 ex.
and longest paths, 1042
path cover of, 698 pr.
semiconnected, 581 ex.
shortest path in, 604
single-source shortest paths in, 604–645
singly connected, 572 ex.
square of, 553 ex.
transitive closure of, 659
transpose of, 553 ex.
universal sink in, 553 ex.
see also directed acyclic graph, graph, network
directed version of an undirected graph, 1166
dirty area, 222 pr.
discovery time, 565
discrete Fourier transform, 888
discrete logarithm, 933
discrete logarithm theorem, 933
discrete probability distribution, 1186
discrete random variable, 1191–1196
disjoint-set data structure, 520–545
in connected components, 521–523
in depth determination, 542 pr.
disjoint-set-forest implementation of, 527–531
in Kruskal’s algorithm, 593
linear-time special case of, 545
linked-list implementation of, 523–527
lower bound for, 545
in offline lowest common ancestors, 543 pr.
in offline minimum, 541 pr.
rank properties of, 533–534, 540 ex.
see also disjoint-set data structure
disjoint sets, 1156
disjunctive normal form, 1078
DISK-READ, 500
DISK-WRITE, 500
dissimilarity, 1006
distance
edit, 409 pr.
Manhattan, 244 pr.
of a shortest path ( δ), 558
distributed memory, 748
distribution
binomial, see binomial distribution
continuous uniform, 1187
discrete, 1186
geometric, see geometric distribution
of prime numbers, 943
uniform, 1186
distributive laws for sets, 1155
divergent series, 1140
divide-and-conquer method, 34, 76
for binary search, 44 ex.
for conversion of binary to decimal, 910 ex.
for fast Fourier transform, 888–891, 895
for matrix multiplication, 81–90, 770–775, 783 pr.
for merge sort, 34–44, 775–782
for multiplication, 899 pr.
relation to dynamic programming, 362
solving recurrences for, 90–119
for Strassen’s algorithm, 85–90, 773–774
divide instruction, 26
divides relation (|), 904
divide step, in divide-and-conquer, 34, 76
division theorem, 905
divisor, 904
common, 906
see also greatest common divisor
DNF (disjunctive normal form), 1078
does-not-divide relation (∤), 904
Dog River, 717
dolphins, allowing to vote, 850
domain, 1161
double hashing, 295–297, 301 ex.
doubly linked list, 258–259, 264 ex.
circular, with a sentinel, 262
downto, in pseudocode, 22
d-regular graph, 716 ex., 740 pr.
driving function, 101
duality, 734, 866–873, 874 pr.
dual linear program, 866
dummy key, 400
dynamic graph, 523
all-pairs shortest paths algorithms for, 669
data structures for, 479
minimum-spanning-tree algorithm for, 599 ex.
transitive closure of, 667 pr., 669
dynamic graph algorithm, 817
dynamic multiset, 460 ex.
dynamic order statistics, 480–486
dynamic-programming method, 362–416
for activity selection, 424 ex.
for all-pairs shortest paths, 648–659
for bitonic euclidean traveling-salesperson problem, 407 pr.
bottom-up, 368
for breaking a string, 412 pr.
compared with greedy method, 384–385, 393 ex., 421, 426–430
for edit distance, 409 pr.
for Floyd-Warshall algorithm, 655–659
for inventory planning, 414 pr.
for longest common subsequence, 393–399
for longest palindrome subsequence, 407 pr.
for longest simple path in a weighted directed acyclic graph, 407 pr.
for matrix-chain multiplication, 373–382
for optimal binary search trees, 400–407
optimal substructure in, 382–387
overlapping subproblems in, 387–390
for printing neatly, 408 pr.
reconstructing an optimal solution in, 390
relation to divide-and-conquer, 362
for seam carving, 412 pr.
for signing free agents, 414 pr.
top-down with memoization, 368
for transitive closure, 659–661
for Viterbi algorithm, 411 pr.
for the 0-1 knapsack problem, 430 ex.
see also data structure
analyzed by accounting method, 463
analyzed by aggregate analysis, 462–463
analyzed by potential method, 463–470
load factor of, 461
dynamic tree, 478
E[ ], see expected value
e (base of the natural logarithm), 65
edge, 1164
attributes of, 552
back, 569
bridge, 582 pr.
capacity of, 671
classification in breadth-first search, 581 pr.
classification in depth-first search, 569–570, 571 ex.
critical, 690
cross, 569
forward, 569
light, 587
residual, 678
safe, 587
weight of, 551
edge connectivity, 692 ex.
edge set, 1164
edit distance, 409 pr.
Edmonds-Karp algorithm, 689–691
elementary event, 1185
elementary insertion, 461
element of a set (∈), 1153
ellipsoid algorithm, 857
elliptic-curve factorization method, 956
elseif, in pseudocode, 22 n.
else, in pseudocode, 22
empty language (∅ ), 1052
empty set (∅ ), 1153
empty set laws, 1154
empty stack, 255
empty tree, 1173
encoding of problem instances, 1049–1052
encryption, 936
endpoint of an interval, 489
ENQUEUE, 257
entering a vertex, 1164
entropy function, 1182
epoch, 805
ϵ-dense graph, 668 pr.
ϵ-universal family of hash functions, 287, 292 ex.
equality
of functions, 1162
linear, 853
of sets, 1153
equality constraint, 632 ex.
equality subgraph, 724
directed, 727
equations and asymptotic notation, 58–59
equivalence class, 1159
modulo n([ a] n), 905
equivalence, modular (= (mod n)), 64
equivalence relation, 1159
error bound, 1027
error, in pseudocode, 24
escape problem, 697 pr.
EUCLID, 912
Euclid’s algorithm, 911–916, 954 pr.
euclidean norm (∥ ∥), 1219
Euler’s constant, 921
Euler’s phi function, 920
and hamiltonian cycles, 1043
evaluation of a polynomial, 46 pr., 879, 884 ex.
derivatives of, 900 pr.
at multiple points, 900 pr.
event, 1185