[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.

Image 1976

Image 1977

Image 1978

Image 1979

Index

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, 50, 5455

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

Image 1980

Image 1981

-notation, 73 pr.

{ } (set), 1153

∈ (set member), 1153

∉ (not a set member), 1153

(empty language), 1052

(empty set), 1153

⊆ (subset), 1154

⊂ (proper subset), 1154

: (such that), 54 n., 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

: (subarray), 19, 23

[ a, b] (closed interval), 1157

( a, b) (open interval), 1157

[ a, b) or ( a, b] (half-open interval), 1157

(choose), 1180

∥ ∥ (euclidean norm), 1219

! (factorial), 67–68

⌈ ⌉ (ceiling), 63

⌊ ⌊ (floor), 63

∂ (partial derivative), 1023

∑ (sum), 1140

∏ (product), 1144

→ (adjacency relation), 1165

↝ (reachability relation), 1165

∧ (AND), 659, 1065

∥ (concatenation), 291

¬ (NOT), 1065

∨ (OR), 659, 1065

⋘ (left shift), 305

⋙ (logical right shift), 285

(group operator), 917

(semiring operator), 651 n.

(symmetric difference), 706

Image 1982

(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.

ε (empty string), 959, 1052

⊏ (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

accounting method, 453–456

for binary counters, 455

for dynamic tables, 463

for stack operations, 454–455

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, 551552

adjacency relation (→), 1165

adjacent vertices, 1165

Advanced Encryption Standard (AES), 291

adversary, 204, 286, 805, 807, 941

AES, 291

aggregate analysis, 449–453

for binary counters, 451–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.

for dynamic tables, 462–463

for the Knuth-Morris-Pratt algorithm, 977–978

for Prim’s algorithm, 597

for rod cutting, 370

for shortest paths in a dag, 617

for stack operations, 449–451

aggregate flow, 864

Akra-Bazzi recurrence, 115119

solving by Akra-Bazzi method, 117118

algorithm, 1–1226

analysis of, 25–34

approximation, 1104–1136

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

reduction, 1046, 1062

running time of, 29

scaling, 641 pr., 699 pr.

streaming, 818

as a technology, 13

verification, 1058

algorithmic recurrence, 77–78

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

by repeated squaring, 652–653

α-balanced, 472 pr.

α( n), 533

α-strongly convex function, 1041

alphabet, 967, 1052

alternating path, 705

amortized analysis, 448–475

by accounting method, 453–456

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 dynamic tables, 460–471

for the Knuth-Morris-Pratt algorithm, 977–978

for making binary search dynamic, 472 pr.

by potential method, 456460

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

analysis of algorithms, 2534

see also amortized analysis, competitive analysis, probabilistic analysis

ancestor, 1172

lowest common, 543 pr.

AND function (∧), 659, 1065

AND gate, 1065

and, in pseudocode, 24

antiparallel edges, 673–674

antisymmetric relation, 1160

approximation

by least squares, 841–845

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 set cover, 11151119

for subset sum, 11241130

for traveling-salesperson problem, 1109–1115

for vertex cover, 11061109, 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

in pseudocode, 22–23

storage of, 26 n., 252

articulation point, 582 pr.

assignment

optimal, 723739

satisfying, 1066, 1074

truth, 1066, 1073

assignment problem, 723–739

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

augmenting path, 681–682, 705

widest, 700 pr.

authentication, 309 pr., 938–939, 942

automaton, 967–974

auxiliary hash function, 295

average-case running time, 32, 128

AVL tree, 357 pr., 358

back edge, 569, 573

back substitution, 823

balanced search tree

AA-trees, 358

AVL trees, 357 pr., 358

B-trees, 497–519

k-neighbor trees, 358

left-leaning red-black binary search trees, 358

red-black trees, 331–359

scapegoat trees, 358

splay trees, 359, 478

treaps, 358

2-3-4 trees, 502, 518 pr.

2-3 trees, 358, 519

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

of a recurrence, 41, 77–78

base, in DNA, 393

basis function, 841

Bayes’s theorem, 1189

BELLMAN-FORD, 612

Bellman-Ford algorithm, 612616

for all-pairs shortest paths, 647

in Johnson’s algorithm, 664666

and objective functions, 632 ex.

to solve systems of difference constraints, 630631

Yen’s improvement to, 640 pr.

Bernoulli trial, 1196

and balls and bins, 143–144

in bucket sort analysis, 217

in finding prime numbers, 943

in randomized selection analysis, 232

and streaks, 144150

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., 5556

bijective function, 1162

binary character code, 431

binary counter

analyzed by accounting method, 455

analyzed by aggregate analysis, 451453

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 parallel merging, 777–778

in searching B-trees, 512 ex.

binary search tree, 312–330

AA-trees, 358

AVL trees, 357 pr., 358

deletion from, 322325, 326 ex.

with equal keys, 327 pr.

insertion into, 321–322

k-neighbor trees, 358

left-leaning red-black binary search trees, 358

maximum key of, 317–318

minimum key of, 317318

optimal, 400407

persistent, 355 pr.

predecessor in, 318–319

querying, 316–320

randomly built, 328 pr.

red-black trees, 331–359

right-converting of, 337 ex.

scapegoat trees, 358

searching, 316–317

for sorting, 326 ex.

splay trees, 359

successor in, 318319

weight-balanced trees, 358

see also red-black tree

binary-search-tree property, 313–314

vs. min-heap property, 315 ex.

binary tree, 1173

full, 433, 1174

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.

tails of, 12031210

binomial expansion, 1181

binomial theorem, 1181

bin packing, 1131 pr.

bipartite graph, 1167

complete, 716

corresponding flow network of, 694

d-regular, 716 ex., 740 pr.

matching in, 693–697, 704743

bipartite matching, 693–697, 704–743

birthday paradox, 140–143

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

black vertex, 554, 564

block

in a cache, 440, 802

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., 10731074

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, 11451152

box, nesting, 640 pr.

B+-tree, 501

branch instructions, 26

breadth-first forest, 728

breadth-first search, 554563

in the Hopcroft-Karp algorithm, 711

in the Hungarian algorithm, 727728

in maximum flow, 689–691

and shortest paths, 558–561, 605

similarity to Dijkstra’s algorithm, 624, 625 ex.

breadth-first tree, 555, 561

bridge, 582 pr.

B*-tree, 502 n.

B-tree, 497–519

compared with red-black trees, 497, 503

creating, 505506

deletion from, 513516

full node in, 502

height of, 502–504

insertion into, 506–511

minimum degree of, 502

properties of, 501504

searching, 504–505

splitting a node in, 506508

2-3-4 trees, 502

B-TREE-CREATE, 506

B-TREE-DELETE, 513

B-TREE-INSERT, 508

B-TREE-INSERT-NONFULL, 511

B-TREE-SEARCH, 505, 512 ex.

B-TREE-SPLIT-CHILD, 507

B-TREE-SPLIT-ROOT, 509

BUBBLESORT, 46 pr.

bucket, 215

bucket sort, 215–219

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, 27, 301, 440, 802

cache block, 301, 440, 802

cache hit, 440, 803

cache line, see cache block

cache miss, 440, 803

cache obliviousness, 519

caching

offline, 440–446

online, 802815

call

in a parallel computation, 753

of a subroutine, 26, 29 n.

by value, 23

cancellation lemma, 886

cancellation of flow, 679

capacity

of a cut, 682

of an edge, 671

residual, 677, 681

of a vertex, 676 ex.

Image 1983

capacity constraint, 672

cardinality of a set (| |), 1156

Carmichael number, 945, 953 ex.

Cartesian product (×), 1157

Cartesian sum, 885 ex.

Catalan numbers, 329 pr., 375

CBC-MAC, 291, 306

c-competitive, 793

ceiling function (⌈ ⌉), 63

in recurrences, 116–117

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

chaining, 277–281, 308 pr.

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.

Cilk, 750, 790

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

classification of edges

in breadth-first search, 581 pr.

in depth-first search, 569–570, 571 ex.

clause, 1075–1076

clean area, 222 pr.

climate change, 845

clique, 1081

CLIQUE, 1081

clique problem

approximation algorithm for, 1131 pr.

NP-completeness of, 10811084

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

clustering, 1005–1013

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

code, 431–432

Huffman, 431–439

codeword, 432

codomain, 1161

coefficient

binomial, 1181

of a polynomial, 65, 877

coefficient representation, 879

and fast multiplication, 882–884

cofactor, 1221

coin changing, 446 pr.

coin flipping, 131–132

collection of sets, 1156

collision, 275

resolution by chaining, 277–281

resolution by open addressing, 293301

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

longest, 393–399

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

Schur, 825, 839

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

Image 1984

completion time, 446 pr., 816 pr., 1133 pr.

COMPLETION-TIME-SCHEDULE, 817 pr.

complexity class, 1054

co-NP, 1059

NP, 1043, 1058, 1060 ex.

NPC, 1044, 1063

P, 1043, 1050, 1054, 1055 ex.

complexity measure, 1054

complex numbers

inverting matrices of, 838 ex.

multiplication of, 90 ex.

complex root of unity, 885

interpolation at, 891–892

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

by Huffman code, 431–439

of images, 412 pr.

compulsory miss, 440

computational depth, see span

computational problem, 5–6

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, 10321034

constraint

difference, 627

equality, 632 ex.

linear, 851, 853–854

nonnegativity, 854

constraint graph, 628–630

contain, in a path, 1165

continuous master theorem, 112

proof of, 107–115

continuous uniform probability distribution, 1187

contraction

of a dynamic table, 465–470

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

counting, 1178–1184

probabilistic, 153 pr.

counting sort, 208–211

in computing suffix arrays, 992

in radix sort, 213

COUNTING-SORT, 209

coupon collector’s problem, 144

cover

path, 698 pr.

by a subfamily, 1116

vertex, 1084, 1106

credit, 453

critical edge, 690

critical path

in a dag, 619

of a PERT chart, 617

of a task-parallel trace, 757

cross a cut, 587, 701 pr.

cross edge, 569

cryptographic hash function, 291

cryptosystem, 936942

cubic spline, 847 pr.

currency exchange, 641 pr.

curve fitting, 841845

cutcapacity of, 682

of a flow network, 682685

global, 701 pr.

minimum, 682

net flow across, 682

of an undirected graph, 587

weight of, 1124 ex.

CUT-ROD, 366

cycle of a graph, 11651166

hamiltonian, 1043, 1056, 10851090

minimum mean-weight, 642 pr.

negative-weight, see negative-weight cycle

and shortest paths, 607–608

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 science, 14–15

data structure, 9, 249–359, 477545

AA-trees, 358

augmentation of, 480496

AVL trees, 357 pr., 358

binary search trees, 312–330

bit vectors, 274 ex.

B-trees, 497–519

deques, 258 ex.

dictionaries, 249

direct-address tables, 273–275

for disjoint sets, 520–545

for dynamic graphs, 479

dynamic sets, 249–251

dynamic trees, 478

exponential search trees, 226, 478

Fibonacci heaps, 478

fusion trees, 226, 478

hash tables, 275–282

heaps, 161–181

interval trees, 489–495

k-neighbor trees, 358

left-leaning red-black binary search trees, 358

linked lists, 258–264

order-statistic trees, 480–486

persistent, 355 pr., 478

potential of, 456

priority queues, 172178

queues, 254, 256–257

radix trees, 327 pr.

red-black trees, 331–359

rooted trees, 265–268

scapegoat trees, 358

on secondary storage, 498501

skip lists, 359

splay trees, 359, 478

stacks, 254–255

treaps, 358

2-3-4 trees, 502, 518 pr.

2-3 trees, 358, 519

van Emde Boas trees, 478

weight-balanced trees, 358

data type, 26

decision by an algorithm, 1053

decision problem, 1045, 1049

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 polynomial, 65, 877

of a vertex, 1165

degree-bound, 877

DELETE, 250

DELETE-LARGER-HALF, 460 ex.

deletion

from binary search trees, 322325, 326 ex.

from B-trees, 513–516

from chained hash tables, 278

from direct-address tables, 274

from dynamic tables, 465–470

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, 294295

from order-statistic trees, 484–485

from queues, 256

from red-black trees, 346–355

from stacks, 254

DeMorgan’s laws

for propositional logic, 1078

for sets, 1155, 1158 ex.

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

depth-first search, 563–572

in finding articulation points, bridges, and biconnected components, 582 pr.

in finding strongly connected components, 576581

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

determinacy race, 765768

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

Dijkstra’s algorithm, 620–626

for all-pairs shortest paths, 646, 666

with edge weights in a range, 626 ex.

implemented with a Fibonacci heap, 623624

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 addressing, 273275

DIRECT-ADDRESS-INSERT, 274

DIRECT-ADDRESS-SEARCH, 274

direct-address table, 273275

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

topological sort of, 573–576

directed equality subgraph, 727

directed graph, 1164

all-pairs shortest paths in, 646669

constraint graph, 628

Euler tour of, 583 pr., 1043

hamiltonian cycle of, 1043

incidence matrix of, 553 ex.

and longest paths, 1042

path cover of, 698 pr.

PERT chart, 617, 619 ex.

semiconnected, 581 ex.

shortest path in, 604

single-source shortest paths in, 604645

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.

discovered vertex, 554, 564

discovery time, 565

discrete Fourier transform, 888

discrete logarithm, 933

discrete logarithm theorem, 933

discrete probability distribution, 1186

discrete random variable, 11911196

disjoint-set data structure, 520–545

analysis of, 534–540

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, 523527

lower bound for, 545

in offline lowest common ancestors, 543 pr.

in offline minimum, 541 pr.

disjoint-set forest, 527–531

analysis of, 534–540

rank properties of, 533–534, 540 ex.

see also disjoint-set data structure

disjoint sets, 1156

disjunctive normal form, 1078

disk drive, 498500

see also secondary storage

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 inputs, 128, 134

of prime numbers, 943

probability, 218 ex., 1185

uniform, 1186

distributive laws for sets, 1155

divergent series, 1140

divide-and-conquer method, 34, 76

analysis of, 39–41, 90119

for binary search, 44 ex.

for conversion of binary to decimal, 910 ex.

for fast Fourier transform, 888–891, 895

for matrix inversion, 834–837

for matrix multiplication, 81–90, 770–775, 783 pr.

for merge sort, 3444, 775–782

for multiplication, 899 pr.

for quicksort, 182204

relation to dynamic programming, 362

for selection, 230–243

solving recurrences for, 90119

for Strassen’s algorithm, 85–90, 773–774

divide instruction, 26

divides relation (|), 904

divide step, in divide-and-conquer, 34, 76

division method, 284, 292 ex.

division theorem, 905

divisor, 904

common, 906

see also greatest common divisor

DNA, 6, 393394, 409 pr.

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.

weak, 868–869, 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, 648659

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, 426430

for edit distance, 409 pr.

elements of, 382393

for Floyd-Warshall algorithm, 655–659

for inventory planning, 414 pr.

for longest common subsequence, 393399

for longest palindrome subsequence, 407 pr.

for longest simple path in a weighted directed acyclic graph, 407 pr.

for matrix-chain multiplication, 373–382

and memoization, 390392

for optimal binary search trees, 400407

optimal substructure in, 382–387

overlapping subproblems in, 387390

for printing neatly, 408 pr.

reconstructing an optimal solution in, 390

relation to divide-and-conquer, 362

for rod cutting, 363–373

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.

dynamic set, 249251

see also data structure

dynamic table, 460–471

analyzed by accounting method, 463

analyzed by aggregate analysis, 462463

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

antiparallel, 673674

attributes of, 552

back, 569

bridge, 582 pr.

capacity of, 671

classification in breadth-first search, 581 pr.

classification in depth-first search, 569570, 571 ex.

critical, 690

cross, 569

forward, 569

light, 587

negative-weight, 606–607

residual, 678

safe, 587

tree, 561, 564, 569

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 string ( ε), 959, 1052

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

Euler’s theorem, 932, 953 ex.

Euler tour, 583 pr., 740 pr.

and hamiltonian cycles, 1043

evaluation of a polynomial, 46 pr., 879, 884 ex.

derivatives of, 900 pr.

at multiple points, 900 pr.

event, 1185

event-driven simulation, 173, 181