This text is designed to teach students good programming and algorithm analysis skills simultaneously so that they can develop intricate programs with the maximum amount of efficiency. By analyzing an algorithm before it is actually coded, students can decide if a particular solution will be feasible and see how careful implementations can reduce the time constraint for large amounts of data. No algorithm or data structure is presented without an explanation of its running time. This book is suitable for either an advanced data structures (CS7) course or a first-year graduate course in algorithm analysis. As introductory sequences expand from two to three courses, this book is ideal at the end of the third course, bridging the way to the Algorithms course. Integrated coverage of the Java Collections Library. Discussion of algorithm and design techniques covers greedy algorithms, divide and conquer algorithms, dynamic programming, randomized algorithms, and backtracking. Covers topics and data structures such as Fibonacci heaps, skew heaps, binomial queue, skip lists and splay trees.
A full chapter on amortized analysis examines the advanced data structures presented earlier in the book. Chapter on advanced data structures and their implementation covers red black trees, top down splay trees, k-d trees, pairing heaps, and more. Numerous figures and examples illustrate successive stages of algorithms. End-of-chapter exercises, ranked by difficulty, reinforce key chapter concepts. End-of-chapter references are either historical, representing the original source of the material, or they represent extensions and improvements to the results given in the text. The following Instructor Resources are available on the Instructor Resource Center: Source code for example programs PowerPoint slides Solution Manual.