Graphs play a central role in the world of algorithms. For example, navigation devices use an algorithm to compute shortest paths on a graph to answer a route query. Many planning and assignment problems can also be easily modeled as problems on graphs. In principle, it is true that a great many problems can be thought of as graph problems, so designing efficient algorithms for such problems is an important subfield of theoretical computer science.
In this lecture we will enter the world of graph algorithms. On the one hand, we will learn about important algorithmic problem classes on graphs and efficient algorithms to solve them. Among other things, we will look at finding shortest paths, flows, cuts, separators, and matchings in graphs. Algorithms for these problems have a wide variety of applications, making them an important and useful tool for any algorithmicist. On the other hand, we will also study how constraints on the graphs at hand affect the complexity of the problems and their algorithmic solution. For example, many algorithmic problems are more efficiently solvable on trees and planar graphs (i.e., graphs that can be embedded in the plane without intersection) than on general graphs. We will also explore some properties of graphs that we can exploit specifically for designing efficient algorithms. For example, trees and planar graphs have small separators (sets of nodes whose removal causes the graphs to decompose into multiple context components), which helps design efficient divide & conquer algorithms.
The goal of the lecture is the development and training of a structured approach to algorithmic problems on graphs. In doing so, we will jointly develop efficient graph algorithms with appropriate data structures, prove their correctness, and analyze their resource requirements (runtime and memory). In addition, the lecture will highlight special graph classes and other important concepts in graph theory and their impact on the world of algorithms.