Mark Allen Weiss,佛罗里达国际大学计算与信息科学学院教授、副院长,本科教育主任和研究生教育主任。他于1987年获得普林斯顿大学计算机科学博士学位,师从BobSedgewick。他曾经担任全美AP(Advanced Placement)考试计算机学科委员会的主席(2000-2004)。他的主要研究兴趣是数据结构、算法和教育学。
内页插图
目录
Preface Chapter 1 Introduction 1.1 What's the Book About? 1.2 Mathematics Review 1.2.1 Exponents 1.2.2 Logarichms 1.2.3 Series 1.2.4 Modular Arithmetic 1.2.5 The P Word 1.3 A Brief Inroduction to Recursion 1.4 Implementing Generic Components Pre-Java 1.4.1 Using Object for Genericicy 1.4.2 Wrappers for Primitive Types 1.4.3 Usinglnterface Types for Genericity 1.4.4 Compatibility of Array Types 1.5 Implementing Generic Components Usingjava 5 Generics 1.5.1 Simple Generic Classes and Interfaces 1.5.2 Autoboxing/Unboxing 1.5.3 TheDiamond Operator 1.5.4 Wildcardswith Bounds 1.5.5 Generic Static Methods 1.5.6 Type Bounds 1.5.7 TypeErasure 1.5.8 Restrictions onGenerics 1.6 Function Objects Summary Exercises References
Chapter 2 Algorithm Analysis 2.1 MathematicalBackground 2.2 Model 2.3 What to Analyze 2.4 Running Time Calculations 2.4.1 A Simple Example 2.4.2 General Rules 2.4.3 Solutions for the Maximum Subsequence Sum Problem 2.4.4 Logamhms in the RunningTime 2.4.5 A Grain of Salt Summary Exercises References
Chapter 3 Lists,Stacks,and Queues 3.1 Abstract Data Types (ADTs) 3.2 The List ADT 3.2.1 Simple Array Implementation of Lists 3.2.2 Simple Linked Lists 3.3 Listsin the java Collections API 3.3.1 Collectionlnterfac 3.3.2 Iterator 3.3.3 The List Interface, ArrayList, and LinkedList 3.3.4 Example:UsingremoveonaLinkedList 3.3.5 Listlterators 3.4 Implementation of ArrayList 3.4.1 The Basic Class 3.4.2 The Iterator and Java.Nested and Inner Classes 3.5 Implementation of LinkedList 3.6 The StackADT 3.6.1 Stack Model …… Chapter 4 Trees Chapter 5 Hashing Chapter 6 Priority Queues(Heaps) Chapter 7 Sorting Chapter 8 The Disjoint Set Class Chapter 9 Graph Algorithms Chapter 10 Algorithm Desing Techniques Chapter 11 Amortized Analysis Chapter 12 Advanced Data Sturctures and Implementation Index
Suppose you have a group of N numbers and would like to determine the thh largest. This is known as the selection problem. Most studencs who have had a programming course or two would have no difficulty writing a program Co solve t.his problem. There are quite a few "obvious" solutions. One way to solve this problem would be to read the N numbers into an array, sort the array in decreasing order by some simple algorithm such as bubblesort, and then return the elemem in poskion k. A somewhat better algorithm might be to read the first k elements into an array and sort them (in decreasing order). Next, each remaining element is read one by one. As a new element arrives, it is ignored ifit is smaller than the kth element in the array. Otherwise, it is placed in its correct spot in the array, bumping one element out of the array. When the algPo'ithm ends, the element.in the kth position is ret.urned as the answer. Both algorit.hms are simple to code, and you are encouraged to do so. The natural questions, then, are which algorithm is better and, more important, is either algorithm good enough? A simulation using a random file of 30 million elements and k = l5,000,000 will show that neither algorithm finishes in a reasonable amount of time; each requiresseveral days of compurer processing to cerminate (albeic eventually with a correct answer).An alternative met.hod, discussed in Chapt.er 7, gives a solution in about a second. Thus,although our proposed algorithms work, they cannot be considered good algorithms,because they are entirely impractical for input sizes that a third algorithm can handle in areasonable amount of rime. ……