Version: 0.3.38
Additional Resources#
There is a load of resources on this topic! Plenty of textbooks, online courses, tutorials, blog posts, … You name it. Here is a brief overview of what I have used.
Textbooks#
There are loads of books algorithms and data structures. It’s the core topic in Computer Science and this course is only an introduction: I am not presenting anything new or innovative.
I do not follow any textbook in particular, but there are a few “references” textbooks, whose authors are leading authorities. Feel free to check them if you need a different treatment: Depending on your preferences I would suggest one of these three books:
Goodrich, M. T., Tamassia, R., & Goldwasser, M. H. (2014). Data structures and algorithms in java. John Wiley & Sons. 6th edition.
Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to algorithms. : MIT press. 2nd edition.
Skiena, S. S. (2020). The algorithm design manual. : Springer International Publishing.
These are the three one I most often used to prepare the content of this course. None of them covers everything however. The two first one are available in The NTNU library in Ålesund.
Should none of these fit, below are other “famous” ones that could better suit your taste:
“The Art of Computer Programming” (aka TAOCP) by Donald E. Knuth. This is the reference. Four volumes so far. I found the treatment very detailed and oriented towards mathematicians. Beyond the scope of this course.
Knuth, D. E. (1978). The art of computer programming: fundamental algorithms. USA: Addison-Wesley Longman Publishing Co., Inc.
“Algorithms” by Robert Sedgewick is another well-known textbook, which is used in some very successful online courses. Does not cover our whole syllabus though
Sedgewick, R., & Wayne, K. (2014). Algorithms: Part I. Addison-Wesley Professional.
Online Courses#
There are also online course on platforms such as Coursera or EdX for instance. They can be a good alternative to my presentations. Check however that the content they cover matches the syllabus.
You will also find many online blog posts and tutorials such as GeeksForGeeks or TutorialsPoint. Please keep a critical eye as they may contain mistakes (as does this course).
Programming Platforms#
Finally, there are many web sites such HackerRank or LeetCode where one can practice solving problems. Many of these problems are direct applications of the concepts we will study. These web sites are great resources to gain fluency.