23.06.2013 Aufrufe

finale Version des Vorlesungsskripts - ZIB

finale Version des Vorlesungsskripts - ZIB

finale Version des Vorlesungsskripts - ZIB

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!