PREFACE
CONTENTS
1 MODELS OF COMPUTATION
1.1 ALGORITHMS AND THEIR COMPLEXITY
1.2 RANOOM ACCESS MACHINES
1.3 COMPUTATIONAL COMPLEXITY OF RAM PROGRAMS
1.4 A STORED PROGRAM MODEL
1.5 ABSTRACTIONS OF THE RAM
I. Straight-Line Programs
II. Bitwise Computations
III. Bit Vector Operations
IV. Decision Trees
1.6 A PRIMITIVE MODEL OF COMPUTATION: THE TURING MACHINE
1.7 RELATIONSHIP BETWEEN THE TURING MACHINE AND RAM MODELS
1.8 PIDGIN ALGOL-A HIGH-LEVEL LANGUAGE
EXERCISES
BIBLIOGRAPHIC NOTES
2 DESIGN OF EFFICIENT ALGORITHMS
2.1 DATA STRUCTURES: LISTS, QUEUES, AND STACKS
2.2 SET REPRESENTATIONS
2.3 GRAPHS
2.4 TREES
2.5 RECURSION
2.6 DIVIDE-AND-CONQUER
2.7 BALANCING
2.8 DYNAMIC PROGRAMMING
2.9 EPILOGUE
EXERCISES
BIBLIOGRAPHIC NOTES
3 SORTING AND ORDER STATISTICS
3.1 THE SORTING PROBLEM
3.2 RADIX SORTING
3.3 SORTING BY COMPARISONS
3.4 HEAPSORT-AN O(n log n) COMPARISON SORT
3.5 QUICKSORT-AN O(n log n) EXPECTED TIME SORT
2.6 ORDER STATISTICS
3.7 EXPECTED TIME FOR ORDER STATISTICS
EXERCISES
BIBLIOGRAPHIC NOTES
4 DATA STRUCTURES FOR SET MANIPULATION PROBLEMS
4.1 FUNDAMENTAL OPERATIONS ON SETS
4.2 HASHING
4.3 BINARY SEARCH
4.4 BINARY SEARCH TREES
4.5 OPTIMAL BINARY SEARCH TREES
4.6 A SIMPLE DISJOINT-SET UNION ALGORITHM
4.7 TREE STRUCTURES FOR THE UNION-FIND PROBLEM
4.8 APPLICATIONS AND EXTENSIONS OF THE UNION-FIND ALGORITHM
4.9 BALANCED TREE SCHEMES
4.10 DICTIONARIES AND PRIORITY QUEUES
4.11 MERGEABLE HEAPS
4.12 CONCATENABLE QUEUES
4.13 PARTITIONING
4.14 CHAPTER SUMMARY
EXERCISES
BIBLIOGRAPHIC NOTES
5 ALGORITHMS ON GRAPHS
5.1 MINIMUM-COST SPANNING TREES
5.2 DEPTH-FIRST SEARCH
5.3 BICONNECTIVITY
5.4 DEPTH-FIRST SEARCH OF A DIRECTED GRAPH
5.5 STRONG CONNECTIVITY
5.6 PATH-FINDING PROBLEMS
5.7 A TRANSITIVE CLOSURE ALGORITHM
5.8 A SHORTEST-PATH ALGORITHM
5.9 PATH PROBLEMS AND MATRIX MULTIPLICATION
5.10 SINGLE-SOURCE PROBLEMS
5.11 DOMINATORS IN A DIRECTED ACYCLIC GRAPH: PUTTING THE CONCEPTS TOGETHER
I. Forward edges
II. Cross edges
EXERCISES
BIBLIOGRAPHIC NOTES
6 MATRIX MULTIPLICATION AND RELATED OPERATIONS
6.1 BASICS
6.2 STRASSEN'S MATRIX-MULTIPLICATION ALGORITHM
6.3 INVERSION OF MATRICES
6.4 LUP DECOMPOSITION OF MATRICES
6.5 APPLICATIONS OF LUP DECOMPOSITION
6.6 BOOLEAN MATRIX MULTIPLICATION
EXERCISES
BIBLIOGRAPHIC NOTES
7 THE FAST FOURIER TRANSFORM AND ITS APPLICATIONS
7.1 THE DISCRETE FOURIER TRANSFORM AND ITS INVERSE
7.2 THE FAST FOURIER TRANSFORM ALGORITHM
7.3 THE FFT USING BIT OPERATIONS
7.4 PRODUCTS OF POLYNOMIALS
7.5 THE SCHONHAGE-STRASSEN INTEGER-MULTIPLICATION ALGORITHM
EXERCISES
BIBLIOGRAPHIC NOTES
8 INTEGER AND POLYNOMIAL ARITHMETIC
8.1 THE SIMILARITY BETWEEN INTEGERS AND POLYNOMIALS
8.2 INTEGER MULTl PLICATION AND DIVISION
8.3 POLYNOMIAL MULTIPLICATION AND DIVISION
8.4 MODULAR ARITHMETIC
8.5 MODULAR POLYNOMIAL ARITHMETIC AND POLYNOMIAL EVALUATION
8.6 CHINESE REMAINDERING
8.7 CHINESE REMAINDERING AND INTERPOLATION OF POLYNOMIALS
8.8 GREATEST COMMON DIVISORS AND EUCLID'S ALGORITHM
8.9 AN ASYMPTOTICALLY FAST ALGORITHM FOR POLYNOMIAL GCD'S
8.10 INTEGER GCD'S
8.11 CHINESE REMAINDERING REVISITED
8.12 SPARSE POLYNOMIALS
EXERCISES
BIBLIOGRAPHIC NOTES
9 PATTERN-MATCHING ALGORITHMS
9.1 FINITE AUTOMATA AND REGULAR EXPRESSIONS
9.2 RECOGNITION OF REGULAR EXPRESSION PATTERNS
9.3 RECOGNITION OF SUBSTRINGS
9.4 TWO-WAY DETERMINISTIC PUSHDOWN AUTOMATA
9.5 POSITION TREES AND SUBSTRING IDENTIFIERS
EXERCISES
BIBLIOGRAPHIC NOTES
10 NP-COMPLETE PROBLEMS
10.1 NONDETERMINISTIC TURING MACHINES
10.2 THE CLASSES P AND NP
10.3 LANGUAGES AND PROBLEMS
10.4 NP-COMPLETENESS OF THE SATISFIABILITY PROBLEM
10.5 ADDITIONAL NP-COMPLETE PROBLEMS
10.6 POLYNOMIAL-SPACE-BOUNDED PROBLEMS
EXERCISES
BIBLIOGRAPHIC NOTES
11 SOME PROVABLY INTRACTABLE PROBLEMS
11.1 COMPLEXITY HIERARCHIES
11.2 THE SPACE HIERARCHY FOR DETERMINISTIC TURING MACHINES
11.3 A PROBLEM REQUIRING EXPONENTIAL TIME AND SPACE
11.4 A NONELEMENTARY PROBLEM
EXERCISES
BIBLIOGRAPHIC NOTES
12 LOWER BOUNDS ON NUMBERS OF ARITH.METIC OPERATIONS
12.1 FIELDS
12.2 STRAIGHT-LINE CODE REVISITED
12.3 A MATRIX .FORMULATION OF PROBLEMS
12.4 A ROW-ORIENTED LOWER BOUND ON MULTIPLICATIONS
12.5 A COLUMN-ORIENTED LOWER BOUND .ON MULTIPLICATIONS
12.6 A ROW-AND-COLUMN-ORIENTED BOUND ON MULTIPLICATIONS
12.7 PRECONDITIONING
EXERCISES
BIBLIOGRAPHIC NOTES
BIBLIOGRAPHY
INDEX