Preface List of Figures Chapter 1 INTRODUCTION Chapter 2 THE COMPLEXITY OF ALGORITHMS AND THE LOWER BOUNDS OF PROBLEMS 2-1 The time complexity of an algorithm 2-2 The best-, average- and worst-case analysis of algorithms 2-3 The lower bound of a problem 2-4 The worst-case lower bound of sorting 2-5 Heap sort: A sorting algorithm which is optimal in worst cases 2-6 The average-case lower bound of sorting 2-7 Improving a lower bound through oracles 2-8 Finding the lower bound by problem transformation 2-9 Notes and references 2-10 Further reading materials Exercise Chapter 3 THE GREEDY METHOD 3-1 Kruskal's method to find a minimum spanning tree 3-2 Prim's method to find a minimum spanning tree 3-3 The single-source shortest path problem 3-4 The 2-way merge problem 3-5 The minimum cycle basis problem solved by the greedy algorithm …… Chapter 4 THE DIVIDE-AND-CONQUER STRATEGY Chapter 5 TREE SEARCHING STRATEGIES Chapter 6 PRUNE-AND-SEARCH Chapter 7 DYNAMIC PROGRAMMING Chapter 8 THE THEORY OF NP-COMPLETENESS Chapter 9 APPROXIMATION ALGORITHMS Chapter 10 AMORTIZED ANALYSIS Chapter 11 RANDOMIZED ALGORITHMS Chapter 12 ON-LING ALGORITHMS BIBLIOGRAPHY AUTHOR INDEX SUBJECT INDEX