Pre- & Post-Order: Wichtig für Topologische Sortierung (umgekehrte Post-Order).
Kantenklassifizierung: Tree edges, Forward edges, Back edges (Indikator für Zyklus!), Cross edges.
Kürzeste Wege (Gewichtet)
Dijkstra:
Voraussetzung: Keine negativen Kantengewichte.
Funktionsweise: Greedy mit Priority Queue (Relaxation der Kanten).
Laufzeit: O((∣V∣+∣E∣)log∣V∣).
Bellman-Ford:
Erlaubt negative Kanten, erkennt negative Zyklen.
Funktionsweise: ∣V∣−1 Runden Relaxation aller Kanten..
Laufzeit: O(∣V∣⋅∣E∣).
6. Minimale Spannbäume (MST)
Konzepte:
Schnittprinzip (Cut Property): Die leichteste Kante, die aus einem Schnitt (Subset) herausführt, ist sicher im MST.
Unterschied zu kürzesten Wegen (Dijkstra).
Algorithmen:
Kruskal: Sortiert Kanten aufsteigend, fügt hinzu, wenn kein Zyklus entsteht (nutzt Union-Find). Laufzeit O(ElogE).
Prim: Wächst von einem Startknoten aus (wie Dijkstra, aber Distanz ist nur Kantenlänge, nicht Pfadsumme). Laufzeit O((V+E)logV).
Boruvka: Verbindet Zusammenhangskomponenten, indem für jede ZHK die billigste ausgehende Kante gewählt wird. Halbiert Anzahl ZHKs pro Runde. Laufzeit O((V+E)logV).
7. Dynamische Programmierung (DP)
Das 5-Schritte-Schema:
Dimension/Parametrisierung definieren.
Teilproblem definieren (DP-Tabelle Bedeutung).
Rekursionsformel (Übergang) aufstellen.
Berechnungsreihenfolge & Base Case festlegen.
Lösung extrahieren und Laufzeit bestimmen.
Konzepte: Memoization vs. Bottom-Up, Rückverfolgung für Lösungskonstruktion.
Wichtige Beispiel-Probleme (Muster kennen!):
Jump-Game: Min. Sprünge zum Ziel (1D Array).
Längste gemeinsame Teilfolge (LCS):2D Tabelle, Vergleich von zwei Strings.
Editierdistanz: Min. Operationen um Strings umzuwandeln (Einfügen, Löschen, Ersetzen).
Teilsummenproblem: Kann Summe S mit gegebenen Zahlen erreicht werden? (Boolesche Tabelle).
Ticket Shop / Coffee & Tea: Varianten von Optimierungsproblemen.