Qualifikationsphase Q1 · Themenfeld Q1.5 · Leistungskurs

Q1.5 – Graphen als Netzmodelle

Von linearen und hierarchischen Datenstrukturen zu Beziehungen, Wegen und Algorithmen in Netzen

Q1.4 hat gezeigt, wie Datenstrukturen Ordnung herstellen: Listen ordnen linear, Stack und Queue beschränken den Zugriff, Bäume ordnen hierarchisch. Q1.5 öffnet diese Ordnung zu netzartigen Strukturen.

Ein Graph modelliert Beziehungen, Wege, Abhängigkeiten und Nachbarschaften durch Knoten und Kanten. Damit daraus ein Informatiksystem wird, muss das Netz objektorientiert gespeichert und mit geeigneten Algorithmen durchsucht werden.

Leitfrage der Seite: Wie wird aus einem realen Netz ein berechenbares Modell – und welche Datenstruktur und welcher Algorithmus passen dazu?

Kerncurriculum
Kerncurriculum kompakt
Was in Q1.5 verbindlich ist – und was nur Ausblick bleibt

Q1.5 gehört zum Leistungskurs. Im Kern steht nicht nur, Graphbegriffe zu benennen, sondern ein Netzproblem so zu modellieren, dass es mit bekannten Datenstrukturen und Graphalgorithmen bearbeitbar wird.

Verbindlicher Q1.5-Kern
Bewusste Grenze

Dijkstra ist auf dieser Seite nur ein Ausblick für gewichtete Graphen. Der curriculare Schwerpunkt für kürzeste Wege liegt zunächst auf der Breitensuche in ungewichteten Graphen.

Arbeitsfokus
Beschreibe zu jeder Graphaufgabe zuerst das Modell, dann die Speicherform und erst danach den Algorithmus.
Vom Baum zum Graphen
Vom Baum zum Graphen
Graphen verallgemeinern die hierarchischen Strukturen aus Q1.4

Ein Baum aus Q1.4 ist bereits eine Struktur aus Knoten und Kanten. Er besitzt aber eine besondere Ordnung: Es gibt eine Wurzel, eine Hierarchie aus Eltern- und Kindknoten und in einem Baum meist genau einen Pfad von der Wurzel zu einem Knoten.

Ein Graph verallgemeinert diese Idee. Er braucht keine feste Wurzel, Knoten können beliebig viele Nachbarn besitzen, Zyklen sind möglich, und zwischen zwei Knoten können mehrere verschiedene Wege liegen. Zusätzlich können Kanten gerichtet sein oder Gewichte wie Entfernung, Dauer oder Kosten tragen.

Frage Baum in Q1.4 Graph in Q1.5
Wo beginnt die Struktur? bei einer Wurzel bei einem gewählten Startknoten
Wie viele Wege sind möglich? typisch ein eindeutiger Pfad in der Hierarchie mehrere Wege, auch mit Zyklen
Was fragt der Algorithmus? Welcher Teilbaum oder welcher Suchpfad? Welcher Weg durch ein Netz?

Damit bleiben Q1.3 und Q1.4 fachlich wirksam: DFS nutzt Rekursion, Stack-Prinzip und Backtracking; BFS nutzt die Queue; die Adjazenzliste nutzt eine Liste von Objekten und Referenzen.

Lernimpuls
Erkläre an einem Ordnerbaum, warum ein Baum für Hierarchie gut passt, aber ein soziales Netzwerk damit nur unvollständig modelliert wäre.
Modellbildung
Problem und Modellbildung: Realwelt → Graph
Abstraktion entscheidet, was im Modell zählt

Ein Navigationssystem muss in sehr kurzer Zeit eine sinnvolle Route von Start nach Ziel bestimmen. Eine reale Straßenkarte enthält dafür zu viele Details: Straßennamen, Gebäude, grafische Symbole, Flächen, Farben und Kontextinformationen. Für die Routenplanung reichen zunächst Orte, Verbindungen und gegebenenfalls Entfernungen oder Fahrzeiten.

