Computers are ubiquitous. Everyone uses computers and computer-based systems for many daily activities. Many computer applications are very user-friendly, meaning we can use them without understanding how they work, just as we can drive a car without knowing how the engine works. In many cases, however, knowledge of how the computer works, and what algorithms are operating behind the current application, can improve the efficiency of our computer use.
Traditionally, sophisticated innovative algorithms are taught only to students who have already acquired programming skills; such students can thus effectively understand the algorithms they encounter. It does not have to be that way, however. Many algorithms could be explained to computer users who have never programmed before. This idea prompted Thomas Cormen, one of authors of the most widely used textbook on algorithms [1], to write a version of his book for nonprogrammers.
The book starts with a description of what an algorithm is (chapter 1) and an explanation that running time is a reasonable measure of an algorithm’s effectiveness (chapter 2). In chapter 3, Cormen presents a natural algorithm for exhaustive search in linear time, which describes the act of looking for a document in an unsorted list. He gives the example of looking for books in a library to demonstrate that sorting (putting the books in alphabetical order) makes the search much faster. This leads the reader to understand the need for efficient sorting algorithms. The author describes natural sorting schemes such as selection sorts and insertion sorts, and shows (somewhat unexpectedly for non-computer science (CS) readers) that nonintuitive schemes such as mergesort and quicksort are much more efficient. These interesting results exemplify the numerous clever algorithmic tricks that exist, without which modern computer applications would be much less efficient or even impossible.
In chapter 4, Cormen shows that algorithms like mergesort are asymptotically optimal: their computation time cannot be drastically improved. Chapters 5 and 6 describe graph-related algorithms, used for finding the critical path (useful in manufacturing engineering), for example, or for finding the shortest path through a prescribed route. Chapter 7 lists several string-matching algorithms and how they are used in bioinformatics. Chapter 8 describes algorithms used in cryptography, both traditional cryptographic algorithms (private key) and the RSA algorithm for public key cryptography. Chapter 9 describes two algorithms used for data compression: the Huffman code and the Lempel-Ziv-Welch (LZW) compression scheme. The final chapter provides an overview of nondeterministic polynomial-time (NP) hard problems; efficient algorithms that solve all instances of these problems are only possible if P=NP.
The book uses only basic math and does not require any prior experience in computing or programming. It is well written, with a clear, concise, but colloquial style; well-explained practical applications; and numerous easy-to-trace examples of how each algorithm works. It is a perfect book for readers with no programming background who want to learn about algorithms in order to use computers better or who are simply curious about how computers work. These readers will definitely learn how to use computers more efficiently, and some of them may decide to gain a deeper knowledge of some of these problems. For that purpose, each chapter has a list of more serious and in-depth sources related to its topic.
Students and practitioners with programming experience will also benefit from this book. Even computing professionals will appreciate the clear descriptions of lesser-known algorithms such as LZW or string matching, although they may skip a few chapters on familiar subjects such as searching and sorting. Instructors can use excerpts from this book as interesting examples of creative algorithms for students who are just starting out in CS. Most readers will lament the lack of exercises--the book’s only (rather minor) drawback.
In short, this book is highly recommended for everyone.
More reviews about this item: Amazon