Elementare Graphenalgorithmen - Vorlesungsnotizen
Grundlagen und Definitionen von Graphen
Bedeutung von Graphen: Graphen sind fundamentale Strukturen in der Informatik und finden Anwendung in:
(Computer-)Netzwerken.
Darstellung von topologischen Informationen (z. B. Landkarten).
Darstellung elektronischer Schaltungen.
Vorranggraphen (Precedence Graphs) und Ablaufplänen.
Semantischen Netzen (z. B. Entity-Relationship-Diagramme).
Gerichteter Graph (Digraph):
Ein gerichteter Graph ist ein Paar .
: Eine Menge von Knoten (vertices).
: Eine Menge von gerichteten Kanten (edges).
Ungerichteter Graph:
Ein ungerichteter Graph ist ein Paar .
: Eine Menge von Knoten (vertices).
: Eine Menge von ungerichteten Kanten.
Für ungerichtete Kanten wird oft ebenfalls die Notation verwendet, wobei die Reihenfolge keine Rolle spielt.
Adjazenz: Ein Knoten ist adjazent zu , wenn eine Kante existiert.
Terminologie bei Graphen
Teilgraph (Subgraph):
Ein Teilgraph eines Graphen erfüllt:
(Grapheigenschaft).
Ein echter (proper) Teilgraph liegt vor, wenn oder .
Symmetrischer Digraph:
Ein Digraph heißt symmetrisch, wenn gilt: .
Jedem ungerichteten Graphen entspricht ein symmetrischer Digraph.
Vollständiger Graph: Ein Graph ist vollständig, wenn seine Kantenmenge maximal ist (d. h. jede mögliche Kante zwischen zwei Knoten existiert).
Transponieren eines Digraphen:
Das Transponierte eines Digraphen ist der Graph mit genau dann, wenn .
In ist die Richtung aller Kanten von umgedreht.
Pfade (Wege):
Ein Pfad der Länge von nach ist eine Folge mit , und
Die Länge ist die Anzahl der Kanten.
Leerer Pfad: Pfad der Länge .
Einfacher Pfad: Ein Pfad, bei dem alle Knoten für alle verschieden sind.
Erreichbarkeit: Knoten ist von erreichbar, wenn ein Pfad von nach existiert.
Zyklen:
In gerichteten Graphen: Ein nicht-leerer Pfad, bei dem Start- und Endknoten gleich sind. Eine Schlinge (self-loop) ist ein Zyklus der Länge . Ein Zyklus ist einfach, wenn alle Knoten außer Start/Ende paarweise verschieden sind.
In ungerichteten Graphen: Ein Pfad mit , und paarweise verschieden.
Ein Graph ist azyklisch, wenn er keine Zyklen enthält.
Fragen & Diskussion (Zusammenhang und Bäume)
Frage: Wie viele Kanten hat ein Baum (zusammenhängender azyklischer Graph) mit Knoten?
Antwort: .
Frage: Kann ein ungerichteter Graph mit Knoten und Kanten zusammenhängend sein?
Antwort: Ja.
Frage: Kann ein ungerichteter Graph mit Knoten und Kanten zusammenhängend sein?
Antwort: Nein.
Frage: Kann ein ungerichteter Graph mit Knoten und Kanten azyklisch sein?
Antwort: Nein.
Repräsentation von Graphen
Gegeben sei mit und .
Adjazenzmatrix:
Eine -Matrix .
, falls , sonst .
Bei ungerichteten Graphen ist symmetrisch ().
Platzbedarf: .
Adjazenzliste:
Ein Array der Größe enthält für jeden Knoten eine verkettete Liste aller ausgehenden Kanten.
Bei ungerichteten Graphen werden Kanten doppelt gespeichert (einmal für jeden Endknoten).
Platzbedarf: .
Graphendurchlauf-Strategien
Graphendurchläufe besuchen jeden Knoten und jede Kante genau einmal. Bei zyklischen Graphen müssen bereits besuchte Knoten markiert werden (Farben: WHITE = nicht gefunden, GRAY = gefunden/in Verarbeitung, BLACK = abgeschlossen).
Breitensuche (Breadth-First Search, BFS)
Strategie: Erforscht den Graphen schichtweise. Zuerst alle Nachbarn des Startknotens, dann deren Nachbarn usw.
Eigenschaften:
Besucht Knoten in der Reihenfolge zunehmender Kantendistanz zum Startknoten.
Verwendet eine FIFO-Warteschlange (Queue).
Zeitkomplexität: .
Platzbedarf: .
Tiefensuche (Depth-First Search, DFS)
Strategie: Geht so tief wie möglich in einen Pfad hinein, bevor Backtracking (Rückzug) stattfindet.
Implementierung: Erfolgt meist rekursiv (nutzt den impliziten LIFO-Stack).
Eigenschaften:
Wird für Erreichbarkeitsanalysen, Zusammenhangskomponenten und topologische Sortierung genutzt.
Zeitkomplexität: .
Platzbedarf: .
Zusammenhangskomponenten (CCs und SCCs)
Ungerichtete Graphen:
Zusammenhängend: Jeder Knoten ist von jedem anderen erreichbar.
Zusammenhangskomponente (Connected Component, CC): Ein maximaler zusammenhängender Teilgraph.
Lösung: Wiederholte Anwendung von BFS oder DFS findet alle CCs in .
Gerichtete Graphen:
Stark zusammenhängend: Jeder Knoten ist von jedem anderen erreichbar.
Schwach zusammenhängend: Der zugrunde liegende ungerichtete Graph ist zusammenhängend.
Starke Zusammenhangskomponente (Strongly Connected Component, SCC): Ein maximaler stark zusammenhängender Teilgraph.
Sharir's Algorithmus für SCCs:
Führe DFS auf aus. Speichere Knoten beim Abschluss (BLACK) auf einem Stack .
Transponiere den Graphen zu .
Solange nicht leer ist:
Nimm obersten weißen Knoten von .
Starte DFS auf von aus. Alle dabei erreichten Knoten bilden eine SCC mit dem Leiter .
Komplexität: Zeit , Platz .
Gerichtete azyklische Graphen (DAGs)
Definition: Ein Digraph ohne Zyklen.
Bedeutung: Entspricht einer partiellen Ordnung. Viele Probleme sind auf DAGs effizienter lösbar als auf allgemeinen Digraphen.
Kondensationsgraph: Ein Graph, dessen Knoten die SCCs eines Digraphen sind. Der Kondensationsgraph ist immer ein DAG.
Topologische Sortierung
Definition: Eine Zuordnung , sodass für jede Kante gilt: topo(v) > topo(w). (Hinweis: Je nach Definition kann auch topo(v) < topo(w) gelten; hier wird die Abschluss-Reihenfolge der DFS genutzt).
Eigenschaften:
Existiert genau dann, wenn der Graph ein DAG ist.
Algorithmus: Nutzt DFS. Die
topoNumwird beim Abschluss eines Knotens zugewiesen.Zeitkomplexität: .
Gewichtete Graphen und Kritische-Pfad-Analyse
Gewichtsfunktionen:
Knotengewichtet: .
Kantengewichtet: .
Ein knotengewichteter Graph kann in einen kantengewichteten transformiert werden, indem gesetzt wird.
Das Kritische-Pfad-Problem:
Gesucht ist der längste Pfad in einem gewichteten DAG.
Earliest Start Time (est(v)): Das Maximum der frühesten Endzeitpunkte aller Abhängigkeiten von . Ist , wenn keine Abhängigkeiten existieren.
Earliest Finish Time (eft(v)): .
Kritischer Pfad: Eine Folge von Aufgaben, bei denen jede Verzögerung direkt die gesamte Projektdauer (maximales ) verlängert.
Beispiel (Zeitplan):
Aufgaben: I (Aufwachen), A (Kleidung wählen), H (Duschen), B (Anziehen), E (Kaffee kochen), F (Toast machen), G (Saft einschenken), C (Frühstücken), D (Haus verlassen).
Pfadberechnung: (basierend auf den Beispiel-Dauern im Zeitplan).