====================
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 on 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 I most often used to prepare the content of
this course. None of them covers everything however. The first two
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 courses on platforms such as
`Coursera <https://www.coursera.org>`_ or `EdX <https://www.edx.org>`_
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 <www.geeksforgeeks.com>`_ or
`TutorialsPoint <www.tutorialspoint.com>`_. Please keep a critical eye
as they may contain mistakes (as does this course).


Programming Platforms
=====================

Finally, there are many web sites such
`HackerRank <http://www.hackerrank.com>`__ or
`LeetCode <https://leetcode.com>`__ 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.
