Inhalte: Es werden Grundlagen der imperativen und objektorientierten Programmierung vermittelt. Programmiert wird in Java und/oder Python. Verschiedene Entwurfsparadigmen für Algorithmen (z.B. Teile & Herrsche, Greedy, dynamische Programmierung, Backtracking) werden im Zusammenhang mit grundlegenden graphentheoretischen Algorithmen vorgestellt. Dies wird verbunden mit der Effizienzanalyse der Algorithmen. Weiterhin werden der Entwurf und die effiziente Manipulation von Datenstrukturen (Stack, Queue, Heap, Dictionary) behandelt.