Schematisches Straßennetz mit Orten A bis F als Realweltmodell.
Realweltnahes Straßennetz: viele Details, aber noch keine formale Datenstruktur.
Abstrahierter ungerichteter Graph mit den Knoten A bis F.
Abstraktion: Orte werden zu Knoten, direkte Straßenverbindungen zu Kanten.

Dasselbe Modellierungsprinzip trägt auch andere Anwendungen:

Anwendung Knoten Kanten mögliche Richtung / Gewichtung
Straßennetz Orte oder Kreuzungen Straßenabschnitte Einbahnstraße, Entfernung, Fahrzeit
Soziales Netzwerk Personen oder Profile Freundschaft, Kontakt, Follower-Beziehung gegenseitig oder einseitig, Stärke der Beziehung
Aufgabenabhängigkeiten Aufgaben "muss vorher erledigt sein" gerichtet, Dauer oder Aufwand
Weblinks Webseiten Links gerichtet von Seite zu Seite
Wissensnetz / Begriffsnetz Begriffe fachliche Beziehungen gerichtete Relation, Gewicht nach Relevanz
Stundenplan- oder Kursabhängigkeiten Kurse, Räume oder Zeitfenster Konflikte oder Voraussetzungen Konfliktstärke, Reihenfolge, Zeitkosten

Ein Graph entsteht also durch Abstraktion: Objekte oder Situationen werden zu Knoten, Beziehungen zu Kanten, Richtung zu gerichteten Kanten und Kosten zu Gewichten. Die Fragestellung entscheidet, welche Details weggelassen werden dürfen.

Arbeitsauftrag
Entscheide für ein soziales Netzwerk, was Knoten und Kanten sind. Begründe zusätzlich, ob die Kanten gerichtet oder ungerichtet sein sollten.
Grundbegriffe
Grundbegriffe und Eigenschaften
Begriffe aus Fragen am A-F-Graphen entwickeln

Die Begriffe werden nicht isoliert auswendig gelernt. Sie entstehen aus Fragen an denselben Beispielgraphen:

Ungerichteter Beispielgraph mit Knoten A bis F.
Ungerichteter Beispielgraph mit den Knoten A bis F. Er bleibt die gemeinsame Referenz für Begriffe, DFS, BFS und kürzeste Wege.
Leitfrage Begriff Deutung am Beispielgraphen
Welche Dinge werden modelliert? Knoten A, B, C, D, E und F sind Knoten.
Welche direkten Beziehungen gibt es? Kante A–B, A–C, B–D oder D–F sind direkte Verbindungen.
Welche Orte sind direkt erreichbar? Nachbarschaft Die Nachbarn von D sind B, C, E und F.
Wie viele direkte Verbindungen hat ein Knoten? Grad D hat Grad 4, A hat Grad 2.
Wie komme ich von A nach F? Pfad A → B → D → F ist ein Pfad von A nach F.
Wie lang ist der Pfad? Weglänge Im ungewichteten Graphen zählt die Anzahl der Kanten: A → B → D → F hat Länge 3.
Kann ich zum Start zurückkehren? Zyklus A → B → D → C → A zeigt eine geschlossene Runde.
Ist jede Stelle erreichbar? Zusammenhang / Erreichbarkeit Von A aus sind im Beispiel alle Knoten erreichbar; der Graph ist zusammenhängend.

Bei gerichteten Graphen wird zusätzlich zwischen Eingangsgrad und Ausgangsgrad unterschieden: Eingehende Kanten zeigen auf einen Knoten, ausgehende Kanten starten an diesem Knoten. Bei gewichteten Graphen zählt für Kostenfragen nicht nur die Anzahl der Kanten, sondern die Summe ihrer Gewichte.

Gerichtet vs. ungerichtet

Gerichteter Graph mit Pfeilen auf den Kanten zwischen A bis F.

Bei gerichteten Graphen haben Kanten eine Richtung. Aus A → B folgt dann nicht automatisch, dass auch B → A erlaubt ist.

Gewichtet vs. ungewichtet

Gewichteter Graph mit Kantengewichten zwischen A bis F.

