AdjazenzlisteIn der Graphentheorie sind Adjazenzlisten (oder auch Nachbarschaftslisten) eine Möglichkeit, Graphen zu repräsentieren. Dabei wird für jeden Knoten eine Liste, die Adjazenzliste, aller seiner Nachbarn (in ungerichteten Graphen) bzw. Nachfolger (in gerichteten Graphen) angegeben. Oft basieren Datenstrukturen für Graphen auf Adjazenzlisten. Im einfachsten Fall wird in einem Array für jeden Knoten eine einfach verkettete Liste aller Nachbarn gespeichert. DefinitionBei einem ungerichteten Graphen versteht man unter einer Adjazenzliste für einen Knoten eine Liste aller Nachbarn von , d. h. eine Liste der Knoten . Bei einem gerichteten Graphen versteht man unter einer Adjazenzliste für einen Knoten eine Liste aller Nachfolger von , d. h. eine Liste der Knoten . In beiden Fällen ist die Reihenfolge der Knoten in der Adjazenzliste beliebig. Eine Adjazenzlisten-Repräsentation eines Graphen erhält man, indem man für jeden Knoten eine Adjazenzliste angibt. Beispiel 1Ein ungerichteter Graph mit Knoten und Kanten , und seine Repräsentation mit Hilfe von Adjazenzlisten.
Beispiel 2Ein gerichteter Graph mit Knoten und Kanten , und seine Repräsentation mit Hilfe von Adjazenzlisten.
Adjazenzlisten als DatenstrukturenDie Adjazenzlisten-Repräsentation von Graphen dient oft als Basis von Datenstrukturen für Graphen. Es gibt unterschiedliche Varianten diese Adjazenzlisten-Repräsentation in einer Datenstruktur umzusetzen, die auch unterschiedliche Verhalten der Datenstrukturen verursachen. Einige Varianten:
Bei Verwendung einer naiven Array-Implementierung erfordert eine Adjazenzliste für einen ungerichteten Graphen etwa Bytes Speicherplatz, wobei die Anzahl der Kanten des Graphen ist. In der Adjazenzmatrix der Hauptalternative zur Adjazenzliste benötigt jeder Eintrag in der Adjazenzmatrix nur ein Bit. Eine Adjazenzmatrix kann daher sehr kompakt in nur Bytes zusammenhängenden Speicher repräsentiert werden, wobei die Anzahl der Knoten des Graphen ist. Diese Kompaktheit fördert auch die Lokalität der Referenzen. Für einen dünnen Graphen benötigen Adjazenzlisten jedoch weniger Speicherplatz. Berücksichtigt man, dass ein ungerichteter einfacher Graph höchstens Kanten haben kann, was Schleifen zulässt, kann man die Dichte des Graphen mit bezeichnen. Dann ist , wenn , d. h. die Darstellung als Adjazenzliste nimmt mehr Platz ein als die Darstellung als Adjazenzmatrix, wenn . Daher muss ein Graph dünn genug sein, damit eine Darstellung der Adjazenzliste kompakter als eine Darstellung als Adjazenzmatrix ist. Die unterschiedlichen Repräsentationen erleichtern auch unterschiedliche Operationen. Das Finden aller benachbarten Knoten eines bestimmten Knotens mit Adjazenzlisten ist so einfach wie das Lesen der entsprechenden Adjazenzliste und daher proportional zum Grad. Bei einer Adjazenzmatrix muss stattdessen eine ganze Zeile gelesen werden und daher proportional zur Gesamtanzahl der Knoten. Ob es eine Kante zwischen zwei gegebenen Knoten gibt, kann direkt aus der Adjazenzmatrix bestimmt werden, während mit Adjazenzlisten eine Laufzeit proportional zum Minimalgrad der beiden Knoten benötigt wird. BeispieleKnoten-Array mit Adjazenzlisten als einfach verkettete Listen
Knoten-Array mit Adjazenzlisten als doppelt verkettete Listen
Verkettete Liste von Knoten mit Adjazenzlisten als einfach verkettete Listen
Siehe auchLiteratur
WeblinksWikiversity: Algorithmen und Datenstrukturen/Repräsentation Graphen – Kursmaterialien
Commons: Adjacency list – Sammlung von Bildern, Videos und Audiodateien
Information related to Adjazenzliste |