### Deep Information and Fairly Broad Coverage

*Great coverage, perhaps too mathematical for many, sometimes obscure, not very eloquent, a bit too expensive.*

##### ORIGINAL DRAFT

Designed for basic Computer Science and Data Structures and Algorithm classes, this is a book that’s clearly targeted for the education market. At close to $70, this should drive our educational system into bankrupsy at a faster pace. It’s not clear to me whether more instructive and elegantly written books like the Waite series might not lead to better programmers. But snide comments asside, this book brings a lot to the table. Most readers may not be college students, so your reasons for buying this book are likely to be differently motivated. There are a handful of Java Algorithm and Data Stucture books on the market, so which you buy depends on your needs.

This books offers a solid foundation in design principles and algorithm analysis. Most of the assessments are based on a conservative view of the famous O notation for measuring algorithm efficiency. Chapters 1 and 2 build up knowledge that’s critical to making effective algorithm and data structure choices. Chapters 3 to 6 are considered central to most Computer Science curiculums, with chapters 7 to 11 considered optional or for the more advanced courses. These same chapters overlap with more comprehensive Data Structures and Algorithm courses, which incude chapters 12 to 16. In effect, you can thing of the book as being divided in three parts.

The first part, dedicated to the basics, covers Stacks, Queues and Linked Lists in Chapter 3, Sequences in Chapter 4, Trees in Chapter 5 and Priority Queues in Chapter 6. Chapter 7 "Dictionaries" fails to consider the new Java 1.2 collections API when discussing the Java Dictionary interface, revealing something about the author’s intent to be as language-independent as possible, using Java primarily because it is realtively easy to learn. Chapter 8 covers Sorting, Sets and Selection, Chapters 9 and 10 look at Graphs and Weighted Graphs, respectively, and Chapter 11 takes a look at Strings as they relate to character sets. The chapter covers regular expressions, but I found the coverage to be less than satisfying.

The more advanced topics start with a look at "Fundamental Techniques" in Chapter 12. These techniques are instructive, exploring methods like "Divide and Conquer", "Dynamic Programming" and "The Greedy Method". The chapters that follow use these techniques to apply heuristics to things like "Balanced Search Trees" in Chapter 13, and "Multi-Dimensional Search Trees" in Chapter 14. For those who work with user interfaces and geometry, Chapter 15 "Computational Geometry" will be of special interest, covering useful algorithms rarely given any coverage. The final Chapter (16), "Caches and Disks" spends about 20 pages looking at disk-based solutions, but doesn’t talk about B-Trees or more advanced disk-based hashing techniques, limiting the discussion to simple searching and sorting.

For the mathematically inclined, there is an appendix which lists a "Useful Mathematical Facts". Average readers may find the level of mathematics tedious to read about. For students unfamiliar with Java, Appendix A provides a nice primer/tutorial which is probably sufficient to work along with the book. I found the number of examples limited, through there is an accompanying web site which provides additional support for instructors. For students of life (as opposed to school addendees), the source code is provided online.

This is not the best Data Structures and Algorithm book I’ve read, but it does a resonable job of covering the issues, in some cases more comprehensively than most pragmatic programmers really need. If you need a solid foundation, this book is strong on supporting arguments and algorithm analysis. If you need a pool of algorithms for production work, you may want something more accessible. If you’re a student and the course you’re taking uses this book, its generally pretty good, so you don’t need to hire an interpreter. There’s something to learn for virtually any programmer in these pages, although the close to $70 price tag is probably hard to justify.