Gewichte beschreiben Kosten wie Entfernung, Zeit oder Preis. Sie verändern die Frage nach dem kürzesten Weg, weil wenige Kanten nicht automatisch geringe Kosten bedeuten.

Arbeitsauftrag
Bestimme am A-F-Graphen die Nachbarn und den Grad von D. Notiere außerdem einen Zyklus, der D enthält.
Darstellungen und Speicherung
Darstellungen und Speicherung
Graphbild, Adjazenzmatrix und Adjazenzliste gezielt unterscheiden

Ein Graphbild ist für Menschen gut lesbar: Es zeigt Knoten, Kanten und Muster auf einen Blick. Ein Computer braucht dagegen eine Datenstruktur. Diese Datenstruktur muss festlegen, wie Nachbarn, Kanten und Gewichte gespeichert und von Algorithmen abgefragt werden.

Beispielgraph mit Knoten A bis F.
1) Graphbild: anschaulich für Menschen.
Adjazenzliste für die Knoten A bis F.
2) Adjazenzliste: zu jedem Knoten eine Liste der Nachbarn.
Adjazenzmatrix für denselben Graphen mit Knoten A bis F.
3) Adjazenzmatrix: Tabelle für Kantenabfragen.

Adjazenzmatrix

  • Zeilen und Spalten stehen für alle Knoten.
  • Eine Zelle beantwortet schnell: Gibt es diese Kante?
  • Der Speicherbedarf ist bei vielen Knoten hoch, besonders wenn nur wenige Kanten existieren.
  • Anschaulich und praktisch bei dichten Graphen mit vielen Kanten.

Adjazenzliste

  • Zu jedem Knoten wird eine Liste seiner Nachbarn gespeichert.
  • Sie passt gut zu dünnen Graphen mit vergleichsweise wenigen Kanten.
  • Sie passt zur objektorientierten Modellierung: Knoten verweisen auf Nachbarknoten.
  • Sie ist die zentrale Repräsentation für Q1.5.

Für Q1.5 steht die Adjazenzliste im Mittelpunkt. Die Matrix bleibt wichtig als Vergleichsdarstellung: Sie macht Kantenabfragen direkt sichtbar, ist aber nicht die curriculare Hauptmodellierung.

Arbeitsauftrag
Übertrage den A-F-Graphen in eine Adjazenzliste. Beginne mit A: B, C und ergänze die übrigen Knoten.
Objektorientierte Modellierung
Graphen objektorientiert modellieren
Adjazenzlisten als Liste von Objekten und Nachbarschaftslisten

Q1.5 ist keine neue Welt neben Q1.1 und Q1.4. Ein Knoten kann als Objekt modelliert werden, ein Graph verwaltet eine Liste von Knoten, und jeder Knoten besitzt wiederum eine Liste seiner Nachbarn. Genau dadurch entsteht eine objektorientierte Adjazenzliste.

Ungewichteter Graph

class Knoten {
  String name;
  List<Knoten> nachbarn;
}

class Graph {
  List<Knoten> knoten;
}

Für ungewichtete Graphen reicht die Information, welche Nachbarknoten direkt erreichbar sind. Die Bibliotheksklasse List speichert diese Objektverweise.

Gewichteter Graph

class Kante {
  Knoten ziel;
  int gewicht;
}

class Knoten {
  String name;
  List<Kante> kanten;
}

Bei gewichteten Graphen reicht ein Nachbarknoten allein nicht aus. Dann muss zusätzlich gespeichert werden, welches Gewicht die Verbindung zum Zielknoten besitzt.

Die bekannte Bibliotheksklasse List aus Q1.1/Q1.4 wird hier wiederverwendet. Die Queue aus Q1.4 wird später bei BFS gebraucht. Graphmodellierung kombiniert also bekannte Ideen: Objekte, Referenzen, Listen und eine passende Zugriffsdatenstruktur.

Arbeitsauftrag
Erkläre, warum eine Liste von Nachbarn für jeden Knoten ausreicht, um einen ungewichteten Graphen zu durchsuchen.
Tiefensuche
Tiefensuche (DFS)
Tiefenorientierte Graphdurchsuchung mit visited, Rekursion und Backtracking

