finale Version des Vorlesungsskripts - ZIB
finale Version des Vorlesungsskripts - ZIB
finale Version des Vorlesungsskripts - ZIB
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4.3 Datenstrukturen zur Speicherung von Graphen<br />
aji = aij = Anzahl der Kanten, die i und j verbinden, falls i = j<br />
= 2 · (Anzahl der Schleifen, die i enthalten), i = 1, . . . , n<br />
aii<br />
die Adjazenzmatrix von G. Aufgrund der Symmetrie kann man etwa die Hälfte der<br />
Speicherplätze sparen. Hat ein Graph keine Schleifen (unser Normalfall), dann genügt es,<br />
die obere (oder untere) Dreiecksmatrix von A zu speichern. Man macht das z. B. in der<br />
Form<br />
a12, a13, . . . , a1n, a23, a24, . . . , a2n, a34, . . . , an−1,n.<br />
Die Adjazenzmatrix <strong>des</strong> Graphen in Abbildung 4.1 sieht wie folgt aus:<br />
⎛<br />
0 1 1<br />
⎞<br />
0<br />
⎜<br />
⎜1<br />
⎝1<br />
2<br />
2<br />
2<br />
0<br />
0 ⎟<br />
1⎠<br />
0 0 1 0<br />
Hat ein Graph Kantengewichte, und ist er einfach, so setzt man<br />
aij = Gewicht der Kante ij, i, j = 1, . . . , n.<br />
Ist eine Kante ij nicht im Graphen G enthalten, so setzt man<br />
aij = 0, aij = −∞ oder aij = +∞,<br />
je nachdem, welche Gewichtszuordnung für das Problem sinnvoll ist und die Benutzung<br />
dieser Kante ausschließt. Wiederum braucht man von der so definierten Matrix A nur<br />
die obere Dreiecksmatrix zu speichern.<br />
Die Adjazenzmatrix A = (aij) eines Digraphen D = (V, E) mit V = {1, 2, . . . , n} ohne<br />
Schleifen ist definiert durch<br />
aii = 0, i = 1, 2, . . . , n<br />
aij = Anzahl der Bögen in E mit Anfangsknoten i und Endknoten j, i = j.<br />
Bogengewichte werden wie bei Adjazenzmatrizen von Graphen behandelt. Der Speicheraufwand<br />
von Adjazenzmatrizen beträgt n2 bzw. n<br />
2 Speicherplätze, falls bei einem<br />
ungerichteten Graphen nur die obere Dreiecksmatrix gespeichert wird.<br />
4.3.3 Adjazenzlisten<br />
Speichert man für einen Graphen G = (V, E) die Anzahl der Knoten und für jeden<br />
Knoten v ∈ V seinen Grad und die Namen der Nachbarknoten, so nennt man eine<br />
solche Datenstruktur Adjazenzliste von G. Für den Graphen aus Abbildung 4.1 sieht die<br />
71