Students learning Algorithms for the first time should never touch CLRS. It is the worst thing that a beginner can pick up. It is good as a reference text.<p>Beginners should start with this. This book "actually" teaches you how algorithms are designed and how to break down problems into chunks and solve them using induction/recursion.<p>Your mind will just be blown.
There is one book which is fairly recently published, and it is not known much.<p>The book is Jay Wengrow's <i>A Common Sense Guide to Data Structure and Algorithm</i> [0].<p>It is published by Pragmatic Programmers.<p>I have found it to be the greatest algorithm book for self-learners.<p>It actually teaches you in what scenarios you might use which data structures and so on. Very highly recommend. What algorithms stand for and when you'd use one over another. Has nice code snippets, exercises that makes the learning whole.<p>Another great algo book is DPV. This is math-heavy, but this book has a soul.<p>Among the famous and ubiquitous ones, I like Steven Skiena.<p>[0]: <a href="https://pragprog.com/titles/jwdsal2/a-common-sense-guide-to-data-structures-and-algorithms-second-edition/" rel="nofollow">https://pragprog.com/titles/jwdsal2/a-common-sense-guide-to-...</a>
I hate to throw shade on this, but look at theorem 2.1, proving by induction that x*n - 1 is divisible by x-1. The concluding sentence I believe mistakenly refers to the left hand term, when they intend to refer to the right hand term.<p>"But the left term is divisible by x - 1 by the induction hypothesis, and the right term is just x-1.".<p>I would spend many hours staring at that sentence wondering why I "just" did not understand, cycling through a whole range of feelings, years later to find out that there was likely a typographical error.<p>Additionally, many textbooks like this give a complicated expression and rather than reduce it mathematically, they expect the reader just to do this in their head and come to the conclusion that it is true.<p>Such things may seem like trivialities, and perhaps I am not the smartest math person around, but not paying attention to these subtle points can lead to deep frustration for the reader.
A book that has a similar style to this one (teaching algorithm design) and my personal favourite is Algorithmic Problem Solving by Roland Backhouse.<p>It just teaches algorithmic problem solving via math, but unlike mathy algorithmic books like CLRS, you only need algebra for this one.<p>I like how the book, IIRC, starts with invariants, providing the reader the foundational skill needed to notice underlying patterns and to decompose problems.
Overall seems like a great book. The hashing chapter is a bit half baked though. It claims without reservation that deletions simply cannot be efficiently implemented with linear probing. But there are at least two two efficient to do this (lazy deletions or just fix up the hash table), and both are worthwhile for students to know.
I took CS 445 Algorithms at Arizona with Udi Manber as the professor in the late 90s. Tough class. The .com boom was picking up at that point and I think he went to Yahoo shortly after.