Die Tiefensuche verfolgt ein einfaches Ziel: Alle von einem Startknoten erreichbaren Knoten besuchen oder einen Pfad zu einem Ziel finden. Ihre Grundidee lautet: Gehe so weit wie möglich in die Tiefe. Wenn es nicht weitergeht, springe zurück zum letzten Knoten mit einer offenen Alternative.

In Graphen ist eine Besuchsmarkierung unverzichtbar. Ohne visited könnte ein Zyklus dazu führen, dass der Algorithmus immer wieder dieselben Knoten besucht. Rekursive DFS nutzt dafür den Aufrufstapel aus Q1.3; eine iterative Variante könnte einen expliziten Stack aus Q1.4 verwenden.

Struktogramm: Tiefensuche (DFS, rekursiv)

Trace ab A bei alphabetischer Nachbarreihenfolge

Schritt aktueller Knoten visited nach Markierung nächster Nachbar / Rücksprung
1 A {A} B ist der erste unbesuchte Nachbar.
2 B {A, B} A ist schon besucht, weiter zu D.
3 D {A, B, D} B ist besucht, C ist noch offen.
4 C {A, B, C, D} A und D sind besucht, weiter zu E.
5 E {A, B, C, D, E} Keine offenen Nachbarn: Rücksprung zu C, dann D.
6 D {A, B, C, D, E} F ist noch offen.
7 F {A, B, C, D, E, F} Keine offenen Nachbarn: DFS ist abgeschlossen.

Daraus entsteht die Besuchsreihenfolge A, B, D, C, E, F. Wichtiger als die fertige Reihenfolge ist der Mechanismus: Ein Pfad wird vertieft, Sackgassen erzeugen Rücksprünge, und visited schützt vor Endlosschleifen.

Arbeitsauftrag
Führe DFS ab A selbst aus. Notiere nach jedem Schritt die Menge visited und markiere, wann ein Rücksprung entsteht.
Breitensuche
Breitensuche (BFS)
Ebenenorientierte Suche mit Queue und visited

Die Breitensuche verfolgt denselben Startpunkt wie DFS, arbeitet aber anders: Sie besucht Knoten schichtweise. Zuerst kommt der Startknoten, dann alle Knoten mit Entfernung 1, danach alle Knoten mit Entfernung 2 und so weiter.

Die zentrale Datenstruktur ist die Queue aus Q1.4. Der Startknoten wird eingefügt, vorne wird immer der nächste Knoten entnommen, und unbesuchte Nachbarn werden hinten angefügt. visited verhindert, dass ein Knoten mehrfach in die Queue gelangt.

Struktogramm: Breitensuche (BFS, mit Queue)

Queue-Trace ab A

Schritt entnommen Queue vorher neu markierte Nachbarn Queue nachher Distanz / Ebene
Start [] A [A] A: 0
1 A [A] B, C [B, C] B, C: 1
2 B [B, C] D [C, D] D: 2
3 C [C, D] E [D, E] E: 2
4 D [D, E] F [E, F] F: 3
5 E [E, F] keine [F] keine neue Ebene
6 F [F] keine [] Suche beendet

Die Ebenen sind {A}, dann {B, C}, dann {D, E}, dann {F}. Genau diese Ebenenstruktur erklärt, warum BFS in ungewichteten Graphen kürzeste Wege nach Kantenzahl findet.

Arbeitsauftrag
Führe BFS ab A aus und notiere nach jedem Entnehmen den Queue-Zustand. Prüfe, an welcher Stelle F zum ersten Mal markiert wird.
Kürzeste Wege mit Breitensuche
Kürzeste Wege mit Breitensuche
Der curriculare Kern für ungewichtete Graphen

In ungewichteten Graphen oder Graphen mit gleichen Kantengewichten bedeutet "kürzester Weg": möglichst wenige Kanten. BFS passt genau dazu, weil der Algorithmus zuerst Entfernung 0, dann Entfernung 1, dann Entfernung 2 usw. betrachtet. Der erste Fund eines Knotens liefert daher einen kürzesten Weg in Kantenzahl.

