Course at the University of Auckland.
https://www.cs.auckland.ac.nz/compsci320s2c/
Algorithmics is the systematic study of the design and analysis of algorithms. It deals with such fundamental questions as: How do we go about designing an algorithm for a given problem? Is the algorithm correct? Does it perform efficiently? Is it the best possible for the job? Is there any good algorithm for this problem?
It has been said that algorithms form the soul of computer science. Certainly the study of algorithms is a fundamental activity of a computer scientist. It is also very useful for those interested in programming competitions and getting past the interview process at companies like Google!
In this course we study fundamental design paradigms: greedy algorithms, divide-and-conquer, dynamic programming, and exhaustive search. We focus on methods for developing algorithms which are both correct and efficient. We analyse the efficiency of algorithms so that we have a basis for deciding which algorithm is best for the job. Finally we discuss limits on the power of computers by showing that there are many problems where an efficient solution is unlikely to exist. These limits are provided by the theory of NP-completeness.
You should read (at least) one of the following textbooks for the course:
- S. Dasgupta, C. Papadimitriou and U. Vazirani: Algorithms (1st Ed), 2008.
- J. Kleinberg and E. Tardos: Algorithm Design, (Addison Wesley 2006).
- G. Brassard and P. Bratley: Fundamentals of Algorithmics, Prentice-Hall, 1996.
- T.H. Cormen: Algorithms Unlocked (ebook) , 2013
- J. MacCormick: Nine algorithms that changed the future: The ingenious ideas that drive today's computers, 2012.
- S. Skiena: The Algorithm Design Manual (ebook), 2009.