Algorithms have existed, in one form or another, for as long as humanity has. During the second half of the 20th century, the field was revolutionised with the introduction of ever faster computers. In these lectures we discuss how algorithms are designed, how to evaluate their speed, and how to identify areas of improvement in existing algorithms.
An algorithm consists of more than just a series of instructions; almost as important is the memory structure of the data on which it operates. A part of the lectures will be dedicated to a discussion of the various ways one can store data in memory, and their advantages and disadvantages.