The 'go to' book for algorithms for computer science
356140
I was first introduced to an earlier edition of this book when I was a computer science grad student back in the early 90's. My wife use it as her primary algorithms textbook as an undergrad in computer science in the early 00's. When I was looking to bone up on algorithms, I picked it up again.

There are a few books that are fantastic references for their area. This is the 'go to' book for me for fundamental computer science algorithms. I've got a PhD now and I still use this as a distilled location for algorithm options, if I don't know the exact algorithm name to look it up online (e.g. wikipedia).

Like any textbook, parts of it are dense. Heck, all of it is dense. But, I find it readable if you invest the time in it.

Highly recommend this as a reference work for your CS library.
3956945
This is a very good book. It is also a tough book (unlike the author's books on Python and Ruby). This would be an excellent second book on C -- it has a terse fast-moving take-no-prisoners style that will be useful for someone who has already read some basic book on the subject (at least to the level of rudimentary coverage of pointers). If you're using this as your introduction to C, make sure you have a more elementary book to use for reference.

Shaw covers the basics of the language (and beyond) -- but his approach is sophisticated and relatively terse. The programs are sophisticated from the outset. He get to double linked lists and sorting algorithms on them. But he also covers so much more -- makefiles from the beginning, use of the debugger, hashmaps, binary search trees, stacks and queues, string algorithms, common undefined behaviour -- and I'm still leaving out many of the more advanced projects. This book is for serious coders.
848282
Cutland's book "Computability: An Introduction to Recursive Function Theory" is without doubt the best introduction to recursion theory available on the market. Elementary Recursion Theory is a logician's expression for theoretical computer science, with an emphasis on negative results, i.e. what computers cannot do. Cutland could have exploited Church's Thesis in the manner of H. Rogers, and this could have perhaps make the book readable for a larger public from the human science. Instead Cutland defines the computable functions in a rather standard way through the use of the Register Machine. Then all the basic chapters of recursion theory are introduced, including a gentle explanation of Kleene second recursion theorem, on recursive operators, on formal arithmetic and Godel's incompleteness theorem, Post creative and productive sets. It contains a chapter on Blum complexity theory, with the gap theorem and Blum's speed-up theorem. The book is a must for those who want to penetrate this fundamental subject.
2143031
This is one of a few computer science books that remains rather

special to me. I began learning about LALR(1) parsing and code

generation from this book. It and a small book on YACC were

enough to enable me to write a compiler for a 4GL. I have since

seen many other good (and not so good) books but this is a

personal favourite. It is full of practical advice while

maintaining a high standard of scholarship and provided a good

introduction to the subject.
3775997
These books were recommended by a professor of a data structures class I took as the kind of books that were worth keeping.

The author was very thorough when he wrote this book, even to the point that he'd has a classification scheme for each question.

In addition to that, I don't think I've found a typo in this book... ever. With that said, I've read the first book thoroughly but haven't read much of the second as graphing algorithms are not as important to me.

I'd recommend this book to anyone with an interest in algorithms and mathematical maturity.
1281720
This is certainly the best book I have ever seen on computer science and all its applications in math, science, and just about everything!
Clifford A. Pickover starts with a few chapters on the Top 10 Scientists and what would happen if an IBM computer was placed in the year 1900. He then goes on to talk about the applications of computer science on almost every science, with a few pages on every subject. His book is 63 chapters long - among them: "The World of Chaos," "Twisted Mirror Worlds," "The Moire Effect: Practical and Pictorial Patterns," and "Visualization of the Gleichniszahlen-Reihe Monster."
The book is well-organized into 10 Parts, and each chapter within itself contains an introduction, description, and even exercises for the reader. Overall, the book is fun to flip through, and on lonely Tuesday evenings, it's great just to open the book to a random page and read.
816058
Sedgewick's 'Algorithms in C' is undeniably the best book for beginners studying about algorithms and data structures. The text is clear, lucid, and the programming examples are very well documented. The exercises and problems stimulate thoughts and help in developing a better understanding of the subject. All the key aspects of the subject are sufficiently addressed, and discussed in the best possible way. It's the code in the book that I love the most, it can be compiled on almost any compiler without almost any change being made to it. I would strongly recommend this book as a textbook to all beginners embarking on a study of data structures and algorithms.
1103160
This was an excellent book to accompany the Systems Programming class at SUNY Oswego. I would highly recommend it to anyone looking to gain deeper insight into low level algorithms and systems programming. This book might be a bit challenging for undergraduates but it provides you with a solid understanding of how computer systems work, which in my opinion in necessary for any computer scientist.
2106134
Here is a book that has it all: a complete summary of theoretical computer science; well organized, detailed proofs; and quite understandable for the novice.  This book should become the standard in its field.
2961582
This book provides a very accessible and contemporary treatment of optimization.  Of particular interest is the problem solving orientation of the book as opposed to a tool-based approach to optimization and heuristics.  The writing style of the book makes the book very interesting and readable - a rare thing to say about technical books!  I used this book in a Master's class on Heuristics (Systems Engineering, University of Virginia) and received the most positive textbook reviews I have seen in my fifteen years of teaching.  The book is an excellent choice for a course on heuristics, mathematical modeling, optimization, etc., and could be used in an advanced undergraduate class or a graduate class.  In addition, the book is ideal for practitioners who may not have had exposure to modern heuristics in their education or practice, or those who want to get updated on the latest developments in the field.
2941009
Kernighan and Ritchie's book&nbsp;<a data-hook="product-link-linked" class="a-link-normal" href="/The-C-Programming-Language/dp/0131103628/ref=cm_cr_arp_d_rvw_txt?ie=UTF8">The C Programming Language</a>&nbsp;is the best selling computer science/software book of all time. There are many reasons for the popularity of K&R (as the book has become known). One of those has to do with the structure of the book. Each element of the C programming language is clearly described.

Jason Swartz used a similar approach in his book Learning Scala. He clearly describes the elements of Scala, using the Scala interpreter. Like the challenge of eating an elephant, this allows the reader to learn a complex language, one bite at a time. The organization also makes the book easy to absorb, one chapter at a time, so you can read it in spare moments over a week or two. Each chapter ends with interesting exercises which help solidify what you have learned reading the chapter.

When using a new programming language I always need a reference that I can fall back on ("How do you define an array in Scala?) The organization of Learning Scala also lends itself well to being a reference as you write larger codes.

So why might you want to learn Scala? Scala runs on the Java Virtual Machine which means that you have access to the vast Java libraries from Oracle, Apache and elsewhere. However, Scala is a newer language with less attachment to existing software. This has made the designers free to encompass many new programming language concepts in Scala. The compiled/interpreted nature of Scala has also allowed it to be used in some of the leading edge "big data" frameworks like Spark (<a data-hook="product-link-linked" class="a-link-normal" href="/Learning-Spark-Lightning-Fast-Big-Data-Analysis/dp/1449358624/ref=cm_cr_arp_d_rvw_txt?ie=UTF8">Learning Spark: Lightning-Fast Big Data Analysis</a>)

I have been using the R statistics language heavily for the last few years. One of the things that I like in R, which I miss in Java, is the ability to interactively try things out in R. This allows you to interactively experiment as you develop a code. This can shorten development time and help develop more reliable code.

Learning Scala is focused on using Scala interactively. A minor criticism is that there is only tangential discussion of how interactive experimentation can be used in combination with the development of large compiled Scala applications. At least to me, this is a core attraction of Scala.

Jason Swartz uses the intelliJ IDE for development. I had a really bad experience with the licensed version of intelliJ for developing Grails/Groovy applications. I've used Eclipse successfully for Java, Grails and Scala. The Eclipse environment seamlessly supports both compiled and interactive Scala development. From my point of view, this would have been a better choice in the book than intelliJ.

These criticisms are really minor. This is a great book for learning Scala and I highly recommend it.
4610469
I'm a recent Ph. D. graduate in Operations Research and during the last 4 years this book has been one of my main tools in both my studies and academic research. This book is a comprehensive introduction to nonlinear programming and is divided in two parts.; Part I covers the main theoretical considerations and Part II covers many important optimization methods. I would say that the main feature of this book is that it manages, in a clear  and concise way, to take the reader from the very basics of optimization to advanced and current topics of nonlinear optimization. In particular, it covers the theory and methods of convex optimization of non-differentiable functions where the important concepts of subdifferentials and conjugate duality come into play. From my opinion, these are necessary tools for any aspiring researcher in optimization theory and I haven't seen yet a more understandable and concise presentation of these subjects. Another area where this book shines is in it's examples and applications. Contrary to many mathematical introductory books, I would say that every example of this book is non-trivial and of some theoretical or applied value. It is in these examples and applications where the reader can see the real value of the developed theory and methods. Believe me when I say that more than once you'll be referring back to the examples to get ideas for even your own research.  All said, I really enjoyed this book and value highly it's contents.
3867245
In summary, I strongly recommend this book for anyone who wants to excel in interviews in top software companies.

This book has extensive interview problems with detailed solutions. It covers basic to advanced algorithm solving techniques. The book is very comprehensive and detailed - it is by far the largest collections of such problems that I know of. I really liked the fact that most problems have detailed programs which I could download complete versions of. The figures were also very helpful for me to understand some of the harder concepts.

Materials in later chapters which contain dynamic programming and graph algorithms make this book stands out among other interview books. These materials especially help readers to think critically when facing difficult programming problems with efficiency constraints.

I also purchased "Cracking the Coding Interview" for preparing for my interviews. Compared to that book, I found Elements of Programming Interviews to be better preparation for the questions I was asked at the on-site interviews. Cracking the Coding Interview had more basic questions, the kind I was asked in phone screening and on-campus interviews.

I am very fond of algorithms, and, just like Keith wrote in his review, Elements of Programming Interviews nicely supplements traditional algorithm textbooks which lack of practical examples.
2404593
This book presents good and useful algorithms. But need high-level maths to  understand the whole book thoroughly, which requires quite a bit time. But  unlike many other books which can be put away after reading,this book  presents classcial and useful algorithms, it is quite worthy to read it and  keep it on the table.
2138846
The attached review contained in the 2009 of Journal of the American Statistical Association (Volume 104, Issue 488, Page 1726) of he book Permutation Methods-A Distance Function Approach, 2nd Ed..
Permutation Methods: A Distance Function Approach (2nd ed.).
Paul W. MIELKE JR. and Kenneth J. BERRY. New York, NY: Springer,
2007. ISBN 978-0-387-69811-3. xvii + 439 pp. $99.00 (H).
This is a very well-written text that extensively covers permutation-based
tests in a general framework. It has been revised and extended by nearly
100 pages since the 2001 edition. There is increased emphasis on the geometrical
perspective of the distance functions which lie at the heart of permutation
methods. The authors illustrate the robustness of the regular Euclidean metric
over the (nonmetric) squared Euclidean distance that is commonly used.
Multiresponse permutation procedures (MRPP) are introduced as a generalization
of ANOVA that accommodates both univariate and multivariate data.
Numerous examples are given showing the wide applicability of MRPP: autoregressive
pattern detection; agreement measures for ordinal, nominal, and
mixed data; analysis of circular and spherical data; and generalized run tests.
Multivariate randomized block permutation procedures (MRBP) are described
and many examples are given of the types of problem that MRBP can solve.
Regression analysis and prediction are given a thorough treatment, and primary
focus is on MRPP analyses of least absolute deviations for multiple regression
under various experimental designs. Other chapters cover goodness-of-fit tests,
contingency tables, multisample homogeneity tests, and methods for combining
p-values.
This book is packed with real-data examples and dozens of simulation studies
exploring the properties of permutation-based tests and contrasting them
with their typical parametric "competitors." The authors do not shy away from
presenting the mathematical underpinnings of the methods, and do so in a very
transparent and easy-to-follow manner so there is sufficient detail to implement
the methods in your favorite software (although making such computationally
intensive procedures run optimally is by no means trivial). That is not
a concern if you are familiar with FORTRAN-77, as the authors have provided
over 100 FORTRAN programs and associated datasets for download in Unixcompatible
andWindows-compatible format. These well-commented programs
are briefly described in Appendix A with subsections organized by chapter.
A minor annoyance is that the organization of the downloaded file appears arbitrary
rather than grouped by chapter--at least for the Windows version I inspected.
Nonetheless, Permutation Methods is a superb book that is highly recommended.
J. Wade DAVIS
University of Missouri
402697
If you are a programmer who must work with calculation intensive algorithms, you will need a book such as this.  The chapters are well written and cover many subjects which are easily forgotten when not used often.  The section explaining the difference between precision and accuracy is quite good.

Also worthy of personal praise is the suggestion that piecemeal cubic spline approximations more accurately reflect abrupt (zonal) shifts in the data, better than do higher order polynomical approximations.

The book seems to cover most of the subjects that a non-specialist programmer might need, when confronted with a numerical methods prospect.  Topics include: matrix reduction, numerical differentiation and integration, truncated series approximations, curve fitting and fast fourier transforms to name a few.  It also deals extensively with the nitty-gritty of computing, from bits, bytes and numerical representations; to MatLab, MathCAD, and Fortran.
2501326
I most like the fact that a good number of problems reduced to NP-Complete or NP-Hard are listed.  I would like someday to see a compiled list of the reductions involved included in one text, but it's not likely that I ever will.  It would be nice to see an updated version, but this describes the theory very, very nicely.

This is a must have for any serious computer scientist.