封面页 书名页 版权页 前言页 目录页 PART 1 Basic Concepts and Introduc tion to Algorithms Chapter 1 Basic Concepts in Al gorithmic Analysis 1.1 Introduction 1.2 Historical Background 1.3 Binary Search 1.3.1 Analysis of the binary search algorithm 1.4 Merging Two Sorted Lis ts 1.5 Selection Sort 1.6 Insertion Sort 1.7 Bottom-Up Merge Sortin g 1.7.1 Analysis of bott om-up merge sorting 1.8 Time Complexity 1.8.1 Order of growth 1.8.2 The O-notation 1.8.3 The Ω-notation 1.8.4 The θ-notation 1.8.5 Examples 1.8.6 Complexity class es and the o-notation 1.9 Space Complexity 1.10 Optimal Algorithms 1.11 How to Estimate the R unning Time of an Algorithm 1.11.1 Counting the nu mber of iterations 1.11.2 Counting the fr equency of basic operations 1.11.3 Using recurrenc e relations 1.12 Worst case and averag e case analysis 1.12.1 Worst case anal ysis 1.12.2 Average case an alysis
1.13 Amortized Analysis 1.14 Input Size and Proble m Instance 1.15 Exercises 1.16 Bibliographic Notes Chapter 2 Mathematical Prelimi naries 2.1 Sets, Relations and Fu nctions 2.1.1 Sets 2.1.2 Relations 2.1.2.1 Equivalenc e relations 2.1.3 Functions 2.2 Proof Methods 2.2.1 Direct proof 2.2.2 Indirect proof 2.2.3 Proof by contrad iction 2.2.4 Proof by counter example 2.2.5 Mathematical ind uction 2.3 Logarithms 2.4 Floor and Ceiling Func tions 2.5 Factorial and Binomial Coefficients 2.5.1 Factorials 2.5.2 Binomial coeffic ients 2.6 The Pigeonhole Princip le 2.7 Summations 2.7.1 Approximation of summations by integration 2.8 Recurrence Relations 2.8.1 Solution of line ar homogeneous recurrences 2.8.2 Solution of inho mogeneous recurrences 2.8.3 Solution of divi de-and-conquer recurrences 2.8.3.1 Expanding the recurrence 2.8.3.2 Substituti
on 2.8.3.3 Change of variables 2.9 Exercises Chapter 3 Data Structures 3.1 Introduction 3.2 Linked Lists 3.2.1 Stacks and queue s 3.3 Graphs 3.3.1 Representation o f graphs 3.3.2 Planar graphs 3.4 Trees 3.5 Rooted Trees 3.5.1 Tree traversals 3.6 Binary Trees 3.6.1 Some quantitativ e aspects of binary trees 3.6.2 Binary search tr ees 3.7 Exercises 3.8 Bibliographic Notes Chapter 4 Heaps and the Disjoi nt Sets Data Structures 4.1 Introduction 4.2 Heaps 4.2.1 Operations on he aps 4.2.2 Creating a heap 4.2.3 Heapsort 4.2.4 Min and max heap s 4.3 Disjoint Sets Data Str uctures 4.3.1 The union by ran k heuristic 4.3.2 Path compression 4.3.3 The union-find a lgorithms 4.3.4 Analysis of the union-find algorithms 4.4 Exercises 4.5 Bibliographic Notes PART 2 Techniques Based on Recursi on
Chapter 5 Induction 5.1 Introduction 5.2 Two Simple Examples 5.2.1 Selection sort 5.2.2 Insertion sort 5.3 Radix Sort 5.4 Integer Exponentiation 5.5 Evaluating Polynomials (Horner s Rule) 5.6 Generating Permutation s 5.6.1 The first algori thm 5.6.2 The second algor ithm 5.7 Finding the Majority E lement 5.8 Exercises 5.9 Bibliographic Notes Chapter 6 Divide and Conquer 6.1 Introduction 6.2 Binary Search 6.3 Mergesort 6.3.1 How the algorith m works 6.3.2 Analysis of the mergesort algorithm 6.4 The Divide and Conquer Paradigm 6.5 Selection: Finding the Median and the kth Smallest Elemen t 6.5.1 Analysis of the selection algorithm 6.6 Quicksort 6.6.1 A partitioning a lgorithm 6.6.2 The sorting algo rithm 6.6.3 Analysis of the quicksort algorithm 6.6.3.1 The worst case behavior 6.6.3.2 The averag e case behavior 6.6.4 Comparison of so
rting algorithms 6.7 Multiplication of Larg e Integers 6.8 Matrix Multiplication 6.8.1 The traditional algorithm 6.8.2 Recursive versio n 6.8.3 Strassen s algor ithm 6.8.4 Comparisons of t he three algorithms 6.9 The Closest Pair Probl em 6.9.1 Time complexity 6.10 Exercises 6.11 Bibliographic Notes Chapter 7 Dynamic Programming 7.1 Introduction 7.2 The Longest Common Sub sequence Problem 7.3 Matrix Chain Multiplic ation 7.4 The Dynamic Programmin g Paradigm 7.5 The All-Pairs Shortest Path Problem 7.6 The Knapsack Problem 7.7 Exercises 7.8 Bibliographic Notes PART 3 First-Cut Techniques Chapter 8 The Greedy Approach 8.1 Introduction 8.2 The Shortest Path Prob lem 8.2.1 A linear time al gorithm for dense graphs 8.3 Minimum Cost Spanning Trees (Kruskal s Algorithm) 8.4 Minimum Cost Spanning Trees (Prim s Algorithm) 8.4.1 A linear time al gorithm for dense graphs 8.5 File Compression 8.6 Exercises 8.7 Bibliographic Notes
Chapter 9 Graph Traversal 9.1 Introduction 9.2 Depth-First Search 9.2.1 Time-complexity of depth-first search 9.3 Applications of Depth- First Search 9.3.1 Graph acyclicity 9.3.2 Topological sort ing 9.3.3 Finding articula tion points in a graph 9.3.4 Strongly connect ed components 9.4 Breadth-First Search 9.5 Applications of Breadt h-First Search 9.6 Exercises 9.7 Bibliographic Notes PART 4 Complexity of Problems Chapter 10 NP-Complete Problem s 10.1 Introduction 10.2 The Class P 10.3 The Class NP 10.4 NP-Complete Problems 10.4.1 The satisfiabil ity problem 10.4.2 Vertex cover,in dependent set and clique problems 10.4.3 More NP-complet e Problems 10.5 The Class co-NP 10.6 The Class NPI 10.7 The Relationships Bet ween the Four Classes 10.8 Exercises 10.9 Bibliographic Notes Chapter 11 Introduction to Com putational Complexity 11.1 Introduction 11.2 Model of Computation: The Turing Machine 11.3 k-tape Turing Machine s and Time complexity 11.4 Off-Line Turing Machi
nes and Space Complexity 11.5 Tape Compression and Linear Speed-Up 11.6 Relationships Between Complexity Classes 11.6.1 Space and time hierarchy theorems 11.6.2 Padding argumen ts 11.7 Reductions 11.8 Completeness 11.8.1 NLOGSPACE-compl ete problems 11.8.2 PSPACE-complete problems 11.8.3 P-complete prob lems 11.8.4 Some conclusion s of completeness 11.9 The Polynomial Time H ierarchy 11.10 Exercises 11.11 Bibliographic Notes Chapter 12 Lower Bounds 12.1 Introduction 12.2 Trivial Lower Bounds 12.3 The Decision Tree Mod el 12.3.1 The search prob lem 12.3.2 The sorting pro blem 12.4 The Algebraic Decisio n Tree Model 12.4.1 The element uni queness problem 12.5 Linear Time Reduction s 12.5.1 The convex hull problem 12.5.2 The closest pai r problem 12.5.3 The Euclidean m inimum spanning tree problem 12.6 Exercises 12.7 Bibliographic Notes
PART 5 Coping with Hardness Chapter 13 Backtracking 13.1 Introduction 13.2 The 3-Coloring Proble m 13.3 The 8-Queens Problem 13.4 The General Backtrack ing Method 13.5 Branch and Bound 13.6 Exercises 13.7 Bibliographic notes Chapter 14 Randomized Algorith ms 14.1 Introduction 14.2 Las Vegas and Monte C arlo Algorithms 14.3 Randomized Quicksort 14.4 Randomized Selection 14.5 Testing String Equali ty 14.6 Pattern Matching 14.7 Random Sampling 14.8 Primality Testing 14.9 Exercises 14.1O Bibliographic Notes Chapter 15 Approximation Algor ithms 15.1 Introduction 15.2 Basic Definitions 15.3 Difference Bounds 15.3.1 Planar graph co loring 15.3.2 Hardness result : the knapsack problem 15.4 Relative Performance Bounds 15.4.1 The bin packing problem 15.4.2 The Euclidean t raveling salesman problem 15.4.3 The vertex cove r problem 15.4.4 Hardness result :the traveling salesman problem 15.5 Polynomial Approximat ion Schemes
15.5.1 The knapsack pr oblem 15.6 Fully Polynomial Appr oximation Schemes 15.6.1 The subset-sum problem 15.7 Exercises 15.8 Bibliographic Notes PART 6 Iterative Improvement for D omain-Specific Problems Chapter 16 Network Flow 16.1 Introduction 16.2 Preliminaries 16.3 The Ford-Fulkerson Me thod 16.4 Maximum Capacity Augm entation 16.5 Shortest Path Augment ation 16.6 Dinic s Algorithm 16.7 The MPM Algorithm 16.8 Exercises 16.9 Bibliographic Notes Chapter 17 Matching 17.1 Introduction 17.2 Preliminaries 17.3 The Network Flow Meth od 17.4 The Hungarian Tree Me thod for Bipartite Graphs 17.5 Maximum Matching in G eneral Graphs 17.6 An O(n2.5) Algorithm for Bipartite Graphs 17.7 Exercises 17.8 Bibliographic Notes PART 7 Techniques in Computational Geometry Chapter 18 Geometric Sweeping 18.1 Introduction 18.2 Geometric Preliminari es 18.3 Computing the Interse ctions of Line Segments 18.4 The Convex Hull Probl em
18.5 Computing the Diamete r of a Set of Points 18.6 Exercises 18.7 Bibliographic Notes Chapter 19 Voronoi Diagrams 19.1 Introduction 19.2 Nearest-Point Voronoi Diagram 19.2.1 Delaunay triang ulation 19.2.2 Construction of the Voronoi diagram 19.3 Applications of the V oronoi Diagram 19.3.1 Computing the c onvex hull 19.3.2 All nearest nei ghbors 19.3.3 The Euclidean m inimum spanning tree 19.4 Farthest-Point Vorono i Diagram 19.4.1 Construction of the farthest-point Voronoi diagram 19.5 Applications of the F arthest-Point Voronoi Diagram 19.5.1 All farthest ne ighbors 19.5.2 Smallest enclos ing circle 19.6 Exercises 19.7 Bibliographic Notes Bibliography Index 附录页