This course aims to be an introduction to algorithm theory, a discipline that goes hand-in-hand with computer programming, but rather focuses on problem-independence, abstracting away concerns about control strategy and target programming language. Given the growing need for computational power, the importance of correct, efficient, robust and reusable algorithms cannot be underestimated. During the lectures, you will learn about several fundamental algorithm design paradigms, such as backtracking, brute-force, divide and conquer, greedy and simple recursive algorithms, keeping our eyes peeled on applications to fast sorting, searching and multiplication. You will see how different problems call for different data structures (e.g., hash tables, heaps, lists and trees), and how their time and space complexity vary by preferring one over the other. We investigate how social networks rely on graph algorithms to help connect you with your friends or to find the nearest place to eat out. Finally, we will see what our world would be like if a computer could just ‘flip coins’.
Module Leader:Norbert Pintye