Kantengewichte
Definition (gewichteter Graph, Gewichtsfunktion)
Ein (nichtnegativ) gewichteter Graph ist ein Graph G = (E, K) zusammen mit einer Gewichts- oder Längenfunktion w : K → ℝ+0, wobei ℝ+0 = { x ∈ ℝ | x ≥ 0 }. Für alle k ∈ K heißt w(k) das Gewicht oder die Länge von k unter w. Wir notieren einen gewichteten Graphen auch als Tripel (G, K, w).
In einem Ecken-Kanten-Diagramm schreiben wir die Gewichte an die Kanten:
Ein gewichteter Graph. Es gilt zum Beispiel w(36) = w(63) = 2
Es ist oft nützlich, w(ab) = ∞ für alle a, b ∈ E mit ab ∉ K zu setzen, d. h. nicht vorhandene Kanten haben das symbolische Gewicht ∞. Ist eine Eckenaufzählung e1, …, en festgelegt, so ist die Gewichtsfunktion w durch die Gewichts-Matrix A mit den Einträgen A(i, j) = w(eiej) für alle i, j ∈ { 1, …, n } bestimmt. Die Gewichts-Matrix des obigen Graphen lautet zum Beispiel:
A =
Lassen wir Schlingen zu, so können auch reelle Zahlen (einschließlich der 0) auf der Hauptdiagonalen stehen. Setzen wir alle ∞-Einträge gleich 0 und alle anderen Einträge gleich 1, so ergibt sich die Adjazenz-Matrix von G.
Für einen gewichteten Graphen sind Begriffe wie Kantenzug, Weg, Kreis, erreichbar, Zusammenhangskomponente, zusammenhängend und viele weitere genau wie früher erklärt. Die Gewichtsfunktion spielt für diese Begriffe keine Rolle. Mit Hilfe einer solchen Funktion können wir aber eine gewichtete Länge für Kantenzüge und damit einen gewichteten Abstand einführen:
Definition (Gewicht, gewichtete Länge eines Kantenzugs)
Sei G = (E, K, w) ein gewichteter Graph, und sei Z = a0, …, an ein Kantenzug in G. Dann setzen wir
ℓw(Z) = w(a0a1) + … + w(an − 1an).
Die reelle Zahl ℓw(Z) heißt das Gewicht oder die gewichtete Länge von Z.
Definition (gewichteter Abstand)
Sei G = (E, K, w) ein gewichteter Graph. Für alle a, b ∈ E mit a ∼ b setzen wir
dw(a, b) = | „das minimale Gewicht eines Kantenzugs von a nach b in G“. |
Für a, b ∈ E mit non(a ∼ b) setzen wir dw(a, b) = ∞.
Wir nennen dw(a, b) den gewichteten Abstand der Ecken a und b in G.
Für alle voneinander erreichbaren Ecken a und b gilt also
dw(a, b) = min({ ℓw(Z) | Z ist ein Kantenzug von a nach b in G }.
Ein Kantenzug zwischen zwei Ecken mit minimalem Gewicht ist wieder automatisch ein Weg. Gilt w(k) = 1 für alle Kanten k, so stimmen die neuen Begriffe mit den alten überein. Jeden Graphen (E, K) können wir als gewichteten Graphen (E, K, w) mit einer konstanten Gewichtsfunktion w auffassen, die jeder Kante das Gewicht 1 zuweist.
Beispiel
Im obigen Graphen hat der Kantenzug Z = 1, 2, 3, 6, 3 das Gewicht
ℓw(Z) = 1 + 4 + 2 + 2 = 9.
Für die Ecken 1 und 6 gilt
d(1, 6) = 2, dw(1, 6) = 7.
Der Weg 1, 4, 6 ist ein kürzester Weg von 1 nach 6, aber kein leichtester Weg von 1 nach 6. Die Länge dieses Weges ist 2, sein Gewicht 11. Dagegen ist 1, 2, 3, 6 ein Weg von 1 nach 6 mit minimalem Gewicht. Seine ungewichtete Länge ist 3, seine gewichtete Länge 7.
Eine gewichtete Abstandsfunktion erfüllt die drei grundlegenden Eigenschaften eines Abstands, wobei wir die Nullbedingung abschwächen müssen, wenn die Null als Gewicht einer Kante auftaucht. Denn für Ecken a, b mit w(ab) = 0 ist dw(a, b) = 0, aber a ≠ b. Wir versammeln:
Satz (Eigenschaften des gewichteten Abstands)
Sei G = (E, K, w) ein gewichteter Graph. Dann gilt für alle a, b, c ∈ E:
(1) | a = b impliziert dw(a, b) = 0(schwache Nullbedingung) |
(2) | dw(a, b) = dw(b, a) (Symmetrie) |
(3) | dw(a, c) ≤ dw(a, b) + dw(b, c)(Dreiecksungleichung) |
(4) | Ist w positiv, so gilt „genau dann, wenn“ in (1). |
(5) | d(a, b) = ∞ genau dann, wenn dw(a, b) = ∞ |
(6) | Gilt w(k) ≥ 1 für alle Kanten k, so ist dw(a, b) ≥ d(a, b). |
Klar, aber von Bedeutung ist:
Satz (Optimalität von Teilstücken)
Sei G = (E, K, w) ein gewichteter Graph, und sei Z = a0, …, an ein Weg von a0 nach an in G mit minimalem Gewicht. Dann gilt für alle i < j ≤ n:
ai, …, aj ist ein Weg von ai nach aj mit minimalem Gewicht in G.
Beweis
Andernfalls könnten wir das Gewicht von Z durch Verändern eines Teilstücks noch verbessern.
Bevor wir uns der Frage der Berechnung gewichteter Abstände zuwenden, noch einige Bemerkungen zum Wertebereich unserer Gewichtsfunktionen.
Bemerkung
(1) | Sind alle Gewichte rationale Zahlen, so können wir sie mit ihrem Hauptnenner m skalieren. Dadurch werden alle Gewichte positive natürliche Zahlen, und die neue gewichtete Abstandsfunktion ist das m-fache der alten. In den folgenden Beispielen sind die Gewichte der Einfachheit und Übersichtlichkeit halber durchweg natürliche Zahlen. |
(2) | Auch negative Kantengewichte sind sinnvoll, aber im Hinblick auf Abstandsmessungen problematisch, da wir eine Kante ab mit einem negativen Gewicht beliebig oft in unterschiedlichen Richtungen durchlaufen können, um das Gewicht eines Kantenzugs von a nach b immer weiter zu verringern. Man untersucht deswegen oft nur gerichtete Graphen mit Gewichten in ℝ. Aber auch mit gerichteten Kanten müssen Kreise mit negativem Gewicht beachtet werden, um ein mehrfaches Durchlaufen derartiger Kreise zu vermeiden. Im Zentrum stehen dann insgesamt gerichtete kreisfreie Graphen mit einer Gewichtsfunktion w : K → ℝ, sog. DAGs für „directed acyclic graphs“. Wir verweisen den Leser hierzu auf die Literatur. |