Beginning Algorithms Paperback – Nov 7 2005
Customers Who Bought This Item Also Bought
No Kindle device required. Download one of the Free Kindle apps to start reading Kindle books on your smartphone, tablet, and computer.
To get the free app, enter your e-mail address or mobile phone number.
From the Back Cover
A good understanding of algorithms, and the knowledge of when to apply them, is crucial to producing software that not only works correctly, but also performs efficiently. This is the only book to impart all this essential informationfrom the basics of algorithms, data structures, and performance characteristics to the specific algorithms used in development and programming tasks.
Packed with detailed explanations and instructive examples, the book begins by offering you some fundamental data structures and then goes on to explain various sorting algorithms. You'll then learn efficient practices for storing and searching by way of hashing, trees, sets, and maps. The authors also share tips on optimization techniques and ways to avoid common performance pitfalls. In the end, you'll be prepared to build the algorithms and data structures most commonly encountered in day-to-day software development.
What you will learn from this book
- The basics of algorithms, such as iteration and recursion
- Elementary data structures such as lists, stacks, and queues
- Basic and advanced sorting algorithms including insertion sort, quicksort, and shell sort
- Advanced data structures such as binary trees, ternary trees, and heaps
- Algorithms for string searching, string matching, hashing, and computational geometry
- How to use test-driven development techniques to ensure your code works as intended
- How to dramatically improve the performance of your code with hands-on techniques for profiling and optimization
Who this book is for
This book is for anyone who develops applications, or is just beginning to do so, and is looking to understand algorithms and data structures. An understanding of computer programming is beneficial.
Wrox Beginning guides are crafted to make learning programming languages and technologies easier than you think, providing a structured, tutorial format that will guide you through all the techniques involved.
About the Author
Simon Harris started writing animated sprites on a Commodore 64 in primary school. After a break of many years, he taught himself 80x86 and IBM System/370 assembler and started working professionally. Since then he has moved from assembler to C, C++, and, of course, Java. He believes a fundamental understanding and appreciation of algorithms is essential to developing good software; and since starting his own company, RedHill Consulting, he has managed to make a living discussing and demonstrating software development practices and techniques to anyone who will listen.
In his more than 15 years of development experience, James Ross has ranged from building packaged products to large enterprise systems to research into compilers and languages. In recent years, he has become a code quality fanatic and agile methods specialist, particularly with test-driven development. He works as a consultant for ThoughtWorks, the world’s leading agile software development company. He is currently leading the development of a large J2EE project in the insurance industry in Melbourne, Australia. He lives with his wife and family in Melbourne.
Inside This Book(Learn More)
Most Helpful Customer Reviews on Amazon.com (beta)
If you are already conversant in Java, that's great, because the book offers an indepth guide to several crucial classes. But what if you program in C++ or C#? In the Standard Template Library for C++ and in the default libraries for C#, you should be able to easily find the equivalent classes to those used in the text. Of course, you will then have to rewrite the examples that use those classes. Straightforward. None of the examples are long. And since this book is fundamentally about computations, and not about making a user interface, the syntax for using the system classes is roughly the same, across these languages. Also, some examples might use the object oriented property of extending a base class. As you can do this in C++ and C#, there is no problem here either. A problem might have arisen if the authors had used C++ with multiple inheritance, because Java and C# forbid this. But since they didn't, it's not an issue. As an OO language, Java is actually pretty minimal.
Another way of looking at the topic of your language is that if you don't use Java, you can potentially use the book to better effect. Because you can't simply copy the Java code, then you have to actually get an accurate understanding of what it is doing, before manually recoding.
The text covers the most common structures and methods for using those structures, that you are likely to need. Lists, stacks, iteration, recursion, queues, sorting, searching, hashing etc. Some of these subjects have immense depth. For example, sorting and searching takes up one volume of Knuth's "Art of Computer Programming". But that is a very advanced text, and ill suited to someone new to the basic algorithms. Harris and Ross give you enough complexity to be challenging and understandable. While perhaps giving some indications as to more intricate underlying issues.
As alluded to above, if you proceed through the text, several important Java classes are used. Vector, List, Hashtable, HashSet and others. You would be well advised to gain fluency in these, as the book shows how they form the basis of much computational work. You also get an appreciation for the beauty of Java, inasmuch as it comes with those classes. While you could certainly write these from scratch, not having to do so is a huge timesaver. And by using the system classes, you are assured of very stable, highly debugged classes.
Contents: Getting Started; Iteration and Recursion; Lists; Queues; Stacks; Basic Sorting; Advanced Sorting; Priority Queues; Binary Searching and Insertion; Binary Search Trees; Hashing; Sets; Maps; Ternary Search Trees; B-Trees; String Searching; String Matching; Computational Geometry; Pragmatic Optimization; Further Reading; Resources; Bibliography; Answers to Exercises; Index
Harris and Ross take you through the basic programming algorithms using Java as the base language. Rather than just tell you "use this Java class to do a Hash", they explain the underlying concept and then have you build an implementation of that concept in code. After you've taken the time to write the methods and classes by hand, you'll end up with a pretty complete understanding of that algorithm in a way that just using provided classes can't offer. Another commendable point in this book is that they start off each algorithm coding exercise by building unit tests first. That way, you can be assured that the code you write does everything it's supposed to do, and further tweaks to improve the logic don't lead to the introduction of bugs. Very solid approach...
I will end up keeping this book around for a couple of purposes. First, I'm sure to end up referring to it when I need to understand a certain fundamental like Soundex or searching. I'll get more out of this book and it's focus on practicality than I would out of some academic treatise on the subject. And second, if I have to code something related to one of these algorithms, I'll have some good example code to pull from. Can't ask much more from a book than that...
If this is a weak point in your programming portfolio, getting a copy of this book to study and reference would be a good investment in your career.
The end result is so good that the "how it works" sections who are meant to explain the code are almost always unnecessary.
So this book can also be useful in teaching you how to write in a clear and elegant style. Final words, if you are looking for something that will introduce you to mathematical analysis of algorithms and their efficiency look elsewhere as this title contains none of that.