Für die Wegrekonstruktion reicht es nicht, nur visited zu speichern. Zusätzlich wird für jeden neu entdeckten Knoten ein Vorgänger notiert: Von welchem Knoten aus wurde er zuerst erreicht?

BFS-Ebenen ab A

  • Ebene 0: A
  • Ebene 1: B, C
  • Ebene 2: D, E
  • Ebene 3: F

Sobald F in Ebene 3 gefunden wird, ist klar: Es gibt keinen Weg von A nach F mit nur 0, 1 oder 2 Kanten.

Vorgänger speichern

vorgaenger[B] = A;
vorgaenger[C] = A;
vorgaenger[D] = B;
vorgaenger[E] = C;
vorgaenger[F] = D;

Der konkrete Vorgänger kann von der Nachbarreihenfolge abhängen. Bei alphabetischer Verarbeitung entsteht hier der Pfad über B und D.

Pfad von A nach F rekonstruieren

Rückwärtsschritt aktueller Knoten Vorgänger rekonstruierter Pfadteil
1 F D D → F
2 D B B → D → F
3 B A A → B → D → F

Ergebnis: A → B → D → F ist ein kürzester Weg mit drei Kanten. Je nach Reihenfolge kann BFS einen anderen, aber gleich kurzen Pfad liefern.

Arbeitsauftrag
Rekonstruiere den kürzesten Pfad von A nach F über vorgaenger. Erkläre, warum der erste Fund von F bereits ausreicht.
Dijkstra-Ausblick
Ausblick: Dijkstra bei gewichteten Graphen
Nicht Pflichtkern von Q1.5, sondern Anschlussfrage für unterschiedliche Kantengewichte

BFS findet kürzeste Wege, wenn jede Kante gleich viel zählt. Sobald Kanten unterschiedliche Gewichte tragen, reicht diese Logik nicht mehr: Ein Weg mit wenigen Kanten kann teurer sein als ein Weg mit mehreren günstigen Kanten.

Gewichteter Graph mit Kantengewichten zwischen A bis F.
Bei unterschiedlichen Gewichten zählt nicht nur die Anzahl der Kanten, sondern die Gesamtsumme der Kosten.

Für solche Fälle braucht man Verfahren wie Dijkstra. Auf dieser Seite bleibt Dijkstra bewusst Ausblick: Der Pflichtkern von Q1.5 ist die Modellierung mit Adjazenzlisten sowie DFS, BFS und kürzeste Wege mit BFS in ungewichteten Graphen.

Vergleich und Sicherung
Vergleich und Sicherung
Welche Modellierung, welche Datenstruktur, welcher Algorithmus?

Am Ende von Q1.5 steht keine einzelne "beste" Darstellung. Fachlich stark ist die begründete Entscheidung: Welches Netz wird modelliert, welche Informationen müssen gespeichert werden und welches Verfahren passt zur Frage?

Entscheidungsfrage Naheliegende Wahl Begründung
Will ich direkte Nachbarn speichern? Adjazenzliste Zu jedem Knoten reicht eine Liste der Nachbarknoten.
Will ich schnell prüfen, ob eine Kante existiert? Adjazenzmatrix Eine Tabellenzelle beantwortet die Kantenfrage direkt.
Will ich alle erreichbaren Knoten tiefenorientiert erkunden? DFS Rekursion oder Stack vertieft einen Pfad und nutzt Backtracking.
Will ich Ebenen und kürzeste Wege in ungewichteten Graphen? BFS Die Queue verarbeitet Knoten nach Entfernungsebenen.
Will ich kürzeste Kostenwege bei unterschiedlichen Gewichten? Dijkstra als Ausblick BFS zählt Kanten, aber nicht unterschiedliche Kosten.
Sicherung
Formuliere zu einer eigenen Anwendung jeweils einen Satz zu Modell, Speicherform und Algorithmus: "Meine Knoten sind ...", "Ich speichere den Graphen als ...", "Ich nutze ..., weil ...".