The standard textbook recommendation for this course is Prof. Jeff Erickson’s book, simply titled “Algorithms”. Prof. Erickson spent his sabbatical putting together a textbook that offers a guide to the most useful algorithmic methods and principles. His tome has been updated many times throughout the decade(s) with numerous additional chapters, including notes on computability, which is a big part of this course. It is a pleasure to read, informative and at times humorous, all the things Prof. Erickson is as a professor.
That being said, one of my pet peeves is people that argue that one resource is the only one everyone should use. If you are basing all your work/knowledge on a single resource, you are a fool. All it takes is for that author to make one typo, and that error will be propagated into all your work (yes, I have seen this). Not only that, but different authors speak different languages and, therefore will be appreciated by different audiences. Scientists, engineers, and mathematicians all have different priorities/points-of-view, and it is best to find resources that match your own educational “language.”
Personally, I use a variety of texts when developing course content. For ECE374 in particular, because there is such a variety of material, I regularly use five main textbooks for the majority of the content and I would like to share those texts with you:
Here are some brief thoughts about each of these textbooks:
-
Introduction to the Theory of Computation by Michael Sipser - This is the definitive text on computability. It has been around forever and present computability proofs in a concise manner. By far my favorite book for the first third of the course.
-
The Art of Computer Programming by Donald E. Knuth - If there was a god of Algorithms, even he would defer to Donald Knuth. Prof Knuth has won pretty much every computing award there is (including the Turing award in 1974), he is the creator of LaTeX and has made numerous contributions across the field of theoretical computer science. Most importantly he’s spent the last six decades collecting and analyzing computer algorithms in his multi-volume work, The Art of Computer Programming. This book pretty much contains all the fundamental computer science knowledge there is and can answer any question you may have about computing. The one “drawback” is that it is a tough read. It is more of encyclopedia than textbook and as such isn’t super helpful to beginner programmers. But any list of top algorithms textbooks must include Knuth’s work at the top.
-
The Algorithm Design Manual by Steven S. Skiena - My personal favorite algorithms textbook. This text is focused on giving you intuition on all algorithmic principles you’ll likely encounter in the future. My favorite part of this book are the “War Stories” where Prof. Skiena describe a humorous problem/story related to the algorithmic principle being discussed. It is funny, insightful and a very easy read. Highly recommend it.
-
Algorithms by Robert Sedgewick - A bit more limited in scope than the other algorithms texts, this book focuses on applied algorithms in programming. It focuses on teaching you algorithmic applications using Java and the problems are more programming-oriented. Good for leetcode practice.
-
Algorithms by Thomas Cormen et al. - By far the most common algorithms textbook used in universities. It is comprehensive and analyzes algorithms from a theoretical basis. It is not as easy a read as Sedgewick’s book, but it is more comprehensive, has deeper theoretical analyses, and is pretty much the gold standard for an Algorithms textbook.
I have updated each of the lecture notes pages with references pointing to which chapters of the above texts match closest with the lecture subject. I hope this can help those of you who were looking for additional materials.