In the last century some brilliant brains invented machines to perform lengthy and cumbersome calculations for us (did you know that the word “computer” originally referred to a profession?!). Nowadays, we expect computers to be accurate, effective, and energy- conscious at the same time, yet we usually do not explain (or even truly grasp) the meaning behind the many fancy sounding phrases such as a “fast machine” or an “efficient performance”. While for most people the very concepts of “algorithms” is bound to be attached to the idea of computers and computer programming, in truth the field of algorithm theory has history dating back hundreds of years, in which the desire to perform tasks as fast, cheap, or simple as possible long preceded the birth of the first digital computers.
The Algorithms 1 module has a double goal; it discusses important theoretical concepts of algorithm theory such as running time, effectiveness, complexity, and memory usage. At the same time the module intends to present some of the most classical and most widely used algorithmic problem solving methods (recursion, dynamic programming, graph search algorithms). The classes will discuss effective solutions for real-life problems such as how can we optimise our travel costs by stopping at the right gas stations, or how should we schedule construction work where the completion of certain tasks must precede the kick-off of others.
The classes in Algorithms 1. will be heavily discussion-based. We will study different approaches to numerous algorithmic problems, compare their performances, and highlight their pros and cons. The module will provide students with a solid understanding of effective algorithms and will enable them to use the discussed classical methods to address various real- life problems.