Das Anfangsthema durfte gewählt werden. Hier: Graphen bzw kürzeste Wege. 1. Kurze Vorfragen Was ist denn ein Graph? --> Kurze Defintion (Knoten und Kanten, gerichtet/ungerichtet) Definition von kürzesten Wegen --> auf Gewichte der Kanten eingehen, Arten von kürzesten Wegen aufzählen (wenigste Kanten, niedrigstes Gewicht) Darauf Frage, welcher Algorithmus sich für wenigste Kanten eignet --> Breitensuche 2. Kürzeste Wege Handsimulation Dijkstra an gegebenem Graphen durchführen --> Tabelle aus Knoten + dist-/parent-Werte aufzeichnen und eintragen so wie in den Übungen. Dazu am besten die IndexPQ, in der sich gerade die Knoten befinden. Dazu die Frage, warum IndexPQ und nicht PQ bei Dijkstra --> Ändern von Schlüsseln zur Neusortierung bei PQ nicht effizient, bei IndexPQ schon 3. Minimale Spannbäume Was ist ein (Minimaler) Spannbaum?--> Definition Handsimulation Minimaler Spannbäume --> 3 verschiedene Graphen in verschiedenen Zuständen und es sollte entschieden werden, welcher von Prim oder Kruskal herrühren könnte (oder beiden oder keinem) und warum --> kurze(!) Erklärung, wie die beiden funktionieren, als Begründung. 4. Dynamische Programmierung Zu einem gegebenen Problem eine OPT-Funktion aufstellen (dazu kurz erklären, wieso man sie so aufstellt) Zusammenfassung: - Algorithmen: Handsimulationen, Laufzeiten, welche Datenstrukturen (und warum) - Wichtige Prinzipien(zB. DynProg, Backtracking)/Definitionen wichtiger Begriffe(Graphen, Zsmhangskomp., Spannbaum) müssen bekannt und erklärbar sein - kleine Probleme müssen anhand der wichtigsten Prinzipien lösbar sein (zB. OPT-Funktion aufstellen, Lösungsansatz zu einem Problem mittels Backtracking aufstellen) - Laufzeiten von kleinem Code bestimmen können - Hashing: Tabelle mit Sondierung ausfüllen - Alle Aufgaben bewegen sich in einem sehr machbaren bis leichten Bereich, wenn man sich genügend mit den jeweiligen Themen beschäftigt hat