diplomarbeit oliver münch, fernuniversität hagen · fernuniversit¨at gesamthochschuleinhagen...
TRANSCRIPT
FernUniversitatGesamthochschule in Hagen
Fachbereich Informatik
Lehrgebiet Praktische Informatik VI
Diplomarbeit
Das Voronoi-Diagramm in der Airline-Metrik:
Untersuchung der strukturellen Eigenschaften
und Veranschaulichung durch ein Java-Programm
eingereicht im: August 1998
von: Oliver Munch
geboren am 27. April 1971
in Hagen
Betreuer: Dr. Christian Icking
Prof. Dr. Rolf Klein
2
Hiermit erklare ich, daß ich diese Diplomarbeit selbststandig verfaßt habe. Gleichzeitig ver-
sichere ich, daß ich keine anderen als die angegebenen Quellen und Hilfmittel benutzt sowie
Zitate kenntlich gemacht habe.
Hagen, den 31. August 1998
Inhaltsverzeichnis
1 Aufgabenstellung 1
2 Grundbegriffe 3
2.1 Mengenlehre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Topologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Abgeschlossene Semiringe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 S-Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Darstellung von Graphen im Speicher . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1 Adjazenzmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.2 Adjazenzlisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Allgemeine Pfadprobleme uber abgeschlossenen Semiringen 15
3.1 Wege in S-Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Matrizenprodukte und Wege . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Das”general path“-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Der Algorithmus von Kleene . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Die Airline-Metrik 27
4.1 Einfuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 Definition der Airline-Metrik . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.1 Metrische Eigenschaften von R+-Graphen . . . . . . . . . . . . . . . 29
i
ii INHALTSVERZEICHNIS
4.2.2 Semiringoperationen und metrische Eigenschaften . . . . . . . . . . . 31
4.2.3 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Eigenschaften der Airline-Metrik . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Verallgemeinerungen der Airline-Metrik . . . . . . . . . . . . . . . . . . . . . 38
5 Berechnung der Airline-Distanz 41
5.1 Ein Algorithmus mit Vorverarbeitung . . . . . . . . . . . . . . . . . . . . . . 41
5.1.1 Datenstruktur: Kostenmatrix . . . . . . . . . . . . . . . . . . . . . . 41
5.1.2 Vorverarbeitung: Berechnung von AGG mit dem
Algorithmus von Floyd/Warshall . . . . . . . . . . . . . . . . . . . . 42
5.1.3 Hauptteil: Berechnung von adG(x, y) fur x, y ∈ R2 . . . . . . . . . . . 43
5.1.4 Analyse des Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2 Ein Algorithmus ohne Vorverarbeitung . . . . . . . . . . . . . . . . . . . . . 46
5.2.1 Formulierung der Airline-Distanz als”single source shortest path“-
Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2.2 Der Algorithmus von Dijkstra . . . . . . . . . . . . . . . . . . . . . . 48
5.2.3 Berechnung von adG(x, y) mit dem Algorithmus von Dijkstra . . . . . 49
6 Das Voronoi-Diagramm in der Airline-Metrik 51
6.1 Einfuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Das additiv gewichtete Voronoi-Diagramm . . . . . . . . . . . . . . . . . . . 52
6.2.1 Definition des additiv gewichteten Voronoi-Diagramms . . . . . . . . 54
6.2.2 Eigenschaften des additiv gewichteten Voronoi-Diagramms . . . . . . 55
6.3 Das Airline-Voronoi-Diagramm . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.4 Anwendungen des Voronoi-Diagramms . . . . . . . . . . . . . . . . . . . . . 62
6.4.1 Das Problem des nachsten Postamts . . . . . . . . . . . . . . . . . . 63
6.4.2 Weitere Distanzprobleme . . . . . . . . . . . . . . . . . . . . . . . . . 64
INHALTSVERZEICHNIS iii
7 Berechnung des Voronoi-Diagramms 67
7.1 Der Sweepline-Algorithmus von Fortune . . . . . . . . . . . . . . . . . . . . 67
7.1.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.1.2 Die Transformation”∗“ . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.1.3 Der Algorithmus zur Berechnung von V ∗ und V . . . . . . . . . . . . 71
7.2 Der Sweepline-Algorithmus fur das additiv gewichtete Voronoi-Diagramm . . 74
7.3 Eine geometrische Interpretation der Transformationsabbildung”∗“ . . . . . 78
7.4 Berechnung des Airline-Voronoi-Diagramms . . . . . . . . . . . . . . . . . . 80
8 Abschließende Bemerkungen und offene Probleme 83
A Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme 85
A.1 Das Programm”VoroCircles“ . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.1.1 Einfuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.1.2 Die Bedienung von”VoroCircles“ . . . . . . . . . . . . . . . . . . . . 86
A.1.3 Aufbau und Installation von”VoroCircles“ . . . . . . . . . . . . . . . 87
A.2 Das Programm”VoroAirline“ . . . . . . . . . . . . . . . . . . . . . . . . . . 89
A.2.1 Einfuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
A.2.2 Die Bedienung von”VoroAirline“ . . . . . . . . . . . . . . . . . . . . 89
A.2.3 Aufbau und Installation von”VoroAirline“ . . . . . . . . . . . . . . . 92
A.3 Schwierigkeiten bei der Implementierung . . . . . . . . . . . . . . . . . . . . 93
A.3.1 Darstellung der Bisektoren . . . . . . . . . . . . . . . . . . . . . . . . 94
iv INHALTSVERZEICHNIS
Kapitel 1
Aufgabenstellung
Gegeben sei die euklidische Ebene und eine Menge von Flughafen in der Ebene. Zwischen
diesen Flughafen konnen Flugverbindungen bestehen. Eine Person, die am Punkt a wohnt,
mochte einen Freund besuchen, der am Punkt b wohnt. Die Person kann sich in der Ebene
beliebig bewegen. An Flughafen kann sie das Verkehrsmittel wechseln und Strecken im Flug-
zeug zurucklegen. Sie darf beliebig oft das Verkehrsmittel wechseln, an Flughafen umsteigen
und Strecken im Flugzeug oder Wege in der Ebene zurucklegen, um ihr Ziel zu erreichen.
Hieraus ergeben sich interessante Fragen:
• Wie definiert man eine Metrik auf der Ebene, welche die Reisedauer der schnellsten
Verbindung angibt?
• Welche strukturellen Eigenschaften besitzt diese Metrik?
• Wie erhalt man unter Ausnutzung dieser Eigenschaften einen effizienten und praktika-
blen Algorithmus zur Berechnung der Distanz zweier Punkte?
• Welche algorithmische Komplexitat hat die Berechnung der Distanz?
• Wie sehen die Voronoi-Diagramme bezuglich dieser Metrik aus?
• Wie kann man die Voronoi-Diagramme berechnen?
• Gibt es interessante Zusammenhange mit anderen Problemen und weitere Anwendun-
gen?
• Kann man die planare Airline-Metrik verallgemeinern?
1
2 1. Aufgabenstellung
Kapitel 2
Grundbegriffe
Unerlaßlich fur das Verstandnis dieser Arbeit ist es, daß Klarheit uber die benutzten Grund-
begriffe, Symbole und Schreibweisen besteht. Das Hauptziel dieses Kapitels ist es, diese
Begriffe prazise zu definieren, so daß mogliche Unklarheiten beseitigt werden. Der damit
vertraute Leser wird es uberfliegen und die Besonderheiten zur Kenntnis nehmen.
Hier behandeln wir drei Begriffe, die fur diese Arbeit von grundlegender Bedeutung sind:
• Metriken und Distanzfunktionen
• abgeschlossene Semiringe
• S-Graphen
In den ersten beiden Abschnitten behandeln wir mathematische Grundbegriffe. Die topo-
logischen Standardnotationen des zweiten Abschnitts findet man auch in Lehrbuchern zur
Analysis [14, 20] oder zur Topologie [32].
Essentiell fur diese Arbeit sind Hilfmittel aus der Graphentheorie. Die Graphentheorie dient
der Beschreibung von Situationen, in denen bestimmte Objektpaare in Beziehung zueinander
stehen. Allgemeine Literatur hierzu sind [1, 5, 18].
Wir werden spater die Flughafen und Flugverbindungen mit Hilfe eines Graphen modellieren.
Dieser Graph hat dann eine nichtnegative Kantenbewertung cost : E → R+ . Solche Graphen
werden in der Literatur meist Distanzgraphen genannt (siehe [31]). Um die Airline-Metrik
zu definieren, werden wir kurzeste Wege in einem Distanzgraphen betrachten.
Die Berechnung kurzester Wege zwischen allen Knotenpaaren in einem Distanzgraphen
gehort zur Problemklasse”allgemeine Pfadprobleme uber abgeschlossenen Semiringen“. In
3
4 2. Grundbegriffe
der Literatur werden abgeschlossene Semiringe immer dann eingefuhrt, wenn allgemeine
Pfadprobleme behandelt werden (siehe [1, 5, 27]). Wegen der zentralen Bedeutung der Pfad-
probleme fur diese Arbeit habe ich mich dazu entschlossen, schon von vornherein Graphen
uber abgeschlossene Semiringe zu betrachten.
Semiringe werden im dritten Abschnitt eingefuhrt. Die Definitionen findet man auch in [5,
27]. Die Definition der Nullteilerfreiheit stammt aus [13]. Der fur uns wichtigste abgeschlos-
sene Semiring ist der nichtnegative (inf, +)-Semiring R+ = (R+ ∪ ∞, inf, +,∞, 0).
Im vierten Abschnitt definieren wir eine eigene Art von Graphen. Wir erhalten dann eine
spezielle, fur diese Arbeit sehr nutzliche Darstellungsweise von Graphen. Graphen mit einer
Kantenmarkierung uber einen abgeschlossenen Semiring S nennen wir S-Graphen. Distanz-
graphen sind dann spezielle R+-Graphen.
Im letzten Abschnitt besprechen wir kurz zwei gebrauchliche Speicherdarstellungen von Gra-
phen.
2.1 Mengenlehre
Definition 2.1. Mit N bezeichnen wir die Menge der naturlichen Zahlen einschließlich der
Null. R+ sei die Menge der nichtnegativen reellen Zahlen. Die Menge der positiven reellen
Zahlen bezeichnen wir mit R∗+ .
N = 0, 1, 2, . . .(2.1)
R+ = x ∈ R : x ≥ 0(2.2)
R∗+ = x ∈ R : x > 0(2.3)
Definition 2.2. Mit Hilfe des kartesischen Produkts definieren wir Potenzen Xn einer Men-
ge X.
X0 := (),(2.4)
X1 := X,(2.5)
X2 := X × X,(2.6)
X3 := X × X × X, u.s.w.(2.7)
X∗ :=∞⋃i=0
X i(2.8)
X+ :=
∞⋃i=1
X i(2.9)
2.2 Topologie 5
Die Elemente von Xn sind n-Tupel. Die Menge X0 erhalt als einziges Element den 0-Tupel
().
Definition 2.3. M und N seien Mengen. Eine Menge R heißt Relation zwischen M und
N , wenn sie eine Teilmenge des kartesischen Produkts M × N ist. R heißt Relation auf M ,
wenn R ⊆ M × M gilt.
R und S seien Relationen. Die Verknupfung von R mit S ist definiert durch
S R := (x, z) : ∃y mit (x, y) ∈ R und (y, z) ∈ S(2.10)
Auch fur Relationen R auf einer Menge M definieren wir Potenzen Rn:
R0 := (x, x) : x ∈ M,(2.11)
R1 := R,(2.12)
R2 := R R,(2.13)
R3 := R R R, u.s.w.(2.14)
R∗ :=∞⋃i=0
Ri(2.15)
R+ :=
∞⋃i=1
Ri(2.16)
R∗ heißt reflexiv-transitive Hulle von R, denn R∗ ist die kleinste reflexive und transitive
Relation auf M , die R enthalt. R+ heißt transitive Hulle von R, denn R+ ist die kleinste
transitive Relation auf M , die R enthalt.
R∗ =⋂
S : S ist eine reflexive und transitive Relation auf M mit S ⊇ R(2.17)
R+ =⋂
S : S ist eine transitive Relation auf M mit S ⊇ R(2.18)
2.2 Topologie
Wir untersuchen die euklidische Ebene R2 . Dazu benutzen wir Standardnotationen aus der
Topologie.
Definition 2.4. Eine Distanzfunktion auf einer Menge X ist eine Abbildung d : X × X →R+ mit folgenden Eigenschaften, die fur alle x, y, z ∈ X gelten:
d(x, y) = 0 ⇔ x = y (Definitheit)(2.19)
d(x, z) ≤ d(x, y) + d(y, z) (Dreiecksungleichung)(2.20)
d(x, y) nennt man den Abstand oder die Distanz der Punkte x und y.
6 2. Grundbegriffe
Definition 2.5. Eine Metrik auf einer Menge X ist eine Abbildung d : X × X → R+ mit
folgenden Eigenschaften, die fur alle x, y, z ∈ X gelten:
d(x, y) = 0 ⇔ x = y (Definitheit)(2.21)
d(x, y) = d(y, x) (Symmetrie)(2.22)
d(x, z) ≤ d(x, y) + d(y, z) (Dreiecksungleichung)(2.23)
Das Paar (X, d) heißt metrischer Raum.
Eine Metrik ist also eine Distanzfunktion, die zusatzlich die Symmetriebedingung erfullt.
Beispiel 2.1. Die Minkowski-Metriken Lp im Rn :
Lp(x, y) =
(n∑
i=1
|xi − yi|p)1/p
(1 ≤ p < ∞)(2.24)
L∞(x, y) = max(|x1 − y1|, . . . , |xn − yn|)(2.25)
L1 heißt Manhattan-Metrik, L2 euklidische Metrik und L∞ Maximummetrik.
Definition 2.6. Eine Pseudodistanzfunktion auf einer Menge X ist eine Abbildung d : X ×X → R+ ∪ ∞ mit folgenden Eigenschaften, die fur alle x, y, z ∈ X gelten:
d(x, x) = 0 (Semidefinitheit)(2.26)
d(x, z) ≤ d(x, y) + d(y, z) (Dreiecksungleichung)(2.27)
Eine Pseudometrik ist eine Pseudodistanzfunktion, die zusatzlich die Symmetriebedingung
erfullt.
2.3 Abgeschlossene Semiringe
Das Problem der Berechnung kurzester Wege in Distanzgraphen ist grundlegend fur diese
Arbeit. Um dieses Problem in seiner Allgemeinheit zu betrachten, fuhren wir eine besondere
algebraische Struktur ein, namlich die Struktur der abgeschlossenen Semiringe. Hiermit ist
es moglich, Pfadprobleme von einem abstrakteren Standpunkt aus zu betrachten. Hierdurch
erhalt man einen wesentlich tieferen Einblick in das Gebiet der Pfadprobleme.
Definition 2.7. Ein Semiring ist ein 5-Tupel S = (S, +, ·, 0S, 1S) mit folgenden Eigenschaf-
ten:
1) S ist eine Menge mit mindestens zwei Elementen
2.3 Abgeschlossene Semiringe 7
2) 0S , 1S ∈ S, 0S 6= 1S3) +, · : S × S → S sind binare Operationen auf S
4) (S, +, 0S) ist ein kommutatives Monoid mit neutralem Element 0S ,
(S, ·, 1S) ist ein Monoid mit neutralem Element 1S ,
es gelten die Distributivgesetze und 0S ist Nullelement bzgl ·,d.h. fur alle a, b, c ∈ S gelten:
a + (b + c) = (a + b) + c (Assoziativgesetz bzgl. +)(2.28)
a + b = b + a (Kommutativgesetz bzgl. +)(2.29)
a + 0S = a (0S ist neutrales Element bzgl. +),(2.30)
a · (b · c) = (a · b) · c (Assoziativgesetz bzgl. ·)(2.31)
a · 1S = 1S · a = a (1S ist neutrales Element bzgl. ·)(2.32)
a · (b + c) = (a · b) + (a · c) (1. Distributivgesetz)(2.33)
(a + b) · c = (a · c) + (b · c) (2. Distributivgesetz)(2.34)
a · 0S = 0S · a = 0S (0S ist Nullelement bzgl. ·)(2.35)
Der Semiring S heißt abgeschlossener Semiring, wenn fur Familien (ai)i∈I von Elementen
aus S mit abzahlbarer Indexmenge I eine Summe∑
i∈I ai definiert ist (falls I unendlich ist,
heißt∑
i∈I ai eine unendliche Summe). Die Summe muß folgende Eigenschaften erfullen:∑i∈I
ai = ai1 + · · ·+ aik , falls I = i1, . . . , ik endlich ist(2.36) ∑i∈∅
ai = 0S(2.37) ∑i∈I
ai =∑j∈J
∑i∈Ij
ai, falls (Ij)j∈J eine Partition von I ist(2.38)
(∑i∈I
ai) · (∑j∈J
bj) =∑i∈I
∑j∈J
(ai · bj)(2.39)
Definition 2.8. Ein Semiring S heißt nullteilerfrei, wenn fur alle a, b ∈ S aus a · b = 0Sstets a = 0S oder b = 0S folgt.
Bemerkung. In einem nullteilerfreien Semiring ist fur a, b ∈ S \0S auch a ·b ∈ S \0S. Die
Multiplikation von S induziert eine Multiplikation in S \0S. Die induzierte Multiplikation
ist selbstverstandlich auch assoziativ.
Beispiel 2.2. Der boolesche Semiring B = (0, 1,∨,∧, 0, 1) ist der einfachste abgeschlos-
sene Semiring. B ist außerdem nullteilerfrei.
8 2. Grundbegriffe
Beispiel 2.3. Der reelle (inf, +)-Semiring R = (R ∪ ∞,−∞, inf, +,∞, 0) ist ein abge-
schlossener Semiring. Hierbei sei zusatzlich (−∞) +∞ := ∞ definiert. Man beachte, daß in
diesem Semiring + die Multiplikation und 0 = 1R das neutrale Element der Multiplikation
ist! Die Infimumbildung ist die Addition in diesem Semiring. Folglich ist infai : i ∈ I die
I-indizierte Summe. (Man beachte: inf ∅ = ∞, denn das Infimum einer Menge ist die großte
obere Schranke, und fur die leere Menge sind alle Zahlen obere Schranken). Offensichtlich
ist R auch nullteilerfrei.
Beispiel 2.4. Der nichtnegative (inf, +)-Semiring R+ = (R+ ∪ ∞, inf, +,∞, 0) ist ein
nullteilerfreier abgeschlossener Semiring. R+ ist ein Untersemiring von R und eine Erwei-
terung des Booleschen Semirings, weil B zu folgendem Untersemiring von R+ isomorph ist:
(0,∞, inf, +,∞, 0).
Fur abgeschlossene Semiringe definieren wir eine weitere einstellige Operation:
Definition 2.9. Sei S ein abgeschlossener Semiring und a ∈ S. Der Abschluß von a ist
a∗ := 1S + a + a2 + · · · =∑i≥0
ai(2.40)
Dabei seien die Potenzen wie ublich definiert, d.h. a0 = 1S und ai+1 = ai · a.
Bemerkung. In jedem abgeschlossenen Semiring ist 0∗S = 1S . Im booleschen Semiring B ist
a∗ = 1 fur alle a. In R ist a∗ = 0 fur a ≥ 0 und a∗ = −∞ fur a < 0. In R+ ist a∗ = 0 fur alle
a.
Summe und Produkt von n×n-Matrizen uber einen abgeschlossenen Semiring definieren wir
in gewohnter Weise, d.h. (aij)+(bij) = (aij +bij) und (aij) ·(bjk) = (∑n
j=1 aij ·bjk). Allerdings
schranken wir unsere Definition nicht auf Mat(n×n, S) = Abb(1, . . . , n×1, . . . , n, S) ein,
sondern definieren die entsprechende Summe und das entsprechende Produkt auf Abb(X ×X, S) fur jede nichtleere endliche Menge X.
Definition 2.10. Sei S ein abgeschlossener Semiring und X eine beliebige nichtleere endli-
che Menge. Fur zwei Abbildungen f, g ∈ Abb(X × X, S) seien f + g ∈ Abb(X × X, S) und
f · g ∈ Abb(X × X, S) definiert durch
f + g : X × X −→ S, (x, y) 7−→ f(x, y) + g(x, y)(2.41)
f · g : X × X −→ S, (x, y) 7−→∑z∈X
f(x, z) · g(z, y)(2.42)
2.4 S-Graphen 9
Die Nullfunktion 0S ∈ Abb(X × X, S) und die Einheitsfunktion IS ∈ Abb(X × X, S) seien
definiert durch
0S : X × X −→ S, 0S(x, y) = 0S(2.43)
IS : X × X −→ S, IS(x, y) =
1S falls x = y
0S falls x 6= y(2.44)
Satz 2.1. (Abb(X × X, S), +, ·, 0S, IS) ist ein abgeschlossener Semiring.
Beweis. elementar: Man zeigt die Gultigkeit der Semiringgesetze fur Abb(X × X, S), indem
man die Semiringeigenschaften von S benutzt.
Definition 2.11. Weil Abb(X×X, S) ein abgeschlossener Semiring ist, ist damit gleichzeitig
ein Abschluß fur Funktionen f ∈ Abb(X × X, S) definiert:
f ∗ := IS + f + f 2 + · · · =∑i≥0
f i(2.45)
Dabei seien die Potenzen wie ublich definiert, d.h. f 0 = IS und f i+1 = f i · f .
Durch Betrachtung des Spezialfalles X = 1, . . . , n erhalten wir die gewohnte Matrizen-
schreibweise zuruck:
Definition 2.12. Sei S ein abgeschlossener Semiring und A = (aij), B = (bij) ∈ Mat(n ×n, S).
0S = (0S)(2.46)
IS = (δij)(2.47)
(aij) + (bij) = (aij + bij)(2.48)
(aij) · (bjk) = (
n∑j=1
aij · bjk)(2.49)
A∗ = IS + A + A2 + · · · =∑i≥0
Ai(2.50)
Satz 2.2. (Mat(n × n, S), +, ·, 0S, IS) ist ein abgeschlossener Semiring. S ist isomorph zu
Mat(1 × 1, S).
2.4 S-Graphen
Im diesem Abschnitt sei S = (S, +, ·, 0S , 1S) ein abgeschlossener Semiring. Die Semiringope-
rationen bezeichnen wir auch mit”+S“ und
”·S“, um Verwechslungen und Mißverstandnisse
zu vermeiden.
10 2. Grundbegriffe
Endliche Graphen ohne parallele Kanten (G = (V, E), |V | = n < ∞, E ⊆ V × V ) die-
nen zur Beschreibung von Situationen, in denen eine endliche Menge von Objekten vorliegt
und Beziehungen zwischen bestimmten (geordneten) Objektpaaren bestehen. Zur Modellie-
rung realer Probleme reicht oft eine boolesche Funktion E ⊆ V × V nicht aus. Den Knoten
oder Kanten kann man dann weitere Informationen zuordnen. Dieses geschieht mittels Ab-
bildungen V → WV oder E → WE fur irgendwelche Wertebereiche WV und WE . Solche
Abbildungen heißen Knotenmarkierungen bzw. Kantenmarkierungen.
In dieser Arbeit interessieren wir uns insbesondere fur Graphen mit einer nichtnegativen
Kantenmarkierung cost : E → R+ . Solche Graphen nennt man meist Distanzgraphen. Re-
ellwertige Kantenmarkierungen cost : E → R heißen Bewertungsfunktionen. Die Bewertung
cost(v, w) einer Kante (v, w) ∈ E interpretiert man als Lange, Gewicht oder Kosten der Kan-
te. Wir wollen nicht zwischen Bewertungen, Langen, Kosten und Gewichte unterscheiden,
sondern diese Begriffe synonym benutzen. Dementsprechend unterscheiden wir auch nicht
zwischen kurzesten Wegen und kostengunstigsten Wegen in bewerteten Graphen.
Zur Speicherdarstellung von kantenmarkierten Graphen mittels Adjazenzmatrizen tragt man
direkt die Kantenbeschriftung statt der booleschen Werte in die Matrix ein (markierte Adja-
zenzmatrix). Dazu erweitert man den Wertebereich der Kantenmarkierung um ein weiteres
Element, welches man zur Markierung der Nichtkanten E := (V × V ) \ E verwendet. Im
Fall der bewerteten Graphen erweitert man die Kostenfunktion mittels cost(v, w) := ∞ fur
(v, w) ∈ E. Aus cost : E → R wird so eine Abbildung cost : V × V → R ∪ ∞. Die
entsprechende markierte Adjazenzmatrix heißt jetzt Kostenmatrix.
Als Verallgemeinerung der gewohnlichen unmarkierten Graphen G = (V, E), der bewerteten
Graphen G = (V, E, cost) mit cost : E → R und der Distanzgraphen G = (V, E, cost) mit
cost : E → R+ definieren wir Graphen mit einer Bewertungsfunktion cost : V ×V → S uber
einen abgeschlossenen Semiring S.
Definition 2.13. Ein S-Graph ist ein Paar G = (V, cost), aus einer nichtleeren endlichen
Knotenmenge V = v1, . . . , vn und einer Bewertungfunktion (Kostenfunktion, Langenfunk-
tion, Gewichtsfunktion) cost : V × V → S. n = |V | heißt Knotenzahl des Graphen. Die
Menge aller S-Graphen mit Knotenmenge V bezeichnen wir mit Graph(V,S). Offenbar gilt:
Graph(V,S) = (V, cost) : cost ∈ Abb(V × V, S)(2.51)
Definition 2.14. Ein geordnetes Knotenpaar (v, w) ∈ V × V heißt Kante, wenn cost(v, w)
6= 0S , und Nichtkante, wenn cost(v, w) = 0S ist. Die Menge der Kanten bezeichnen wir mit
2.4 S-Graphen 11
E, die der Nichtkanten mit E. e = |E| heißt Kantenzahl des Graphen.
E ∩ E = ∅(2.52)
E ∪ E = V × V(2.53)
E = (v, w) : cost(v, w) 6= 0S(2.54)
E = (v, w) : cost(v, w) = 0S(2.55)
G heißt leerer Graph im Fall E = ∅ und vollstandiger Graph im Fall E = V × V .
Bemerkung. Die Menge der geordneten Knotenpaare V × V zerfallt also in die Menge der
Kanten E und die Menge der Nichtkanten E. Diese Zerlegung wird durch die Kostenfunk-
tion cost bestimmt. Die Kostenfunktion markiert die Nichtkanten unter den geordneten
Knotenpaaren mit dem Nullelement des Semirings bzgl. der Multiplikation. Umgekehrt ist
ein S-Graph G ∈ Graph(v,S) schon durch die Kantenmenge E und die Beschrankung von
cost auf E, cost |E : E → S \ 0S, eindeutig festgelegt.
Eine alternative gleichwertige Definitionsmoglichkeit fur S-Graphen ist deshalb folgende:
G = (V, E, cost) mit Kantenmenge E ⊆ V × V und Kostenfuktion cost : E → S \ 0S,welche man dann mittels cost(v, w) := 0S fur (v, w) ∈ (V ×V )\E auf ganz V ×V erweitert.
Dieses entspricht dann dem in der Literatur ublichen Vorgehensweise. Dort werden Kanten-
markierungen nur auf E und nicht auf ganz V ×V definiert, aber in der Kostenmatrixdarstel-
lung eines markierten Graphen wird der Wertebereich um ein geeignetes Element erweitert,
welches die Nichtexistenz einer Kante zu einem geordneten Knotenpaar ausdruckt.
Definition 2.15. Ein Graph G′ = (V ′, cost′) mit V ′ ⊆ V und E ′ ⊆ E heißt Teilgraph von
G, wenn cost′(v, w) = cost(v, w) fur (v, w) ∈ E ′.
Beispiel 2.5. B-Graphen sind nichts anderes als gewohnliche unmarkierte Graphen in ande-
rer Schreibweise. Die Kostenfunktion ist aquivalent zur Kantenmenge, denn sie liefert keine
zusatzlichen Informationen zu den Knotenpaaren außer die Existenz bzw. Nichtexistenz von
Kanten. Wir werden fur B-Graphen G = (V, cost) deshalb auch die Schreibweise G = (V, E)
verwenden und B-Graphen auch einfach”Graphen“ nennen.
Beispiel 2.6. R-Graphen sind Graphen mit einer Kantenmarkierung cost : E → R∪−∞.Insbesondere gehoren hierzu Graphen mit einer reellwertigen Kantenmarkierung cost : E →R. Auch B-Graphen G = (V, E) kann man als R-Graphen auffassen, indem man cost(v, w) :=
0 fur (v, w) ∈ E und cost(v, w) := ∞ fur (v, w) ∈ E definiert.
Beispiel 2.7. R+-Graphen sind spezielle R-Graphen mit einer nichtnegativen Kantenmar-
kierung cost : E → R+ . Die Kostenfunktion interpretiert man haufig als Langenfunktion auf
12 2. Grundbegriffe
der Kantenmenge. Wir benotigen R+-Graphen zur Modellierung der Flughafen und Flug-
verbindungen und damit zur Definition der Airline-Metrik.
Wir haben S-Graphen als gerichtete Graphen (Digraphen) definiert. Ungerichtete S-Gra-
phen behandeln wir nicht als eigene Art von Graphen, sondern als spezielle S-Graphen.
Dabei verwenden wir eine unprazise, aber gebrauchliche Schreibweise (siehe [1]).
Definition 2.16. Ein S-Graph G = (V, cost) heißt ungerichtet, falls cost symmetrisch ist,
d.h. cost(v, w) = cost(w, v) fur alle v, w ∈ V . In diesem Fall sind Kanten bzw. Nichtkanten
ungeordnete Knotenpaare. Wir verwenden allerdings weiter die Schreibweise E, E ⊆ V × V ,
aber wir schreiben (v, w) = (w, v), so daß (v, w) und (w, v) dieselbe Kante bezeichnen.
Entsprechend verandert sich die Kantenzahl im ungerichteten Graphen von e (Anzahl der
gerichteten Kanten) zu eu (Anzahl der ungerichteten Kanten). Wegen eu ≤ e ≤ 2eu, d.h.
eu ∈ Θ(e), spielt es bei Komplexitatsbetrachtungen keine Rolle, ob wir als Kantenzahl eines
ungerichteten Graphen die Anzahl der gerichteten Kanten oder die Anzahl der ungerichteten
Kanten verwenden.
2.5 Darstellung von Graphen im Speicher
Die Wahl der Darstellungsart fur einen bestimmten Algorithmus wird von Komplexitats-
fragen bestimmt. Hierbei ist nicht nur die Laufzeit fur die einzelnen Operationen des Algo-
rithmus entscheidend, sondern auch die fur die Initialisierung der Datenstruktur benotigte
Laufzeit und der Speicherplatzbedarf spielen eine Rolle.
2.5.1 Adjazenzmatrix
Sei G = (V, cost) ein S-Graph mit |V | = n. Mit Hilfe einer bijektiven Abbildung
v : 1, . . . , n −→ V
i 7−→ vi
(2.56)
konnen wir die Kostenfunktion cost : V × V → S als Abbildung cost : 1, . . . , n ×1, . . . , n → S schreiben. Eine Abbildung 1, . . . , n × 1, . . . , n → S heißt auch n × n-
Matrix uber S.
CG = (costij)i,j∈1,...,n ∈ Mat(n × n; S)
costij := cost(vi, vj)(2.57)
2.5 Darstellung von Graphen im Speicher 13
CG = (costij) heißt Kostenmatrix des Graphen G.
Die Kostenmatrix ist genau dann symmetrisch, wenn die Kostenfunktion symmetrisch ist,
d.h. wenn der Graph ungerichtet ist.
Der Vorteil dieser Darstellung ist, daß man in konstanter Zeit O(1) die Kosten eines Kno-
tenpaares erhalt. Insbesondere kann man in konstanter Zeit entscheiden, ob ein geordnetes
Knotenpaar eine Kante oder Nichtkante ist. Der Nachteil ist der große Speicherplatzbedarf
von O(n2). Fur kleine Kantenzahlen im Vergleich zur Knotenzahl bedeutet das eine Ver-
schwendung von Speicher. Lineare Laufzeit O(n + e) ist hiermit unerreichbar, da schon fur
die Initialisierung Ω(n2) Zeit benotigt wird.
Graphen, deren Anzahl der Kanten klein im Vergleich zum Quadrat der Knotenzahl ist,
kommen haufig vor, z.B. azyklische ungerichtete Graphen (ungerichtete Walder). Allerdings
werden wir im weiteren hauptsachlich vollstandige Graphen betrachten, fur die wegen e ∈Θ(n2) die Adjazenzmatrixdarstellung sehr geeignet ist.
2.5.2 Adjazenzlisten
Fur jeden Knoten v ∈ V verwaltet man eine Liste Lv seiner Nachfolger-Nachbarnknoten.
Diese Liste heißt Adjazenzliste oder Nachbarschaftsliste. Die Listenelemente enthalten wei-
tere Eintrage fur die Kostenfunktion und eventuelle weitere Knoten-/Kantenmarkierungen.
Zusatzlich speichert man Zeiger auf die Listen Lv1 , . . . , Lvn in einem Array der Lange n = |V |.
Der Vorteil dieser Darstellung ist ein Speicherplatzbedarf von nur O(n+e), weil Nichtkanten
in dieser Darstellung nicht explizit gespeichert werden. Der Nachteil ist, daß man fur die
Entscheidung, ob ein geordnetes Knotenpaar eine Kante oder Nichtkante ist, sowie fur die
Berechnung der Kosten einer Kante O(n)-Zeit benotigt.
14 2. Grundbegriffe
Kapitel 3
Allgemeine Pfadprobleme uber
abgeschlossenen Semiringen
Im diesem Kapitel sei S = (S, +, ·, 0S, 1S) ein nullteilerfreier abgeschlossener Semiring und
G = (V, cost) ein S-Graph mit Knotenmenge V = v1, . . . , vn und Knotenzahl n. Die
Kantenmenge von G sei E, |E| = e. Die Standardbeispiele seien wieder B,R und R+.
3.1 Wege in S-Graphen
Wir setzen nun die Behandlung von S-Graphen fort. Bisher haben wir geordnete Knoten-
paare (v, w) ∈ V × V betrachtet. Jetzt erweitern wir unsere Betrachtungen auf geordnete
Knotentupel (w0, . . . , wk) ∈ V +. Dazu setzen wir zunachst die Kostenfunktion cost auf V +
fort. So wie die Menge der Knotenpaare V × V in die Menge der Kanten E und die Menge
der Nichtkanten E zerfallt, so zerfallt auch die Menge der Knotentupel V + in die Menge der
Wege PathG und die Menge der Nichtwege PathG.
Definition 3.1. Die Kostenfunktion auf der Menge der Knotentupel sei wie folgt definiert:
cost : V + → S
cost(w0, . . . , wk) := cost(w0, w1) · cost(w1, w2) · . . . · cost(wk−1, wk)
cost(w0) := 1S
(3.1)
Definition 3.2. Ein geordneter Knotentupel p = (w0, . . . , wk) ∈ V + heißt Weg oder Pfad,
falls (wi, wi+1) ∈ E fur alle i ∈ 0, . . . , k−1, und Nichtweg oder Nichtpfad, falls (wi, wi+1) ∈E fur ein i ∈ 0, . . . , k − 1. Ein einzelner Knoten v stellt einen Weg (v) dar.
Bemerkung. Wegen der Nullteilerfreiheit von S gilt fur Wege p immer cost(p) 6= 0S . Fur
Nichtwege p gilt naturlich stets cost(p) = 0S .
15
16 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
Definition 3.3. Die Menge der Wege bezeichnen wir mit PathG, die der Nichtwege mit
PathG.
PathG ∩ PathG = ∅(3.2)
PathG ∪ PathG = V +(3.3)
PathG = p ∈ V + : cost(p) 6= 0S(3.4)
PathG = p ∈ V + : cost(p) = 0S(3.5)
Nachdem wir die Kostenfunktion auf Wege bzw. Knotentupel fortgesetzt haben, definieren
wir jetzt die Kostenfunktion fur Mengen von Wegen bzw. Mengen von Knotentupel. Mit
anderen Worten: Wir setzen die Kostenfunktion auf der Potenzmenge von V + fort.
Definition 3.4. Die Kostenfunktion auf der Potenzmenge der Knotentupel, P(V +) := P :
P ⊆ V +, sei wie folgt definiert:
cost : P(V +) −→ S
cost(P ) :=∑p∈P
cost(p)(3.6)
Hieraus kann man leicht einige Folgerungen ableiten.
Satz 3.1. Es seien P, P1, P2 ⊆ V +. Dann gilt:
cost(∅) = 0S(3.7)
cost(P1) + cost(P2) = cost(P1 ∪ P2) + cost(P1 ∩ P2)(3.8)
cost(P1) + cost(P2) = cost(P1 ∪ P2), falls P1 ∩ P2 = ∅(3.9)
cost(P ) = 0S , falls P ⊆ PathG(3.10)
cost(P ) = cost(P ∩ PathG)(3.11)
Ein weiterer wichtiger Begriff ist der Begriff”Lange eines Weges“.
Definition 3.5. Die Lange eines Weges p = (w0, . . . , wk) ist die Anzahl der Kanten auf dem
Weg, hier also k. Auch fur Nichtwege p = (w0, . . . , wk) sei k die Lange. Wir bezeichnen die
Lange von p mit |p|. Ein Kreis ist ein Weg, bei dem der Startknoten zugleich der Endknoten
ist, hier also w0 = wk. Ein Weg oder Kreis heißt einfach, wenn seine Knoten paarweise
verschieden sind (erlaubt ist naturlich die Ausnahme w0 = wk). Ein Zyklus ist ein einfacher
Kreis, dessen Lange mindestens 1 betragt.
Bemerkung. Ein einzelner Knoten v stellt einen Weg (v) der Lange 0 dar. Insbesondere gibt
es immer einen Weg der Lange 0 von einem Knoten zu sich selbst. Die Kanten sind die Wege
der Lange 1.
3.2 Matrizenprodukte und Wege 17
Definition 3.6. Die Menge der Wege der Lange k bezeichnen wir mit PathkG, die der Nicht-
wege der Lange k mit PathkG.
PathkG ∩ Pathk
G = ∅(3.12)
PathkG ∪ Pathk
G = V k+1(3.13)
PathkG = V k+1 ∩ PathG(3.14)
PathkG = V k+1 ∩ PathG(3.15)
V + =⋃k≥0
V k+1 =⋃k≥0
PathkG ∪
⋃k≥0
PathkG(3.16)
3.2 Matrizenprodukte und Wege
Die Kostenfunktion cost eines S-Graphen G = (V, cost) ist selber ein Element des abge-
schlossenen Semirings Abb(V × V, S). Man kann deshalb die Summe und das Produkt zwei-
er Kostenfunktionen, sowie den Abschluß einer Kostenfunktion bilden. Diese Operationen
ubertragen wir nun auf S-Graphen und machen den Raum Graph(V,S) damit selbst zu
einem abgeschlossenen Semiring.
Definition 3.7. Fur zwei Graphen G1 = (V, cost1), G2 = (V, cost2) ∈ Graph(V,S) seien
G1 + G2 ∈ Graph(V,S) und G1 · G2 ∈ Graph(V,S) definiert durch
G1 + G2 = (V, cost1 + cost2)(3.17)
G1 · G2 = (V, cost1 · cost2)(3.18)
Der Nullgraph G0S ∈ Graph(V, S) und der Einheitsgraph GIS ∈ Graph(V, S) seien definiert
durch
G0S = (V, 0S), 0S : V × V −→ S, 0S(x, y) = 0S(3.19)
GIS = (V, IS), IS : V × V −→ S, IS(x, y) =
1S falls x = y
0S falls x 6= y(3.20)
Satz 3.2. (Graph(V,S), +, ·, G0S, GIS) ist ein abgeschlossener Semiring.
Definition 3.8. Sei G = (V, cost) ∈ Graph(V,S). Potenzen von G seien wie ublich definiert:
G0 = (V, cost0) = GIS(3.21)
Gi+1 = (V, costi+1) = Gi · G(3.22)
Der Abschluß von G ist
G∗ := (V, cost∗) =∑i≥0
Gi(3.23)
18 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
Wir untersuchen nun den Zusammenhang zwischen Wegen in G und Potenzen der Kosten-
funktion, d.h. costk mit k ≥ 0 und cost∗. Dazu benotigen wir eine Schreibweise fur die Wege
von einem Anfangsknoten v ∈ V zu einem Zielknoten w ∈ V .
Definition 3.9. Seien v, w ∈ V zwei beliebige Knoten. Ein Weg von v nach w ist ein Weg
p = (w0, . . . , wk) ∈ PathG mit w0 = v und wk = w. Die Menge aller Wege von v nach w
bezeichnen wir mit PathG(v, w), die der Nichtwege von v nach w mit PathG(v, w). Entspre-
chend sei PathkG(v, w) die Menge der Wege von v nach w der Lange k und Pathk
G(v, w) die
Menge der Nichtwege von v nach w der Lange k.
Die Kantenmenge E ist als Teilmenge von V ×V zugleich eine Relation auf V . Deshalb kann
man zu E die k-te Potenz Ek fur k ∈ N sowie die reflexiv-transitive Hulle E∗ :=⋃∞
i=0 Ei
bilden (siehe Def. 2.3).
Satz 3.3. Es sei Ek die k-te Potenz von E und E∗ die reflexiv-transitive Hulle von E. Dann
gilt fur alle v, w ∈ V und k ∈ N :
PathkG(v, w) 6= ∅ ⇐⇒ (v, w) ∈ Ek(3.24)
PathG(v, w) 6= ∅ ⇐⇒ (v, w) ∈ E∗(3.25)
Insbesondere gilt: Path1G = E1 = E.
Wir konnen nun den zentralen Satz dieses Abschnitts formulieren, der einen Zusammenhang
zwischen dem Matrixprodukt und Wegen liefert.
Satz 3.4. Seien v, w ∈ V wieder zwei beliebige Knoten. Dann gilt:
costk(v, w) =∑
p∈PathkG(v,w)
cost(p) = cost(PathkG(v, w)), fur alle k ∈ N(3.26)
cost∗(v, w) =∑
p∈PathG(v,w)
cost(p) = cost(PathG(v, w))(3.27)
Beweis. Induktion uber k.
k = 0:
cost(Path0G(v, w)) =
cost(v) falls v = w
cost(∅) falls v 6= w
=
1S falls v = w
0S falls v 6= w
= IS(v, w)
= cost0(v, w)
3.2 Matrizenprodukte und Wege 19
k = 1:
cost(Path1G(v, w)) =
cost(v, w) falls (v, w) ∈ PathG
0S falls (v, w) ∈ PathG
= cost(v, w)
= cost1(v, w)
k ⇒ k + 1:
cost(Pathk+1G (v, w)) = cost(v × V k × w)
= cost(⋃u∈V
(v × V k−1 × u × w))
=∑u∈V
(cost(v × V k−1 × u) · cost(u, w))
=∑u∈V
(cost(PathkG(v, u)) · cost(u, w))
=∑u∈V
(costk(v, u) · cost(u, w))
= costk+1(v, w)
k = ∗:
cost(PathG(v, w)) = cost(⋃k≥0
PathkG(v, w))
=∑k≥0
cost(PathkG(v, w))
=∑k≥0
costk(v, w)
= cost∗(v, w)
Diesen Satz konnen wir naturlich auch in der gewohnten Kostenmatrixschreibweise formu-
lieren.
Definition 3.10. Sei CG = (costij)i,j∈1,...,n ∈ Mat(n × n; S) mit costij := cost(vi, vj) die
Kostenmatrix von G = (V, cost). Die k-te Potenz der Kostenmatrix bezeichnen wir mit
CkG = (costk
ij)i,j∈1,...,n ∈ Mat(n×n; S). Den Abschluß der Kostenmatrix bezeichnen wir mit
C∗G = (cost∗ij)i,j∈1,...,n ∈ Mat(n × n; S).
20 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
Satz 3.5. Seien i, j ∈ 1, . . . , n. Dann gilt:
costkij =
∑p∈Pathk
G(vi,vj)
cost(p) = cost(PathkG(vi, vj)), fur alle k ∈ N(3.28)
cost∗ij =∑
p∈PathG(vi,vj)
cost(p) = cost(PathG(vi, vj))(3.29)
3.3 Das”general path“-Problem
Nachdem wir nun im letzten Kapitel und in den ersten beiden Abschnitten dieses Kapitels
die benotigten Hilfsmittel bereitgestellt haben, konnen wir uns jetzt endlich dem”general
path“-Problem widmen. Dieses Problem ist eines der fundamentalen algorithmischen Gra-
phenprobleme. Teilprobleme vieler Anwendungen lassen sich als”general path“-Problem
formulieren. Auch unsere Definition der Airline-Metrik im nachsten Kapitel wird auf diesem
Problem beruhen.
Definition 3.11 (”general path“-Problem).
Man berechne ∑p∈PathG(v,w)
cost(p)(3.30)
fur alle v, w ∈ V .
Dieses ist gleichbedeutend mit der Berechnung des Abschlusses von G
G∗ = (V, cost∗)(3.31)
bzw. mit der Berechnung des Abschlusses der Kostenmatrix von G
C∗G = (cost∗ij)i,j∈1,...,n ∈ Mat(n × n; S)(3.32)
wie wir im letzten Abschnitt gezeigt haben.
Fur unsere Standardbeispiele B,R und R+ betrachten wir das”general path“-Problem etwas
ausfuhrlicher.
Beispiel 3.1. Sei hier S der boolesche Semiring B = (0, 1,∨,∧, 0, 1). G = (V, cost) ist ein
B-Graph mit Kantenmenge E.
3.3 Das”general path“-Problem 21
Dann ist
cost∗(v, w) = cost(PathG(v, w))
=∨
p∈PathG(v,w)
cost(p)
=
1 falls PathG(v, w) 6= ∅0 falls PathG(v, w) = ∅
=
1 falls (v, w) ∈ E∗
0 falls (v, w) 6∈ E∗
Die Kantenmenge des Abschlusses G∗ = (V, cost∗) von G ist die reflexiv-transitive Hulle
E∗ =⋃∞
i=0 Ei der Kantenmenge E von G.
Das”general path“-Problem fur B-Graphen ist damit nichts anderes als das
”transitive
closure“-Problem fur gewohnliche unmarkierte Graphen.
Definition 3.12 (”transitive closure“-Problem).
Sei G = (V, E) ein Graph. Man berechne die transitive Hulle von G, d.h. den Graphen
G∗ = (V, E∗) mit E∗ = (v, w) : es gibt einen Pfad in G von v nach w.
Beispiel 3.2. Jetzt sei S der nichtnegative (inf, +)-Semiring R+ = (R+ ∪∞, inf, +,∞, 0).
cost∗(v, w) = cost(PathG(v, w))
= infcost(p) : p ∈ PathG(v, w)
Jeden Weg p ∈ PathG(v, w) kann man zu einem einfachen Weg p′ mit |p′| ≤ |p|, |p′| < n
und cost(p′) ≤ cost(p) verkurzen, indem man innere Zyklen entfernt. Um cost∗(v, w) zu
berechnen, brauchen wir deshalb nur die endliche Menge⋃n−1
k=0 PathkG(v, w) zu betrachten
cost∗(v, w) = infcost(p) : p ∈n−1⋃k=0
PathkG(v, w)
=
mincost(p) : p ∈ ⋃n−1k=0 Pathk
G(v, w) falls PathG(v, w) 6= ∅∞ falls PathG(v, w) = ∅
Insbesondere gibt es im Fall cost∗(v, w) < ∞ mindestens einen Weg p ∈ PathG(v, w) mit
cost∗(v, w) = cost(p). Derartige Wege heißen kostengunstigste Wege von v nach w.
Bemerkung. Meistens interpretiert man bei R+-Graphen die Kosten einer Kante als Lange
der Kante. Kostengunstigste Wege nennt man dann kurzeste Wege. Man beachte, daß diese
Interpretation der Kostenfunktion leicht zu Mißverstandnissen fuhren kann, weil der Begriff
22 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
”Lange eines Weges“ dann zweimal definiert ist. Zum einen ist dann cost(p) = cost(w0, w1)+
cost(w1, w2)+ . . .+cost(wk−1, wk) die Lange des Weges p = (w0, . . . , wk), zum anderen heißt
|p| = k ja auch Lange des Weges p. Auch der Begriff”kurzester Weg von v nach w“ ist
dann mit zwei unterschiedlichen Bedeutungen belegt. Man muß bei der Interpretation der
Kostenfunktion als Lange und Benutzung des Begriffs Lange darauf achten, daß klar ist,
welche der beiden Langen gemeint ist.
Fur R+-Graphen G gibt die Kostenfunktion cost∗ des Abschlusses G∗ = (V, cost∗) die Kosten
der kostengunstigsten Weges zwischen den Knoten an. Das”general path“-Problem fur R+-
Graphen nennt man deshalb”all pairs least cost path“-Problem bzw.
”all pairs shortest
path“-Problem.
Definition 3.13 (”all pairs least cost path“-Problem).
Sei G = (V, cost) ein R+-Graph. Man berechne den Abschluß G∗ = (V, cost∗) von G, d.h.
man bestimme zu jedem Knotenpaar (v, w) ∈ V × V die Kosten eines kostengunstigsten
Weges von v nach w (bzw. die Langen der kurzesten Wege).
R+-Graphen sind der geeignete Rahmen, um Wegprobleme von Distanzgraphen zu behan-
deln. Indem man Distanzgraphen, d.h. Graphen mit einer nichtnegativen Kantenmarkierung,
als Graphen mit einer Kantenmarkierung uber den abgeschlossenen Semiring R+ auffaßt,
wird aus dem”all pairs least cost path“-Problem ein Spezialfall des
”general path“-Problems.
Man kann dieses Problem dann mit dem Algorithmus von Kleene losen (siehe nachsten Ab-
schnitt). Insbesondere ermoglicht der Zusammenhang des”general path“-Problems mit der
Matrizenmultiplikation untere Schranken fur die Laufzeit des”all pairs least cost path“-
Problem fur Distanzgraphen zu bestimmen. Abgeschlossene Semiringe werden deshalb in
der Literatur immer dann eingefuhrt, wenn nicht nur ein Algorithmus fur ein Wegproblem
entwickelt werden soll, sondern daruber hinaus auch untere Schranken bestimmt werden
sollen, d.h. wenn die Komplexitat von Wegproblemen untersucht werden soll.
Dieses ist bei unserer Aufgabe der Fall, wie wir im nachsten Kapitel bei der Definition und
Untersuchung der Airline-Metrik sehen werden.
Beispiel 3.3. Auch im Fall des reellen (inf, +)-Semirings R = (R ∪ ∞,−∞, inf, +,∞, 0)
gilt
cost∗(v, w) = cost(PathG(v, w))
= infcost(p) : p ∈ PathG(v, w)
Anders als bei R+-Graphen konnen hier die Kosten von Kanten und damit auch von Wegen
negativ sein. Auch wenn cost(v, w) 6= −∞ fur alle v, w ∈ V , so ist dennoch cost∗(v, w) = −∞
3.4 Der Algorithmus von Kleene 23
moglich, namlich dann, wenn es einen Weg von v nach w gibt, der einen Zyklus mit negativen
Kosten durchlauft. Man kann dann einen Weg von v nach w mit beliebig kleinen Kosten
konstruieren, indem man diesen Zyklus mehrfach durchlauft.
Insbesondere kann man sehen, daß R-Graphen der geeignete Rahmen sind, um Wegprobleme
von Graphen mit reellwertigen Kantenmarkierungen zu behandeln.
Selbstverstandlich gibt es viele weitere abgeschlossene Semiringe, z.B. (siehe [27])
S1 = (R+ ∪ ∞,−∞, sup, +,−∞, 0), mit (−∞) + ∞ := −∞(3.33)
S2 = (R+ ∪ ∞, sup, min, 0,∞)(3.34)
Im Fall S = S1 wird offenbar aus dem”general path“-Problem ein
”all pairs maximum cost
path“-Problem (bzw. ein”all pairs longest path“-Problem bei Interpretation der Kostenfunk-
tion als Lange). Der abgeschlossene Semiring S2 ist dagegen sehr geeignet zur Modellierung
von Kapazitaten von Transportwegen oder Nachrichtenverbindungen. Dazu interpretiert man
cost(v, w) als Kapazitat der Verbindungskante von v nach w. Die Kapazitat eines Weges ist
dann das Minimum der Kapazitaten der Kanten des Weges. cost∗(v, w) ist die Maximalka-
pazitat eines Weges von v nach w.
3.4 Der Algorithmus von Kleene
In diesem Abschnitt behandeln wir den Kleene-Algorithmus, der das”general path“-Problem
in der Kostenmatrixdarstellung lost. Dabei werden Θ(n3) Semiring-Operationen “+, ·, ∗”
benotigt. Wegen a∗ = 1 fur a ∈ B, a∗ = 0 fur a ∈ R+ und a∗ =
0 falls a ≥ 0
−∞ falls a < 0fur
a ∈ R, ist in den Fallen B, R und R+ auch die Gesamtanzahl der Semiring-Operationen
“+, ·” in O(n3). Der Speicherbedarf des Kleene-Algorithmus betragt Θ(n2).
Zunachst benotigen wir einige Definitionen, um den Algorithmus formulieren zu konnen.
Definition 3.14. Es sei Pij = PathG(vi, vj) und P(k)ij die Menge aller Wege p ∈ Pij , die
folgende Eigenschaften erfullen:
1) Alle inneren Knoten von p sind in der Menge v1, . . . , vk enthalten.
2) Wenn i = j > k, dann ist |p| ≥ 1,
d.h. der triviale Weg (vi) der Lange 0 ist nur dann in Pij, wenn i = j ≤ k.
24 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
Offenbar ist P(0)ij = Path1
G(vi, vj) =
(vi, vj) falls (vi, vj) ∈ E
∅ falls (vi, vj) ∈ E
und P(n)ij = Pij = PathG(vi, vj).
Definition 3.15. Sei fur i, j ∈ 1, . . . , n und k ∈ 0, . . . , n
c(k)ij :=
∑p∈P
(k)ij
cost(p)(3.35)
Insbesondere ist dann c(0)ij = costij und c
(n)ij = cost∗ij .
Das”general path“-Problem ist die Berechnung der Matrix (cost∗ij) aus der Matrix (costij).
Der Algorithmus von Kleene berechnet dazu iterativ die Matrizen (c(k)ij ), k = 0, 1, . . . , n.
Bemerkung. Diese Vorgehensweise, d.h. die Konstruktion von Losungen fur zunehmend
großere Teilprobleme (hier: (costij) = (c(0)ij ), . . . , (c
(n)ij ) = (cost∗ij)), nennt man dynamische
Programmierung (siehe [28]). Bekannt wurde diese Methode durch Bellman (siehe [4]). Die
dynamische Programmierung ist auch eine der Wurzeln des divide-and-conquer-Paradigmas.
Fur den Kleene-Algorithmus benotigen wir eine Rekursionsformel zur Berechnung von (c(k)ij ).
Mit Hilfe der Zerlegung
P(k)ij = P
(k−1)ij ∪ p ∈ P
(k)ij \ P
(k−1)ij : |p| ≥ 1 falls i 6= k oder j 6= k(3.36)
P(k)ij = P
(k−1)ij ∪ p ∈ P
(k)ij \ P
(k−1)ij : |p| ≥ 1 ∪ (vi) falls i = j = k(3.37)
kann man leicht (siehe [27]) folgende Rekursionsformel herleiten.
Satz 3.6. Fur k = 1, . . . , n gilt
c(k)ij = c
(k−1)ij + (c
(k−1)ik · (c(k−1)
kk )∗ · c(k−1)kj ) falls i 6= k oder j 6= k(3.38)
c(k)ij = c
(k−1)ij + (c
(k−1)ik · (c(k−1)
kk )∗ · c(k−1)kj ) + 1 falls i = j = k(3.39)
Hieraus erhalten wir nun unmittelbar den Algorithmus von Kleene.
Algorithmus 3.1. (Algorithmus von Kleene)
(∗ Eingabe : (costij) −Kostenmatrix des Graphen G
Ausgabe : (cost∗ij) −Kostenmatrix des Graphen G∗ ∗)1) for all i, j ∈ 1, . . . , n do
2) c(0)ij := costij ;
3) end;
4) for k := 1 to n do
3.4 Der Algorithmus von Kleene 25
5) for all i, j ∈ 1, . . . , n do
6) c(k)ij := c
(k−1)ij + (c
(k−1)ik · (c(k−1)
kk )∗ · c(k−1)kj );
7) if i = j = k then
8) c(k)ij := c
(k)ij + 1;
9) end;
10) end;
11) end;
12) for all i, j ∈ 1, . . . , n do
13) cost∗ij := c(n)ij ;
14) end;
In dieser Form benotigt der Kleene-Algorithmus Θ(n3) Speicherplatz und Θ(n3) Semiring-
Operationen “+, ·, ∗”. Man kann ihn aber so implementieren, daß er nur Θ(n2) Speicherplatz
braucht.
Unser Interesse gilt dem nichtnegativen (inf, +)-Semiring R+ = (R+∪∞, inf, +,∞, 0). Hier
ist die Infimumbildung die Semiringaddition und die Addition die Semiringmultiplikation.
Das Nullelement ist ∞ und das Einselement ist 0. Fur die Abschlußoperation “∗” gilt a∗ = 0
fur alle a ∈ R+ .
Algorithmus 3.2. (Algorithmus von Kleene fur den abgeschlossenen Semiring R+)
(∗ Eingabe : (costij) −Kostenmatrix des Graphen G
Ausgabe : (cost∗ij) −Kostenmatrix des Graphen G∗ ∗)1) for all i, j ∈ 1, . . . , n do
2) c(0)ij := costij;
3) end;
4) for k := 1 to n do
5) for all i, j ∈ 1, . . . , n do
6) c(k)ij := min(c
(k−1)ij , c
(k−1)ik + c
(k−1)kj );
7) if i = j = k then
8) c(k)ij := 0;
9) end;
10) end;
11) end;
12) for all i, j ∈ 1, . . . , n do
13) cost∗ij := c(n)ij ;
14) end;
26 3. Allgemeine Pfadprobleme uber abgeschlossenen Semiringen
Diesen Algorithmus vereinfachen wir noch etwas durch Umformulieren. Das Ergebnis ist der
sog. Algorithmus von Floyd/Warshall.
Algorithmus 3.3. (Algorithmus von Floyd/Warshall)
(∗ Eingabe : (costij) −Kostenmatrix des Graphen G
Ausgabe : (cost∗ij) −Kostenmatrix des Graphen G∗ ∗)1) for all i, j ∈ 1, . . . , n do
2) cost∗ij :=
costij falls i 6= j
0 falls i = j;
3) end;
4) for k := 1 to n do
5) for all i, j ∈ 1, . . . , n do
6) cost∗ij := min(cost∗ij , cost∗ik + cost∗kj);
7) end;
8) end;
Der Algorithmus von Floyd/Warshall benotigt offenbar insgesamt Θ(n3) Semiring-Operatio-
nen “min, +” und hat den Speicherbedarf Θ(n2).
Bemerkung. Man kann den Algorithmus 3.3 durch Einfuhrung geeigneter Zeiger leicht so
erganzen, daß er nicht nur die Langen der kurzesten Wege berechnet, sondern auch solche
Wege selbst liefert (siehe [18]), wobei die Großenordnung der Zeit- bzw. Speicherplatzkomple-
xitat unverandert bleibt. Dazu speichert man zu jedem Knotenpaar (v, w), dessen kurzeste
Verbindung nicht der direkte Weg von v nach w ist, zusatzlich einen Zeiger auf einen inneren
Knoten u eines kurzesten Weges von v nach w. Diese Information dient dazu, einen kurzesten
Weg von v nach w rekursiv aus einem kurzesten Weg von v nach u und einem kurzesten Weg
von u nach w zusammenzusetzen.
Realisiert wird dieses, indem man eine weitere n × n-Matrix
var W : array [1..n, 1..n] of [0..n]
verwendet. Zur Initialisierung von W fugt man in Zeile 2) folgende Anweisung hinzu:
W [i, j] := 0;
Die Zuweisung in Zeile 6) wird durch folgende Zeilen ersetzt:
if cost∗ij > cost∗ik + cost∗kj then
cost∗ij := cost∗ik + cost∗kj;
W [i, j] := k;
end;
Mit Hilfe von W kann man dann zu jedem Knotenpaar einen kurzesten Weg in der Zeit
O(m) berechnen, wobei m die Lange dieses Weges ist.
Kapitel 4
Die Airline-Metrik
4.1 Einfuhrung
Nachdem wir in den beiden letzten Kapiteln die Grundlagen bereitgestellt haben, wollen wir
in diesem Kapitel eine Metrik definieren, welche die in der Aufgabenstellung beschriebene
Situation modelliert. Betrachten wir also zunachst die Ausgangssituation:
Wir bewegen uns im R2 und benutzen die euklidische Metrik L2, welche wir auch durch die
Schreibweise dE(x, y) oder |xy| von anderen Metriken unterscheiden. Die euklidische Distanz
zweier Punkte entspricht der Zeit fur die direkte Bewegung zwischen diesen Punkten ohne
Benutzung von Flugverbindungen. Hier konnen wir zu erstenmal verallgemeinern: Statt von
Zeit sprechen wir im folgenden von Kosten oder Lange, und aus schnellster Verbindung wird
kostengunstigste bzw. kurzeste Verbindung.
Die Flughafen mit den Flugverbindungen modellieren wir durch einen ungerichteten R+-
Graphen G = (V, cost), V ⊂ R2 . Die Knoten entsprechen den Flughafen. Zwei Knoten v, w,
v 6= w seien genau dann adjazent, wenn zwischen den Flughafen mindestens eine direkte
Flugverbindung besteht. cost(v, w) entspricht dann den Kosten der kurzesten direkten Flug-
verbindung zwischen v und w. cost ist symmetrisch, und es gelte immer cost(v, w) > 0 fur
v 6= w.
Die Airline-Metrik dieses Graphen G bezeichnen wir mit “adG”. Wir wollen nun eine moglichst
einfache und praktikable Definition dieser Airline-Metrik angeben. Die Definition muß die
Vorgaben der Aufgabenstellung erfullen und eindeutig sein. Außerdem wollen wir die Airline-
Metrik so definieren, daß man die Definition leicht in einen Algorithmus zur Berechnung der
Airline-Distanz adG(x, y) umwandeln kann. Dazu uberlegen wir uns einige Moglichkeiten,
von denen wir dann die uns am geeignetesten erscheinende auswahlen.
27
28 4. Die Airline-Metrik
• Wir konnen adG(x, y) als das Infimum der Lange aller zulassigen Wege von x nach y
definieren. Dazu mußten wir zunachst klaren, was unter einem zulassigem Weg zu ver-
stehen ist, z.B. das Bild einer geeigneten stuckweise stetig differenzierbaren Abbildung
w : [0, 1] → R2 . Danach mußten wir die Lange eines zulassigen Weges definieren.
• Wir konnen adG(x, y) als die großte Metrik definieren, die folgende Eigenschaft erfullt:
Sei M die Menge aller Metriken d auf dem R2 mit d(x, y) ≤ |xy| fur alle x, y ∈ R
2 und
d(v, w) ≤ cost(v, w) fur v, w ∈ V . Die Airline-Metrik sei dann
adG(x, y) := supd(x, y) : d ∈ M
• Wir konnen die Vorgaben aus der Aufgabenstellung direkt umsetzen:
adG(x, y) := infq : q = |xy| oder q = |xw0| + min|w0w1|, cost(w0, w1) + · · ·+ min|wm−1wm|, cost(wm−1, wm) + |wmy| mit w0, . . . , wm ∈ V
• Wir konnen mittels Graphentransformationen G in einen R+-Graphen G = (V , cost)
mit der Knotenmenge V = V ∪ x, y umwandeln, und dann adG mit Hilfe des Ab-
schlusses von G, G∗ = (V , cost∗), definieren:
adG(x, y) := cost∗(x, y)
• Wir konnen adG(x, y) auch in zwei Schritten definieren. Dazu definieren wir im ersten
Schritt adG(x, y) fur den Spezialfall x, y ∈ V . Dieses benutzen wir dann zur Definition
von adG(x, y) im allgemeinen Fall x, y ∈ R2 :
adG(x, y) := minq : q = |xy| oder q = |xv| + adG(v, w) + |wy| mit v, w ∈ V
Selbstverstandlich mussen wir unabhangig von der gewahlten Definition in jedem Fall zeigen,
daß adG auch tatsachlich eine Metrik auf dem R2 ist.
Mit der ersten Definition kann man die Vorgaben aus der Aufgabenstellung sehr direkt um-
setzen. Außerdem ist sie allgemein verwendbar: Die Metrik kann ortsabhangig sein, und der
betrachtete Raum kann eine differenzierbare Mannigfaltigkeit sein (siehe [25]). Wir untersu-
chen aber nur die euklidische Ebene. Zwar ist diese Definition vielleicht fur mathematische
Untersuchungen interessant, fur uns ist sie aber ungeeignet. Das Infimum der Langen einer
uberabzahlbaren Menge von Wegen kann man nicht mit einem Algorithmus berechnen. Diese
Definition ist auch die mit Abstand am aufwendigste. Sie benotigt eigene Begriffe (”zulassige
Wege“,”Lange von zulassigen Wegen“) und mathematische Hilfmittel.
4.2 Definition der Airline-Metrik 29
Die zweite Definition benutzt eine interessante Eigenschaft der Airline-Metrik. Zur Berech-
nung der Distanz zweier Punkte in der Airline-Metrik ist sie aber genauso ungeeignet, wie
die erste. Es ist besser, diese Eigenschaft als Theorem zu formulieren, als sie zur Definition
zu verwenden.
Die dritte Definition hat die großte Nahe zur Aufgabenstellung. Aus ihr kann man leicht
ein endliches Verfahren zur Berechnung der Distanz zweier Punkte in der Airline-Metrik
herleiten.
Die vierte Definition entspricht der dritten, ist aber von der Formulierung her eleganter.
Ich habe mich fur die funfte Definition entschieden. Sie entspricht auch der dritten, orientiert
sich aber mehr an der algorithmischen Vorgehensweise. Ein Algorithmus zur Berechnung von
Abstanden bzgl. der Airline-Metrik wird zunachst eine Matrix mit den Werten von adG(v, w)
fur v, w ∈ V berechnen.
4.2 Definition der Airline-Metrik
In diesem Abschnitt definieren wir die Airline-Metrik eines R+-Graphen G = (V, cost). Der
Graph G muß bestimmte Voraussetzungen erfullen. Einerseits muß die Knotenmenge eine
Teilmenge der euklidischen Ebene sein, d.h. V ⊂ R2, andererseits muß die Kostenfunktion
bestimmte metrische Eigenschaften erfullen. Diese Eigenschaften sind Positivitat und Sym-
metrie.
4.2.1 Metrische Eigenschaften von R+-Graphen
Wir beschaftigen uns in diesem Unterabschnitt mit metrischen Begriffen und ubertragen
diese in die Graphentheorie.
Definition 4.1.
Sei G = (V, cost) ein R+-Graph mit Knotenmenge V , Kostenfunktion cost : V × V →R+ ∪ ∞ und Kantenmenge E = (x, y) : cost(x, y) 6= ∞.1) G und cost heißen semidefinit, wenn fur alle x ∈ V gilt:
cost(x, x) = 0(4.1)
2) G und cost heißen positiv, wenn fur alle x, y ∈ V gilt:
x 6= y ⇒ cost(x, y) > 0(4.2)
30 4. Die Airline-Metrik
3) G und cost heißen definit, wenn fur alle x, y ∈ V gilt:
cost(x, y) = 0 ⇔ x = y(4.3)
d.h. G ist genau dann definit, wenn G semidefinit und positiv ist.
4) G und cost heißen symmetrisch, wenn fur alle x, y ∈ V gilt:
cost(x, y) = cost(y, x)(4.4)
d.h. G ist genau dann symmetrisch, wenn G ungerichtet ist.
5) G und cost erfullen die Dreiecksungleichung, wenn fur alle x, y, z ∈ V gilt:
cost(x, z) ≤ cost(x, y) + cost(y, z)(4.5)
6) G und cost heißen endlich, wenn fur alle x, y ∈ V gilt:
cost(x, y) 6= ∞(4.6)
d.h. G ist genau dann endlich, wenn G vollstandig ist. Vollstandigkeit bedeutet, daß alle
Knotenpaare Kanten sind, also E = V × V .
Definition 4.2. Ein pseudometrischer Graph ist ein semidefiniter, symmetrischer, die Drei-
ecksungleichung erfullender R+-Graph G = (V, cost). In diesem Fall ist die Kostenfunktion
cost : V × V → R+ ∪ ∞ eine Pseudometrik auf der Knotenmenge V .
Definition 4.3. Ein metrischer Graph ist ein endlicher, definiter, symmetrischer, die Drei-
ecksungleichung erfullender R+-Graph G = (V, cost). In diesem Fall ist die Kostenfunktion
cost : V × V → R+ eine Metrik auf der Knotenmenge V .
Bemerkung. Ein metrischer Graph ist offenbar nichts anderes als endlicher metrischer Raum.
Jeden metrischen Raum (X, d) mit endlicher Grundmenge X und Metrik d : X × X →R+ kann man als metrischen Graphen mit X als Knotenmenge und d als Kostenfunktion
auffassen.
Definition 4.4. Sei (X, d) ein metrischer Raum und V ⊆ X eine endliche Teilmenge von
X. Dann sei wie folgt ein R+-Graph MGV,d definiert:
MGV,d = (V, d|V ), d|V (x, y) := d(x, y)(4.7)
4.2 Definition der Airline-Metrik 31
d|V ist die Einschrankung der Metrik auf V × V , d.h. die Kostenfunktion von MGV,d un-
terscheidet sich von der Metrik d nur durch den eingeschrankten Definitionsbereich. MGV,d
ist offensichtlich ein metrischer Graph. Wir nennen ihn den metrischen Graphen von V bzgl.
d. Weil wir in dieser Arbeit speziell die euklidische Ebene (R2 , dE) als zugrunde liegenden
metrischen Raum verwenden, schreiben wir auch einfach MGV statt MGV,dEund dE,V statt
dE|V d.h.
MGV = (V, dE,V ), dE,V (x, y) := |xy|(4.8)
MGV heißt dann metrischer Graph von V .
4.2.2 Semiringoperationen und metrische Eigenschaften
In diesem Unterabschnitt untersuchen wir, inwieweit metrische Eigenschaften von R+-Gra-
phen unter den Semiringoperationen des abgeschlossenen Semirings Graph(V,R+) erhalten
bleiben.
Zur Erinnnerung: Sei S ein abgeschlossener Semiring. Mit Hilfe der Semiringoperationen von
S haben wir auch fur Matizen und Abbildungen X × X → S eine Summe und ein Produkt
definiert (Def. 2.12 und Def. 2.10). Damit werden Mat(n × n, S) und Abb(X × X, S) selbst
zu abgeschlossenen Semiringen (Satz 2.2 und Satz 2.1).
Wegen Graph(V,S) = (V, cost) : cost ∈ Abb(V × V, S) haben wir dann auch die Summe
und das Produkt zweier S-Graphen definiert (Def. 3.7) und die Menge Graph(V,S) damit
zu einem abgeschlossenen Semiring (Satz 3.2) gemacht.
Im Semiring R+ = (R+ ∪ ∞, inf, +,∞, 0) ist “inf” die Semiringaddition und “+” die Se-
miringmultiplikation. Wei dieses etwas verwirrend ist, mussen wir bei der Benutzung des Be-
griffs”Summe“ darauf achten, daß klar ist, ob die Semiringaddition oder die “+”-Operation
gemeint ist.
Vereinbarung: Seien a, b ∈ R+ ∪∞. Das Infimum von a und b sei die R+-Semiringsumme
inf(a, b). Die Summe von a und b sei das R+-Semiringprodukt a + b. Die Produkte von a
seien die R+-Semiringpotenzen, d.h. 0 · a = 0 und (k + 1) · a = k · a + a fur k ∈ N). Fur
a 6= ∞ ist das k-te Produkt von a gleich dem gewohnlichem Produkt zweier reeller Zahlen.
Im unendlichen Fall ist 0 · ∞ = 0 und k · ∞ = ∞ fur k > 0. Der Abschluß von a ist dann
a∗ := infk∈N
(k · a) = inf0, a, 2 · a, . . . = 0(4.9)
In R+ ist also a∗ = 0 fur alle a. Insbesondere gilt (a∗)∗ = a∗ fur alle a.
32 4. Die Airline-Metrik
Fur das Infimum von endlich vielen Zahlen aus R+ ∪ ∞ schreiben wir auch “min” statt
“inf”, weil dann das Minimum existiert und gleich dem Infimum ist. Zusatzlich definieren
wir min ∅ := ∞, weil auch inf ∅ = ∞ gilt.
Definition 4.5 (Der abgeschlossene Semiring Graph(V,R+)).
(Graph(V,R+), inf, +, G∞, GI) sei der abgeschlossene Semiring der R+-Graphen mit der
Knotenmenge V . Das Nullelement ist der ∞-Graph G∞ und das Einselement ist der Ein-
heitsgraph GI.
G∞ = (V, ∞), ∞ : V × V −→ R+ ∪ ∞, ∞(x, y) = ∞(4.10)
GI = (V, I), I : V × V −→ R+ ∪ ∞, I(x, y) =
0 falls x = y
∞ falls x 6= y(4.11)
Das Minimum von G1 = (V, cost1) und G2 = (V, cost2) ist
min(G1, G2) = (V, min(cost1, cost2))
min(cost1, cost2)(x, y) := min(cost1(x, y), cost2(x, y))(4.12)
Die Summe von G1 und G2 ist
G1 + G2 = (V, cost1 + cost2)
(cost1 + cost2)(x, y) := minz∈V
(cost1(x, z) + cost2(z, y)
)(4.13)
Sei k ∈ N . Die k-ten Produkte von G = (V, cost) sind rekursiv definiert
0 · G = (V, 0 · cost) = (V, I) = GI(4.14)
(k + 1) · G = (V, (k + 1) · cost) = k · G + G(4.15)
Der Abschluß von G ist
G∗ = (V, cost∗) = infk∈N
(k · G) = infGI, G, 2 · G, . . . (4.16)
Nach Satz 3.4 gilt folgender Zusammenhang zwischen den k-ten Produkten von G und Wegen
in G
(k · cost)(x, y) = cost(PathkG(x, y)) = mincost(p) : p ∈ Pathk
G(x, y)(4.17)
cost∗(x, y) = cost(PathG(x, y)) = mincost(p) : p ∈ PathG(x, y)(4.18)
Deshalb haben wir fur R+-Graphen das”general path“-Problem, d.h. die Berechnung des
Abschlusses G∗ = (V, cost∗), als”all pairs least cost path“-Problem bzw.
”all pairs shor-
test path“-Problem bezeichnet. Im Fall cost∗(x, y) < ∞ gibt es mindestens einen Weg
p ∈ PathG(x, y) mit cost∗(x, y) = cost(p). Derartige Wege heißen kostengunstigste bzw.
kurzeste Wege von x nach y. Zur Berechnung von G∗ haben wir aus dem Algorithmus von
Kleene (Algorithmus 3.1) den Algorithmus von Floyd/Warshall (Algorithmus 3.3) hergelei-
tet.
4.2 Definition der Airline-Metrik 33
Bemerkung. Man beachte besonders die Definition fur die Summe zweier Kostenfunktionen.
Es gilt normalerweise nicht (cost1 + cost2)(x, y) = cost1(x, y) + cost2(x, y)! Ebensowenig gilt
(k · cost)(x, y) = k · cost(x, y).
Satz 4.1 (Metrische Eigenschaften und die “min”-Operation).
Seien G1 = (V, cost1) und G2 = (V, cost2) zwei R+-Graphen.
1) Ist G1 semidefinit, dann ist auch min(G1, G2) semidefinit.
2) Sind G1 und G2 positiv, dann ist auch min(G1, G2) positiv.
3) Ist G1 definit und G2 positiv, dann ist auch min(G1, G2) definit.
4) Sind G1 und G2 symmetrisch, dann ist auch min(G1, G2) symmetrisch.
5) Ist G1 endlich, dann ist auch min(G1, G2) endlich.
Beweis. trivial
Satz 4.2 (Metrische Eigenschaften und die “∗”-Operation).
Sei G = (V, cost) ein R+-Graph mit Kantenmenge E. G∗ = (V, cost∗) sei der Abschluß von
G und (G∗)∗ = (V, (cost∗)∗) sei der Abschluß von G∗.
1) G∗ ist semidefinit und erfullt die Dreiecksungleichung.
2) (G∗)∗ = G∗
3) Ist G positiv, dann ist G∗ definit.
Insbesondere ist G∗ definit, wenn G definit ist.
4) Ist G symmetrisch, dann ist auch G∗ symmetrisch.
5) Ist G zusammenhangend, d.h. E∗ = V × V , dann ist G∗ endlich.
Insbesondere ist G∗ endlich, wenn G endlich ist.
Beweis.
zu 1) Seien x, y, z ∈ V .
cost∗(x, x) = infI(x, x), cost(x, x), (2 · cost)(x, x), . . . ≤ I(x, x)
= 0
cost∗(x, z) = mincost(p) : p ∈ PathG(x, z)≤ mincost(p1) + cost(p2) : p1 ∈ PathG(x, y) und p2 ∈ PathG(y, z)= mincost(p1) : p1 ∈ PathG(x, y) + mincost(p2) : p2 ∈ PathG(y, z)= cost∗(x, y) + cost∗(y, z)
34 4. Die Airline-Metrik
zu 2) Weil cost∗ die Dreiecksungleichung erfullt gilt fur alle x, y ∈ V
cost∗(x, y) ≤ minz∈V
(cost∗(x, z) + cost∗(z, y)
)= (cost∗ + cost∗)(x, y)
Hieraus folgt cost∗(x, y) ≤ (k · cost∗)(x, y) fur k ≥ 2 und alle x, y ∈ V . Außerdem gilt
cost∗(x, y) ≤ I(x, y).
(cost∗)∗(x, y) = infI(x, y), cost∗(x, y), (2 · cost∗)(x, y), . . .= cost∗(x, y)
zu 3) Gilt cost(x, y) > 0 fur alle x 6= y, dann ist auch cost(p) > 0 fur alle p ∈ PathG(x, y) im
Fall x 6= y. Hieraus folgt cost∗(x, y) > 0 fur alle x 6= y. Zusammen mit der Semidefinitheit
von G∗ folgt dann die Definitheit von G∗.
zu 4) Ist G symmetrisch, dann sind auch die k-ten Produkte von G symmetrisch. Dann ist
auch G∗ = infk · G : k ∈ N symmetrisch.
zu 5) Es gelte E∗ = V ×V . Seien x, y ∈ V . Es gibt dann w0, . . . , wk ∈ V mit w0 = x, wk = y
und (wi, wi+1) ∈ E fur alle i ∈ 0, . . . , k − 1. Dann ist (w0, . . . , wk) ∈ PathG(x, y) und
cost∗(x, y) ≤ cost(w0, . . . , wk) < ∞.
Bemerkung. Insbesondere folgt aus dem vorherigen Satz, daß G∗ ein pseudometrischer Graph
ist, wenn G ein symmetrischer Graph ist. Wenn G ein positiver, zusammenhangender, sym-
metrischer Graph ist, dann ist G∗ sogar ein metrischer Graph.
4.2.3 Definition
In diesem Unterabschnitt definieren wir die Airline-Metrik. Es ist nicht sinnvoll, diese De-
finition nur bzgl. der euklidischen Ebene vorzunehmen, weil die Definition keine speziellen
Eigenschaften der Metrik des zugrunde liegenden Raumes benutzt. Deshalb definieren wir
hier die Airline-Metrik bzgl. eines beliebigen metrischen Raumes.
Zur Motivation haben wir in der Aufgabenstellung eine aus Flughafen und Flugverbindungen
bestehende Ausgangssituation betrachtet. In dieser Arbeit geht es aber nicht um die Mo-
dellierung von Flugverbindungen. Diese dienen nur zur Veranschaulichung. Der abstrakte
Hintergrund und damit das eigentliche Thema dieser Arbeit lautet wie folgt:
Aufgabe: Sei (X, d) ein metrischer Raum und G = (V, cost) ein positiver, symmetrischer
Graph mit Kantenmenge E. Die Knoten von G seien zugleich Punkte aus X, d.h. V ⊆ X.
4.2 Definition der Airline-Metrik 35
Die Kanten (x, y) ∈ E erzeugen zusatzliche Verbindungen der Lange cost(x, y) zwischen
den Punkten x und y. Unsere Aufgabe ist die Definition der Airline-Metrik von G bzgl. d.
Diese Metrik bezeichnen wir mit adG,d. adG,d(x, y) soll gleich der Lange des kurzesten Weges
zwischen den Punkten x, y ∈ X sein.
Zunachst ist unklar, was mit dem Begriff”Lange des kurzesten Weges zwischen zwei Punkten
x, y ∈ X“ gemeint ist. Zur Veranschaulichung fassen wir den metrischen Raum (X, d) als
metrischen Graphen mit der unendlichen Knotenmenge X, der Kantenmenge X × X und
der Kostenfunktion d auf. Diesem Graphen fugen wir die Kanten von G als weitere Kanten
hinzu, so daß ein unendlicher R+-Graph entsteht, der auch parallele Kanten enthalt. In
diesem Graphen kann man dann kurzeste Wege betrachten.
Dieses ist zwar nur eine Gedankenspielerei, sie liefert aber Ideen fur das weitere Vorgehen.
Zunachst wird klar, warum wir fur G die Eigenschaften Positivitat und Symmetrie gefordert
haben. Wenn G nicht positiv ware, d.h. wenn es ein Paar (x, y) ∈ V × V gabe mit x 6= y
und cost(x, y) = 0, dann ware auch adG,d(x, y) = 0 und damit adG,d nicht definit. Wenn G
nicht symmetrisch ware, dann ware auch die Symmetrie von adG,d nicht gewahrleistet.
Als erstes untersuchen wir, wie man adG,d(x, y) fur x, y ∈ V erhalt, d.h. wir wollen einen
Graphen AGG,d = (V, costG,d) definieren, dessen Kostenfunktion gleich der Einschrankung
der Airline-Metrik auf V × V ist. Wegen der Dreiecksungleichung fur d gibt es zu x, y ∈ V
einen kurzesten Weg, der nur Punkte aus V erhalt. Deshalb benotigen wir zur Definition
von AGG,d nur G und den metrischen Graphen von V bzgl. d, d.h. den Graphen MGV,d. In
unserem imaginaren unendlichen Graphen haben wir die Kanten von G als weitere Kanten
eingefugt und so einen unendlichen Graphen mit parallelen Kanten erzeugt. Weil wir kurzeste
Wege betrachen, benotigen wir von den parallelen Kanten nur die jeweils kurzere der beiden.
Mit anderen Worten: AGG,d ist der”shortest path“-Graph zu dem Graphen min(G,MGV,d),
also AGG,d = (min(G,MGV,d))∗.
Im allgemeinen Fall x, y ∈ X ist der direkte Weg von v nach w ein kurzester Weg, oder
jeder kurzeste Weg enthalt Kanten aus G. Im zweiten Fall gibt es einen kurzesten Weg
p = (x, w0, . . . , wk, y) mit w0, . . . , wk ∈ V . Dann ist p′ = (w0, . . . , wk) ein kurzester Weg im
Graphen AGG,d von w0 nach wk, und p hat die Lange d(x, w0) + costG,d(w0, wk) + d(wk, k).
Definition 4.6 (Airline-Graph).
Sei (X, d) ein metrischer Raum und G = (V, cost) ein positiver, symmetrischer Graph mit
V ⊆ X. Dann sei wie folgt ein R+-Graph AGG,d definiert:
AGG,d = (V, costG,d), AGG,d := (min(G,MGV,d))∗(4.19)
AGG,d ist ein metrischer Graph. Wir nennen ihn den Airline-Graphen von G bzgl. d.
36 4. Die Airline-Metrik
Definition 4.7 (Airline-Metrik).
Sei (X, d) ein metrischer Raum und G = (V, cost) ein positiver, symmetrischer Graph mit
V ⊆ X. Dann sei wie folgt ein Metrik adG,d : X × X → R+ definiert:
adG,d(x, y) := min
(d(x, y), min
v,w∈V
(d(x, v) + costG,d(v, w) + d(w, y)
))(4.20)
adG,d heißt Airline-Metrik von G bzgl. d.
In dem fur uns besonders wichtigen euklidischen Fall (X, d) = (R2 , dE) kurzen wir wieder
die Schreibweise ab. Wir schreiben AGG = (V, costG) statt AGG,d = (V, costG,d) und adG
statt adG,d. AGG heißt dann Airline-Graph von G, und adG heißt Airline-Metrik von G.
Wir mussen zeigen, daß adG,d auch tatsachlich eine Metrik auf der Menge X ist.
Satz 4.3. adG,d ist eine Metrik auf der Menge X.
Beweis.
Definitheit:
adG,d(x, y) = 0
⇔ min
(d(x, y), min
v,w∈V
(d(x, v) + costG,d(v, w) + d(w, y)
))= 0
⇔ x = y oder ∃v, w ∈ V : d(x, v) + costG,d(v, w) + d(w, y) = 0
⇔ x = y
Symmetrie:
adG,d(x, y)
= min
(d(x, y), min
v,w∈V
(d(x, v) + costG,d(v, w) + d(w, y)
))= min
(d(y, x), min
w,v∈V
(d(y, w) + costG,d(w, v) + d(v, x)
))= adG,d(y, x)
4.3 Eigenschaften der Airline-Metrik 37
Dreiecksungleichung:
adG,d(x, y) + adG,d(y, z)
= min
(d(x, y), min
v,v′∈V
(d(x, v) + costG,d(v, v′) + d(v′, y)
))+ min
(d(y, z), min
w′,w∈V
(d(y, w′) + costG,d(w
′, w) + d(w, z)))
= min
(d(x, y) + d(y, z),
minw′,w∈V
(d(x, y) + d(y, w′) + costG,d(w
′, w) + d(w, z)),
minv,v′∈V
(d(x, v) + costG,d(v, v′) + d(v′, y) + d(y, z)
),
minv,v′,w′,w∈V
(d(x, v) + costG,d(v, v′) + d(v′, y) + d(y, w′) + costG,d(w
′, w) + d(w, z)))
≥ min
(d(x, z),
minv,w∈V
(d(x, v) + costG,d(v, w) + d(w, z)
),
minv,v′,w′,w∈V
(d(x, v) + costG,d(v, v′) + costG,d(v
′, w′) + costG,d(w′, w) + d(w, z)
))= min
(d(x, z), min
v,w∈V
(d(x, v) + costG,d(v, w) + d(w, z)
))= adG,d(x, z)
Im Fall x ∈ V oder y ∈ V vereinfacht sich offenbar die Gleichung zur Berechnung des
Airline-Abstandes.
Lemma 4.4.
∀ x ∈ V, y ∈ X : adG,d(x, y) = adG,d(y, x) = minw∈V
(costG,d(x, w) + d(w, y)
)(4.21)
∀ x, y ∈ V : adG,d(x, y) = costG,d(x, y)(4.22)
Insbesondere ist costG,d die Einschrankung der Airline-Metrik adG,d auf V × V , und AGG,d
ist gleich dem metrischen Graphen von V bzgl. adG,d.
4.3 Eigenschaften der Airline-Metrik
Im ersten Abschnitt dieses Kapitels habe ich eine interessante Eigenschaft erwahnt, welche
die Airline-Metrik vollstandig charakterisiert:
38 4. Die Airline-Metrik
Satz 4.5. Sei MG,d die Menge aller Metriken d auf der Menge X mit d(x, y) ≤ d(x, y) fur
alle x, y ∈ X und d(v, w) ≤ cost(v, w) fur v, w ∈ V . Dann gilt:
adG,d ∈ MG,d und ∀ d ∈ MG,d, x, y ∈ X : adG,d(x, y) ≥ d(x, y)(4.23)
Hieraus folgt: adG,d(x, y) = maxd(x, y) : d ∈ MG,d fur alle x, y ∈ X.
Bemerkung. Einfach ausgedruckt: Die Airline-Metrik von G bzgl. d ist die großte Metrik auf
der Menge X, die kleiner-gleich sowohl der Metrik d als auch der Kostenfunktion von G ist.
Beweis.
adG,d ∈ MG,d ist klar, da costG,d(v, w) ≤ min(cost(v, w), d(v, w)) ist.
d ∈ MG,d
⇒ ∀v, w ∈ V : d(v, w) ≤ cost(v, w) und ∀x, y ∈ X : d(x, y) ≤ d(x, y)
⇒ ∀v, w ∈ V : d(v, w) ≤ min(cost(v, w), d(v, w)) und ∀x, y ∈ X : d(x, y) ≤ d(x, y)
⇒ ∀v, w ∈ V : d(v, w) ≤ costG,d(v, w) und ∀x, y ∈ X : d(x, y) ≤ d(x, y)
⇒ adG,d(x, y)
= min
(d(x, y), min
v,w∈V
(d(x, v) + costG,d(v, w) + d(w, y)
))≥ min
(d(x, y), min
v,w∈V
(d(x, v) + d(v, w) + d(w, y)
))= d(x, y)
4.4 Verallgemeinerungen der Airline-Metrik
In diesem letzten Abschnitt des Kapitels besprechen wir Moglichkeiten zur Verallgemeine-
rung der Airline-Metrik.
Zunachst betrachten wir die Definitionen des Airline-Graphen und der Airline-Metrik. Diese
Definitionen sind auch dann sinnvoll, wenn d keine Metrik ist, sondern nur eine Pseudometrik,
Distanzfunktion oder Pseudodistanzfunktion.
Sei X eine Menge, d ∈ Abb(X ×X,R+ ∪∞) und G = (V, cost) ein R+-Graph mit V ⊆ X.
AGG,d und adG,d seien wie in Def. 4.6 und Def. 4.7 definiert.
1) Ist G symmetrisch und d eine Pseudometrik, d.h. d ist semidefinit, symmetrisch und
erfullt die Dreiecksungleichung, dann ist auch AGG,d semidefinit, symmetrisch und erfullt
4.4 Verallgemeinerungen der Airline-Metrik 39
die Dreiecksungleichung. adG,d ist dann auch eine Pseudometrik.
2) Ist G positiv und d eine Distanzfunktion, d.h. d ist definit und erfullt die Dreiecksunglei-
chung, dann ist auch AGG,d definit und erfullt die Dreiecksungleichung. adG,d ist dann auch
eine Distanzfunktion.
3) Ist d eine Pseudodistanzfunktion, d.h. d ist semidefinit und erfullt die Dreiecksunglei-
chung, dann ist auch AGG,d semidefinit und erfullt die Dreiecksungleichung. adG,d ist dann
auch eine Pseudodistanzfunktion.
Eine weitere Verallgemeinerungsmoglichkeit bekommt man, wenn man in der Ausgangssi-
tuation außer Flugverbindungen auch noch weitere Verkehrsmittel zulaßt.
Sei (X, d) ein metrischer Raum und Gi = (Vi, costi) : i = 1, . . . , k eine Menge von positiven,
symmetrischen Graphen mit Vi ⊆ X. Dann sei
V :=
k⋃i=1
Vi
Gi := (V, costi), costi(v, w) :=
costi(v, w) falls v, w ∈ Vi
∞ sonst
AGG1,...,Gk,d = (V, costG1,...,Gk,d), AGG1,...,Gk,d :=(min
(G1, . . . , Gk,MGV,d
))∗adG1,...,Gk,d(x, y) = min
(d(x, y), min
v,w∈V
(d(x, v) + costG1,...,Gk,d(v, w) + d(w, y)
))
Dieses bedeutet, daß man die Airline-Metrik einer Menge von positiven, symmetrischen Gra-
phen erhalt, indem man die Graphen zusammenfugt. Wenn es dann mehrere Verbindungen
zwischen gleichen Knotenpaaren gibt, dann wahle man die jeweils kurzeste.
40 4. Die Airline-Metrik
Kapitel 5
Berechnung der Airline-Distanz
In diesem Kapitel mochten wir einen effizienten und praktikablen Algorithmus entwickeln,
der Anfragen der Art”adG(x, y) = ?“ (airline-distance queries) fur x, y ∈ R
2 beantwortet.
5.1 Ein Algorithmus mit Vorverarbeitung
Zunachst betrachten wir unsere Vorgehensweise bei der Definition der Airline-Metrik eines
positiven, symmetrischen Graphen G mit der Knotenmenge V ⊂ R2 . Mittels Graphen-
transformationen definierten wir min(G,MGV ). Den vollstandigen Graphen min(G,MGV )
erhielten wir aus G, indem wir die euklidischen Distanzen zwischen den Knoten mitberuck-
sichtigten. Der Airline-Graph AGG ist der Abschluß des Graphen min(G,MGV ). Die Airline-
Distanz zweier Punkte des R2 definierten wir dann mit Hilfe des Graphen AGG.
Ubertragen auf die algorithmische Sichtweise bedeutet diese Vorgehensweise, daß der Graph
G einer Vorverarbeitung (preprocess) zu unterziehen ist. Das Ergebnis dieser Vorverarbeitung
ist die Kostenmatrix des Airline-Graphen. Diese Datenstruktur ermoglicht dann die schnelle
Beantwortung von beliebig vielen airline-distance queries.
5.1.1 Datenstruktur: Kostenmatrix
Sei V = v1, . . . , vn eine Menge von n Punkten aus der euklidischen Ebene R2 . Wir schreiben
jeden Punkt vi ∈ V als geordnetes Paar vi = (xi, yi). Sei G = (V, cost) derjenige positive,
symmetrische Graph, dessen Airline-Metrik betrachtet werden soll. Der Airline-Graph von
G sei AGG = (V, costG).
41
42 5. Berechnung der Airline-Distanz
Zur Speicherung von G und des noch zu berechnenden Graphen AGG verwenden wir die
Kostenmatrixdarstellung. Diese ist hier besonders gut geeignet, weil AGG ein vollstandiger
Graph ist.
5.1.2 Vorverarbeitung: Berechnung von AGG mit dem
Algorithmus von Floyd/Warshall
Gegeben sei die Kostenmatrix (G[i, j])i,j∈1,...,n fur den Ausgangsgraphen G, d.h. G[i, j] =
cost(vi, vj). Insbesondere gilt G[i, i] = 0 fur alle i, G[i, j] > 0 fur i 6= j und G[i, j] = G[j, i] fur
alle i, j. Ferner sei eine Matrix (V [i])1≤i≤n mit den x- und y-Koordinaten der Punkte vi ∈ V
gegeben. Hiermit konnen wir nun die Kostenmatrix des Airline-Graphen AGG berechnen.
AGG ist der Abschluß von min(G,MGV ), d.h. die Lange einer Kante (v, w) in AGG ist gleich
der Lange eines kurzesten Weges von v nach w in min(G,MGV ).
Zur Losung dieses”all pairs shortest path“-Problems konnen wir den Algorithmus von
Floyd/Warshall (Algorithmus 3.3) verwenden, welchen wir aus dem Algorithmus von Klee-
ne (Algorithmus 3.1) hergeleitet hatten. Dieser Algorithmus berechnet den Abschluß eines
R+-Graphen in O(n3) Laufzeit und O(n2) Speicherbedarf.
Algorithmus 5.1. (Berechnung von AGG)
type tPunkt = record
x1, x2 : real
end;
1) procedure Berechne AGG (var AGG : array [1..n, 1..n] of real;
G : array [1..n, 1..n] of real;
V : array [1..n] of tPunkt);
(∗ Eingabe : G − Kostenmatrix des Graphen G
: V − Koordinaten der Knoten von G
Ausgabe : AGG − Kostenmatrix des Graphen AGG
Der Algorithmus berechnet den in der Definition der Airline-Metrik
von G verwendeten Hilfsgraphen AGG. ∗)2) var i, j, k : integer;
3) begin
4) for i := 1 to n do
5) for j := 1 to n do
6) AGG[i, j] := min (G[i, j], |vivj |);7) end;
5.1 Ein Algorithmus mit Vorverarbeitung 43
8) end;
9) for k := 1 to n do
10) for all i, j ∈ 1, . . . , n do
11) AGG[i, j] := min (AGG[i, j], AGG[i, k] + AGG[k, j]);
12) end;
13) end;
14) end Berechne AGG;
Zuerst wird in den Zeilen 4) - 8) der oben beschriebene Graph min(G,MGV ) berechnet. In
den Zeilen 9) - 13) wird mit dem Algorithmus von Floyd/Warshall min(G,MGV ) in seinen
Abschluß AGG transformiert. Die for-Schleife in Zeile 9) erzeugt eine Folge von Graphen
min(G,MGV ) = G0, . . . , Gn = AGG. Die Lange einer Kante (v, w) in Gk ist gleich der
kurzesten Lange eines Pfades von v nach w in G0, in dem nur Zwischenknoten aus der
Menge v1, . . . , vk vorkommen. Insbesondere ist die Lange einer Kante (v, w) in Gn gleich
der Lange der kurzesten Wege von v nach w in G0.
Die Laufzeit des Algorithmus 5.1 ist in Θ(n3), weil die Minimumberechnung in Zeile 11)
n3-mal ausgefuhrt wird. Der Speicherplatzbedarf ist in Θ(n2), entsprechend den Großenord-
nungen von G und AGG.
5.1.3 Hauptteil: Berechnung von adG(x, y) fur x, y ∈ R2
Nachdem wir den Airline-Graphen AGG = (V, costG) konstruiert haben, konnen wir uns nun
der Airline-Metrik von G zuwenden, d.h. der Abbildung
adG : R2 × R2 → R+
adG(x, y) := min
(|xy|, min
v,w∈V
(|xv| + costG(v, w) + |wy|))Aus der Definitionsgleichung erhalten wir auf triviale Weise einen Algorithmus zur Berech-
nung des Airline-Abstandes adG(x, y) zweier Punkte x, y ∈ R2 .
Algorithmus 5.2. (Berechnung von adG(x, y))
1) procedure AirlineDistanz (var d : real;
x, y : tPoint;
GA : array [1..n, 1..n] of real;
V : array [1..n] of tPunkt);
(∗ Eingabe : x, y − Punkte im R2
44 5. Berechnung der Airline-Distanz
: AGG − Kostenmatrix des Graphen AGG
: V − Koordinaten der Knoten von G
Ausgabe : d − Airline-Abstand der Punkte x, y
Der Algorithmus berechnet den Airline-Abstand adG(x, y) zweier
Punkte x, y ∈ R2 . ∗)
2) var i, j, : integer;
3) begin
4) d := |xy|;5) for all i, j ∈ 1, . . . , n do
6) d := min (d, |xvi| + AGG[i, j] + |vjy|);7) end;
8) end AirlineDistanz;
Die Laufzeit des Algorithmus 5.2 ist offensichtlich in Θ(n2), da die Minimumberechnung in
Zeile 6) n2-mal ausgefuhrt wird.
5.1.4 Analyse des Algorithmus
Unser Algorithmus besteht aus einer Vorverarbeitung und einem Hauptteil. In der Vor-
verarbeitung wird aus dem positiven, symmetrischen Graphen G = (V, cost) der Airline-
Graph AGG = (V, costG) berechnet. Der Airline-Graph ist als Abschluß definiert: AGG =
(min(G,MGV ))∗. min(G,MGV ) ist ein definiter, symmetrischer, zusammenhangender R+-
Graph.
Die Vorverarbeitung entspricht damit dem”all pairs shortest path“-Problem fur R+-Gra-
phen. Wir haben zur Losung dieses Problems den Algorithmus von Floyd/Warshall verwen-
det. Dieser Algorithmus berechnet den Abschluß eines R+-Graphen in O(n3) Laufzeit und
O(n2) Speicherplatz.
Selbstverstandlich kann man jeden beliebigen Algorithmus verwenden, welcher das”all pairs
shortest path“-Problem lost. Einen Uberblick uber Algorithmen zur Berechnung kurzester
Wege geben Deo und Pang [7].
Neben der matrixorientierten Vorgehensweise von Floyd ist die Vorgehensweise von Dijk-
stra [8] die zweite wichtige Methode, um das”all pairs shortest path“-Problem zu losen.
Hierbei wird das”all pairs shortest path“-Problem wie n separate
”single source shortest
path“-Probleme behandelt. Das single source-Problem ist die Bestimmung kurzester Wege
von einem Knoten aus zu allen anderen Knoten. Die von Dijkstra vorgeschlagene Imple-
5.1 Ein Algorithmus mit Vorverarbeitung 45
mentierung lost das single source-Problem in der Zeit O(n2), d.h. auch hier ergibt sich eine
Laufzeit von O(n3) fur das all pairs-Problem.
Vom Dijkstra-Algorithmus gibt es viele Varianten. Von Johnson [21] stammt die Idee, die
Randknoten des Teilgraphen in einem Heap zu verwalten. Hiermit erreicht man eine Laufzeit
von O(e logn) fur das single source-Problem. Fur dunne Graphen kann dieses Ergebnis eine
Verbesserung sein, fur dichte Graphen dagegen ist die Standardversion von Dijkstra besser.
In unserem Fall ist min(G,MGV ) ein vollstandiger Graph. Wegen e = n2 ist eine O(e logn)-
Laufzeit eine Verschlechterung gegenuber einer O(n2)-Laufzeit, so daß fur uns diese Version
des Dijkstra-Algorithmus nicht in Frage kommt. Fredman und Tarjan [17] schlagen vor,
einen Fibonacci-Heap zu verwenden. Dieses ergibt dann eine Laufzeit von O(e + n log n)
fur das single source-Problem. Eine weitere Variante des Dijkstra-Algorithmus ist der A∗-
Algorithmus (siehe [19, 30]).
Sowohl der Floyd-Algorithmus als auch der Dijkstra-Algorithmus haben eine worst case-
Laufzeit von O(n3) fur das all pairs-Problem. Von Spira [36] stammt eine Variante des
Dijkstra-Algorithmus mit einer durchschnittlichen Laufzeit von O(n2 log2 n). Auf Grundlage
dieses Algorithmus haben Moffat und Takaoka [29] einen Algorithmus mit einer durchschnitt-
lichen Laufzeit von O(n2 log n) konstruiert.
Die genaue Zeitkomplexitat des”all pairs shortest path“-Problems fur R+-Graphen ist un-
bekannt. Als Untergrenze haben wir Ω(n2) und als Obergrenze O(n3). Keiner der mir be-
kannten, praktikablen Algorithmen hat eine bessere worst case-Laufzeit als O(n3).
Das”all pairs shortest path“-Problem fur R+-Graphen ist ein Spezialfall des
”general path“-
Problems fur S-Graphen. Nach Satz 3.5 ist dieses Problem gleichbedeutend mit der Be-
rechnung des Abschlusses C∗ einer Matrix C ∈ Mat(n × n, S). In [27] wird gezeigt, daß die
Berechnung des Abschlusses C∗ einer Matrix die gleiche Komplexitat hat wie die Berechnung
des Produktes A · B zweier Matrizen A, B ∈ Mat(n × n, S).
Die Standardmethode zur Berechnung des Matrixproduktes, d.h. die Berechnung nach der
Definitionsformel (aij) · (bjk) = (∑n
j=1 aijbjk) benotigt O(n3) Semiring-Operationen “+, ·”.
Wenn S sogar ein Ring ist, dann gibt es schnellere Algorithmen. Das Produkt A · B zweier
Matrizen A, B ∈ Mat(n× n, S) uber einem Ring S kann man mit O(nlog2 7) = O(n2.81) Rin-
goperationen mit dem Algorithmus von Strassen berechnen (siehe [27, 37]). Der Algorithmus
von Coppersmith/Winograd [6] benotigt sogar nur O(n2.495364) Ringoperationen.
Leider funktionieren die schnellen Algorithmen nur dann, wenn S ein Ring ist. Nur dann
gibt es inverse Elemente bzgl. “+” und die Subtraktion. Der uns interessierende Semiring
R+ ist kein Ring, ebensowenig B und R.
46 5. Berechnung der Airline-Distanz
Wenn wir nur die R+-Semiringoperationen “min, +” zulassen, dann ist O(n3) die beste obere
Schranke fur die Berechnung des “min, +”-Matrixprodukts, die wir erreichen konnen (sie-
he [27]).
Wenn wir auch Vergleiche von R+-Semiringelementen zulassen, dann reichen O(n5/2) Ver-
gleiche aus, um das”all pairs shortest path“-Problem zu losen, wie Fredman [16] gezeigt hat.
Seine Methode fuhrt zwar nicht gleich zu einem praktikablen Algorithmus mit der Laufzeit
O(n5/2), aber man kann einen O(n3(log log n/ log n)1/3)-Algorithmus konstruieren.
Fur uns ist es mehr von theoretischem Interesse, daß es auch o(n3)-Algorithmen fur das”all
pairs shortest path“-Problem gibt. Wir gehen im weiteren von einer Laufzeit von O(n3) fur
die Vorverarbeitung aus.
Im Hauptteil haben wir den Airline-Graphen AGG = (V, costG) benutzt, um mit Hilfe der
Definitionsgleichung
adG(x, y) := min
(|xy|, min
v,w∈V
(|xv| + costG(v, w) + |wy|))
Anfragen der Art”adG(x, y) =?“ zu beantworten. Bei diesem Vorgehen benotigen wir offen-
bar O(n2) Laufzeit und auch O(n2) Speicherplatz.
Zusammen mit der Vorverarbeitung brauchen wir zur Beantwortung von l Anfragen die
Laufzeit O((n + l)n2). Fur kleine l wird die Laufzeit durch die O(n3)-Laufzeit der Vorver-
arbeitung bestimmt. Fur sehr viele Anfragen (l n) wird die Laufzeit dagegen durch die
O(ln2)-Laufzeit des Hauptteils bestimmt.
5.2 Ein Algorithmus ohne Vorverarbeitung
Der eben vorgestellte Algorithmus hat den Nachteil, daß er eine Vorverarbeitung mit der
Laufzeit O(n3) benotigt. Wenn fur einen vorgegebenen positiven, symmetrischen Graphen
G der Airline-Abstand adG(x, y) fur wenige Punktepaare (x, y) ∈ R2 oder sogar fur nur
ein Punktepaar bestimmt werden soll, dann wird die Gesamtlaufzeit durch die O(n3) Lauf-
zeit dieser Vorverarbeitung bestimmt. In diesem Abschnitt uberlegen wir, ob wir nicht ein
besseres Laufzeitverhalten erhalten, wenn wir auf die Vorverarbeitung verzichten und den
Airline-Abstand direkt berechnen.
5.2 Ein Algorithmus ohne Vorverarbeitung 47
5.2.1 Formulierung der Airline-Distanz als”single source shortest
path“-Problem
In der Einfuhrung des letzten Kapitels haben wir verschiedene Moglichkeiten betrachtet,
die Airline-Metrik zu definieren. Ein Vorschlag war, G mittels Graphentransformationen in
einen R+-Graphen G = (V , cost) mit der Knotenmenge V = V ∪ x, y umzuwandeln, und
dann adG mit Hilfe des Abschlusses von G, G∗ = (V , cost∗), zu definieren:
adG(x, y) := cost∗(x, y)
Wenn es uns gelingt, einen derartigen Graphen G zu konstruieren, dann ist adG(x, y) gleich
der Lange eines kurzesten Weges von x nach y in G. In diesem Fall brauchen wir kein”all
pairs shortest path“-Problem mehr zu losen, sondern nur noch ein”single source shortest
path“-Problem. Dazu konnten wir dann den Dijkstra-Algorithmus verwenden, welcher eine
Laufzeit von O(n2) hat. (Eigentlich brauchen wir nur den kurzesten Weg von x nach y, aber
dieses Problem hat die gleiche Komplexitat wie die Berechnung der kurzesten Wege von x
zu allen anderen Knoten.)
Betrachten wir zunachst die Definition der Airline-Metrik (Def. 4.7). Sei G = (V, cost) ein
positiver, symmetrischer Graph mit V ∈ R2.
adG(x, y) = min
(|xy|, min
v,w∈V
(|xv| + costG(v, w) + |wy|))= minq : q = |xy| oder q = |xv| + costG(v, w) + |wy| mit v, w ∈ V
Hierbei ist costG ist die Kostenfunktion des Airline-Graphen AGG (Def. 4.6).
AGG = (V, costG), AGG := (min(G,MGV ))∗
Der Airline-Graph ist der Abschluß des Graphen min(G,MGV ). Deshalb ist costG(v, w)
gleich der Lange des kurzesten Weges von v nach w in min(G,MGV ).
costG(v, w) = minq : q = min
(cost(w0, w1), |w0w1|
)+ · · ·
+ min(cost(wm−1, wm), |wm−1wm|
)mit w0, . . . , wm ∈ V und w0 = v, wm = w
Hieraus folgt dann fur den Airline-Abstand
adG(x, y) = minq : q = |xy| oder q = |xw0| + min
(cost(w0, w1), |w0w1|
)+ · · ·
+ min(cost(wm−1, wm), |wm−1wm|
)+ |wmy| mit w0, . . . , wm ∈ V
48 5. Berechnung der Airline-Distanz
Nun bietet sich folgende Definition fur den Hilfsgraphen G an:
G = (V , cost),
V = V ∪ x, y,
cost(a, b) :=
min(cost(a, b), |ab|) falls a, b ∈ V
|ab| falls a 6∈ V oder b 6∈ V
Dann ist offenbar adG(x, y) gleich der Lange des kurzesten Weges von x nach y in G. Fur
den Abschluß von G, G∗ = (V , cost∗), gilt dann:
adG(x, y) := cost∗(x, y)
5.2.2 Der Algorithmus von Dijkstra
Bevor wir den Algorithmus von Dijkstra zur Berechnung von adG(x, y) verwenden, bespre-
chen wir, wie dieser Algorithmus funktioniert. Literatur hierzu sind [18, 1, 31].
Die Idee des Dijkstra-Algorithmus ist das Verlangern von kurzesten Wegen durch Hinzu-
nahmen weiterer Kanten. Die Grundlage dafur bildet das folgende Optimalitatsprinzip (sie-
he [31]):
Sei p = (v0, v1, . . . , vk) ein kurzester Weg von v0 nach vk. Dann ist jeder Teilweg
p′ = (vi, . . . , vj) mit 0 ≤ i < j ≤ k ein kurzester Weg von vi nach vj .
Es sei G = (V, cost) ein beliebiger R+-Graph mit der Knotenmenge V = v1, . . . , vn. Uns
interessieren nur die Langen der kurzesten Wege, nicht aber die Wege selbst. Der Startkno-
ten (source) sei v1. Wir mochten nun dist(w) := cost∗(v1, w) berechnen fur alle w ∈ V .
Ausgehend von S = v1 lassen wir die Teilmenge S ⊆ V so wachsen, daß fur jedes w ∈ S
ein kurzester Weg von v1 nach w existiert, der vollstandig in S liegt.
Algorithmus 5.3. Dijkstra
1) begin
2) S := v1;3) dist(v1) := 0;
4) for all w ∈ V \ v1 do
5) dist(w) := cost(v1, w);
6) end;
7) while S 6= V do
8) wahle w ∈ V \ S, so daß ∀w′ ∈ V \ S : dist(w) ≤ dist(w′) ;
5.2 Ein Algorithmus ohne Vorverarbeitung 49
9) S := S ∪ w;10) for all w′ ∈ V \ S do
11) dist(w′) := min(dist(w′), dist(w) + cost(w, w′)
);
12) end;
13) end;
14) end;
Die Korrektheit dieses Algorithmus wird in [1] gezeigt. Die for-Schleife in den Zeilen 10) - 12)
benotigt O(n) Schritte, ebenso die Auswahl in der Zeile 8). Die while-Schleife in den Zeilen
7) - 13) wird O(n)-mal ausgefuhrt. Die Laufzeit des Algorithmus 5.3 ist daher insgesamt in
O(n2).
5.2.3 Berechnung von adG(x, y) mit dem Algorithmus von Dijkstra
Nun wenden wir den Dijkstra-Algorithmus an, um die Airline-Distanz zu berechnen. Sei G =
(V, cost) jetzt wieder ein positiver, symmetrischer Graph. Die Knotenmenge V = v1, . . . , vnsei eine Menge von n Punkten aus der euklidischen Ebene R2 . Unser Ziel ist die Berechnung
des Airline-Abstandes adG(x, y) zweier Punkte x, y ∈ R2 .
Sei G wieder der folgende Hilfsgraph:
G = (V , cost), V = V ∪ x, y = v0, v1, . . . , vn, vn+1, v0 := x, vn+1 := y
cost(a, b) :=
min(cost(a, b), |ab|) falls a, b ∈ V
|ab| falls a 6∈ V oder b 6∈ V
Wir haben gezeigt, daß dann adG(x, y) gleich der Lange des kurzesten Weges von x nach
y in G ist. Wir werden deshalb zunachst den Hilfsgraphen G konstruieren, und dann den
Dijkstra-Algorithmus anwenden.
Algorithmus 5.4. (Berechnung von adG(x, y))
1) begin
2) V := V ∪ x, y;3) for all a, b ∈ V do
4) cost(a, b) :=
min(cost(a, b), |ab|) falls a, b ∈ V
|ab| falls a 6∈ V oder b 6∈ V
5) end;
6) S := x;
50 5. Berechnung der Airline-Distanz
7) for all w ∈ V do
8) dist(w) := cost(x, w);
9) end;
10) while S 6= V do
11) wahle w ∈ V \ S, so daß ∀w′ ∈ V \ S : dist(w) ≤ dist(w′);
12) S := S ∪ w;13) for all w′ ∈ V \ S do
14) dist(w′) := min(dist(w′), dist(w) + cost(w, w′)
);
15) end;
16) end;
17) adG(x, y) := dist(y);
18) end;
Die Laufzeit des Algorithmus 5.4 ist in O(n2), denn sowohl die Konstruktion des Hilfsgraphen
G in den Zeilen 2) - 5) als auch der Dijkstra-Algorithmus in den Zeilen 6) - 16) brauchen
O(n2) Zeit. Hiermit ist die Berechnung von adG(x, y) in optimaler Zeit gelost, denn dieses
Problem hat die Zeitkomplexitat Ω(n2), weil man im ungunstigsten Fall Ω(n2)-Kanten von
G betrachten muß. Ein solcher Fall tritt z.B. dann auf, wenn die eine Halfte der Knoten von
G in einer sehr kleinen ε-Umgebung um x liegt, und die andere Halfte der Knoten in einer
sehr kleinen ε-Umgebung um y.
Kapitel 6
Das Voronoi-Diagramm in der
Airline-Metrik
Voronoi-Diagramme sind von herausragender Bedeutung bei der Behandlung von geometri-
schen Distanzproblemen. Außerdem sind sie ein wichtiges Hilfsmittel zur Losung von vielen
verschiedenen Problemen innerhalb und auch außerhalb der Informatik.
In diesem Kapitel untersuchen wir das Airline-Voronoi-Diagramm. Hiermit ist dasjenige
verallgemeinerte Voronoi-Diagramm gemeint, welches man erhalt, wenn man anstatt der eu-
klidischen Metrik die Airline-Metrik als Abstandsbegriff zugrunde legt. Im ersten Abschnitt
besprechen wir zunachst Voronoi-Diagramme allgemein. Danach definieren wir das addi-
tiv gewichtete Voronoi-Diagramm und untersuchen dessen strukturellen Eigenschaften. Das
additiv gewichtete Voronoi-Diagramm ist fur uns deshalb besonders wichtig, weil wir das
Airline-Voronoi-Diagramm hierauf zuruckfuhren konnen. Diese Transformation fuhren wir
im dritten Abschnitt durch. Zuletzt besprechen wir Anwendungen des Voronoi-Diagramms.
6.1 Einfuhrung
Gegeben sei eine Menge S von Objekten in einem Raum X. Das Voronoi-Diagramms V (S)
von S ist die Zerlegung des Raumes X in Regionen (Rp)p∈S. Die Region Rp enthalt genau
diejenigen Punkte, welche naher an p liegen, als an irgendein anderes Objekt q ∈ S. Zur
Definition von V (S) muß man genau festlegen, was fur Objekte man betrachtet. Außerdem
muß man festlegen, wie man den Abstand eines Punktes aus X zu einem Objekt bestimmt,
und was mit denjenigen Punkten geschehen soll, die mehr als einen nachsten Nachbar in S
haben.
51
52 6. Das Voronoi-Diagramm in der Airline-Metrik
Hier steckt ein allgemeines Prinzip dahinter: Objekte in einem Raum uben einen Einfuß auf
ihre Umgebung aus. Der Raum wird dadurch in einzelne Einflußbereiche aufgeteilt.
Aufgrund dieser Allgemeinheit verwundert es nicht, daß die Geschichte der Voronoi-Diagram-
me im Vergleich zu anderen Gebieten der Informatik viel weiter zuruckreicht (siehe [24]).
Einen allgemeinen Uberblick uber Voronoi-Diagramme und viele weitere Literaturhinweise
findet der Leser in dem Ubersichtsartikel von Aurenhammer [2] und in dem online verfugba-
ren Bericht von Aurenhammer und Klein [3].
Shamos und Hoey [33] waren diejenigen, die Voronoi-Diagramme in die Informatik einfuhr-
ten. Sie haben das Voronoi-Diagramm einer endlichen Menge von Punkten in der euklidischen
Ebene betrachtet und einen divide-and-conquer Algorithmus entdeckt, mit dem man das
Voronoi-Diagramm in der optimalen Zeit O(n log n) berechnen kann. Diese Entdeckung hat
Losungsmoglichkeiten fur viele geometrischen Probleme geliefert und damit die Entstehung
des Faches Algorithmische Geometrie ausgelost.
6.2 Das additiv gewichtete Voronoi-Diagramm
Ich gehe davon aus, daß der Leser mit dem klassischen Voronoi-Diagramm von Punkten im
R2 unter der euklidischen Metrik vertraut ist. Hierzu gibt es zahlreiche Literatur, z.B. die
Bucher von Klein [24] und Edelsbrunner [10].
In diesem Abschnitt behandeln wir das additiv gewichtete Voronoi-Diagramm im R2 , welches
auch Johnson-Mehl-Modell genannt wird. Die Menge S von Objekten ist hier eine endliche
Menge von Punkten im R2 . Diese Punkte heißen Voronoi-Orte. Jedem Ort p ∈ S ist ein
Gewicht wp zugeordnet. Die Voronoi-Region Rp eines Ortes p ∈ S enthalt wieder diejenigen
Punkte der Ebene, fur welche p der nachste Voronoi-Ort ist. Der Abstand eines Punktes der
Ebene zu einem Voronoi-Ort sei jetzt die Summe aus dem euklidischen Abstand und dem
Gewicht des Ortes.
Wenn man die Gewichte aller Orte mit demselben festen Wert addiert bzw. subtrahiert, dann
andern sich die Voronoi-Regionen und damit das Voronoi-Diagramm nicht. Insbesondere
kann man von jedem Gewicht den Wert minwq : q ∈ S subtrahieren. Deshalb setzen wir
ohne Einschrankung voraus, daß alle Gewichte nichtnegativ sind.
Das additiv gewichtete Voronoi-Diagramm im R2 ist identisch mit dem Voronoi-Diagramm
von Kreisen. In diesem Fall sind die Voronoi-Orte Kreisscheiben. Der Abstand eines Punktes
der Ebene zu einer Kreisscheibe sei gleich dem Abstand des Punktes zum Zentrum des
Kreises minus dem Radius des Kreises. Außerhalb des Kreises ist dann der Abstand gleich
6.2 Das additiv gewichtete Voronoi-Diagramm 53
Abbildung 6.1: Das Voronoi-Diagramm einer Menge von Kreisen.
dem euklidischen Abstand zum nachsten Punkt auf dem Kreis, und innerhalb des Kreises
ist der Abstand gleich dem negativen des euklidischen Abstandes zum nachsten Punkt auf
dem Kreis. Das Voronoi-Diagramm einer additiv gewichteten Menge S von Voronoi-Orten ist
dann gleich dem Voronoi-Diagramm einer Menge von Kreisen, wobei ein Voronoi-Ort p ∈ S
mit dem Gewicht wp durch einen Kreis mit dem Zentrum p und dem Radius wmax − wp,
wmax = maxwq : q ∈ S, verkorpert wird.
Lee und Drysdale [26] haben einen O(n log2 n)-Zeit divide-and-conquer Algorithmus ent-
wickelt, mit dem man das Voronoi-Diagramm von disjunkten Kreisen berechnen kann. Dieser
Artikel hat die Nachteile, daß die Struktur des Diagramms nicht untersucht wird, daß der
Algorithmus nur sehr skizzenhaft prasentiert wird und seine Korrektheit nicht gezeigt wird,
und von allem daß die Kreise sich nicht schneiden durfen. Sharir [34] hat ausfuhrlich die
Struktur des Voronoi-Diagramms von nicht notwendigerweise disjunkten Kreisen untersucht
und dafur einen O(n log2 n)-Zeit divide-and-conquer Algorithmus entwickelt. Seine Untersu-
chungen zur Struktur des Voronoi-Diagramms bildet zusammen mit dem Artikel von Fortune
die Grundlage fur diesen Abschnitt.
Fortune [15] hat gezeigt, daß man das klassische Voronoi-Diagramm von Punkten in der
euklidischen Ebene auch mit einem sweep-Verfahren in der optimalen Zeit O(n log n) be-
rechnen kann. Dieses sweep-Verfahren ist ohne grundlegende Anderungen in seiner Struktur
auch fur die Berechnung des additiv gewichteten Voronoi-Diagramms geeignet. Gegenuber
dem divide-and-conquer Verfahren von Sharir hat es die Vorteile der optimalen Laufzeit
O(n log n) und der wesentlich einfacheren Implementierbarkeit, denn der merge-Schritt der
54 6. Das Voronoi-Diagramm in der Airline-Metrik
divide-and-conquer Verfahren ist nur schwer zu implementieren. Fortunes Artikel bildet da-
mit die Grundlage fur das nachste Kapitel, in welchem wir die Berechnung des Voronoi-
Diagramms behandeln werden.
6.2.1 Definition des additiv gewichteten Voronoi-Diagramms
Sei S eine Menge von n Voronoi-Orten in der Ebene. Zu jedem Ort p ∈ S sei ein nichtnega-
tives Gewicht wp gegeben.
Definition 6.1. Es seien p, q ∈ S, p 6= q. p dominiert q, wenn |pq| + wp ≤ wq. Wenn weder
p den Ort q dominiert noch umgekehrt q den Ort p dominiert, dann sei der Bisektor von p
und q die Menge
Bpq = z ∈ R2 : |pz| + wp = |qz| + wq(6.1)
Dieser Bisektor zerlegt R2 in zwei unbeschrankte, abgeschlossene Regionen:
Rpq = z ∈ R2 : |pz| + wp ≤ |qz| + wq(6.2)
Rqp = z ∈ R2 : |qz| + wq ≤ |pz| + wp(6.3)
Wenn p den Ort q dominiert, dann sei Bpq = ∅, Rpq = R2 und Rqp = ∅.
Bemerkung. Man beachte, daß wir fur den degenerierten Fall |pq| + wp = wq, bei dem die
Menge z ∈ R2 : |pz|+wp = |qz|+wq eine Halbgerade mit Endpunkt q ist, zur Vereinfachung
der Darstellung Bpq = ∅ definiert haben.
Definition 6.2. Die Voronoi-Region von p ist
Rp =⋂
q∈S\pRpq(6.4)
Die Voronoi-Region von p besteht also aus allen Punkten der Ebene, fur die p der nachste
Ort oder einer der nachsten Orte in S ist. Das Voronoi-Diagramm von S ist
V (S) = z ∈ Bpq : p, q ∈ S und |pz| + wp = min|rz| + wr : r ∈ S(6.5)
=⋃
p,q∈S,p 6=q
Rp ∩ Rq
Das Voronoi-Diagramm enthalt genau diejenigen Punkte der Ebene, die in mehr als einer
Voronoi-Region liegen.
Die Rander der Voronoi-Regionen bestehen aus Bisektorstucken. Weil die Regionen nicht
mehr wie beim klassischen Voronoi-Diagramm konvex sein mussen, kann ein Bisektor Bpq
6.2 Das additiv gewichtete Voronoi-Diagramm 55
hier mehr als ein einziges Stuck zum gemeinsamen Rand der Regionen Rp und Rq beitragen.
Gemeinsame Randstucke zweier Regionen, die aus mehr als einem Punkt bestehen, heißen
Voronoi-Kanten. Die Endpunkte von Voronoi-Kanten heißen Voronoi-Knoten.
Definition 6.3. Es sei wmax = maxwp : p ∈ S, rp = wmax − wp, und Kp = z ∈ R2 :
|pz| ≤ rp sei die abgeschlossene Kreisscheibe um das Zentrum p mit dem Radius rp.
Das additiv gewichtete Voronoi-Diagramm von S ist offenbar identisch mit dem Voronoi-
Diagramm der Kreisscheiben Kp : p ∈ S.
6.2.2 Eigenschaften des additiv gewichteten Voronoi-Diagramms
Die Eigenschaften und die zugehorigen Beweise, welche wir in diesem Unterabschnitt bespre-
chen, stammen aus Sharir [34].
Satz 6.1. Jeder Punkt der Ebene liegt in mindestens einer Voronoi-Region.
Satz 6.2. Eine Voronoi-Region Rp ist genau dann leer, wenn Kp ⊂ Kq fur ein q ∈ S, q 6= p.
Dieses ist gleichbedeutend damit, daß ein q ∈ S den Ort p dominiert.
Satz 6.3. Die nichtleeren Bisektoren Bpq sind Hyperbelaste oder Geraden. Die Voronoi-
Kanten sind deshalb Hyperbelstucke oder Geradenstucke.
Beweis.
Sei Bpq 6= ∅ und z ∈ Bpq. Dann gilt
|pz| − |qz| = wq − wp
Wenn |pq| > |wq − wp|, dann ist dieses die Gleichung eines Astes einer Hyperbel mit den
Brennpunkten p und q oder im Fall wp = wq die Gleichung der Mittelsenkrechten zur Strecke
pq. Wenn |pq| ≤ |wq−wp|, dann dominiert p den Ort q oder q dominiert den Ort p. In diesem
Fall ist Bpq = ∅.
Satz 6.4. Jede nichtleere Voronoi-Region Rp ist sternformig und enthalt p im Kern. Im
Innern jeder Strecke, welche p mit einem Randpunkt von Rp verbindet, liegen nur Punkte,
welche ausschließlich zur Region Rp gehoren.
Bemerkung. Hieraus folgt insbesondere, daß jede Voronoi-Region zusammenhangend ist.
56 6. Das Voronoi-Diagramm in der Airline-Metrik
Beweis.
Angenommen, Rp ist nicht sternformig. Dann gibt es ein y ∈ Rp und einen Punkt z im
Innern der Strecke py mit z 6∈ Rp. Wegen Satz 6.1 gibt es ein q 6= p mit z ∈ Rq. Hieraus folgt
|qz| + wq < |pz| + wp
Nun wenden wir die Dreiecksungleichung an. Weil z auf der Strecke py liegt, erhalten wir
|qy|+ wq ≤ |qz| + |zy| + wq < |pz| + |zy| + wp = |py|+ wp
Hieraus ergibt sich ein Widerspruch zu y ∈ Rp, welcher beweist, daß Rp sternformig ist.
Angenommen, es gibt einen Randpunkt y von Rp, einen inneren Punkt z der Strecke py und
ein q, so daß z außer in Rp auch noch in Rq liegt. Dann gilt
|qz| + wq = |pz| + wp
Mit Hilfe der Dreiecksungleichung erhalten wir
|qy|+ wq ≤ |qz| + |zy| + wq = |pz| + |zy| + wp = |py| + wp ≤ |qy| + wq
Hieraus folgt, daß q auf der Geraden py liegt und z zwischen q und y auf dieser Geraden liegt.
Dann muß aber |pq| = |wp − wq| gelten, und damit dominiert p den Ort q oder umgekehrt.
Dieses ist ein Widerspruch dazu, daß sowohl Rp 6= ∅ gilt als auch Rq 6= ∅, wodurch die zweite
Aussage des Satzes bewiesen ist.
Satz 6.5. Die Schnittmenge dreier Voronoi-Regionen enthalt hochstens zwei Punkte.
Beispiel 6.1. Dieser Satz ist bemerkenswert. Sei S = p, q, r und M = Rp∩Rq ∩Rr. Dann
gilt:
M = Rp ∩ Rq ∩ Rr
= z ∈ R2 : |pz| + wp = |qz| + wq = |rz| + wr
= Bpq ∩ Bpr ∩ Bqr
= Bpq ∩ Bpr = Bpq ∩ Bqr = Bpr ∩ Bqr
Die Schnittmenge dreier Voronoi-Regionen ist in diesem Fall gleich der Schnittmenge von
zwei der drei Bisektoren. Bisektoren sind nach Satz 6.3 Hyperbelaste oder Geradenstucke. Es
sei nun angenommen, daß Bpq und Bpr Hyperbelaste sind. Zwei beliebige Hyperbelaste in der
Ebene konnen sich viermal schneiden. Bpq und Bpr sind aber nicht unabhangig voneinander,
sondern sie haben den gemeinsamen Brennpunkt p und konnen sich nach Satz 6.5 hochstens
zweimal schneiden.
6.2 Das additiv gewichtete Voronoi-Diagramm 57
Beweis zu Satz 6.5.
Sei M = Rp ∩ Rq ∩ Rr und x, y ∈ M, x 6= y. Die sechs Strecken, welche die Punkte x und y
mit den Orten p, q und r verbinden, konnen sich außer in den Endpunkten nicht schneiden,
weil das Innere jeder Strecke nur zu jeweils einer Region gehort. Nun ist klar, weshalb es
keinen dritten Punkt z ∈ M geben kann, denn mindestens einer der Verbindungsstrecken
von z mit p, q und r mußte eine der vorherigen sechs Strecken schneiden.
Die weiteren Eigenschaften zitiere ich ohne Beweis aus Sharir [34].
Satz 6.6. Keine zwei Voronoi-Kanten konnen tangent zueinander sein. Sei e eine Voronoi-
Kante zu den Regionen Rp und Rq. z sei ein Punkt auf e. Dann sind auch die Strecken zp
bzw. zq nicht tangent zu e.
Satz 6.7. Sei Rp eine Voronoi-Region und e und e′ zwei aufeinander folgende Kanten auf
dem Rand von Rp. Dann ist der Innenwinkel von e und e′ bzgl. Rp kleiner als 180 Grad.
Insbesondere besitzt deshalb jeder Voronoi-Knoten einen Grad ≥ 3.
Zu dem Voronoi-Diagramm V (S) kann man einen dualen Graphen V ∗ konstruieren. Dazu
wahlt man die Menge S der Orte als Knotenmenge von V ∗. Zu jeder Voronoi-Kante e aus
V (S) wahlt man einen Punkt y aus dem Innern von e und verbindet die Orte p und q der
beiden Voronoi-Regionen, auf dessen gemeinsamen Rand e liegt, mit Hilfe des Streckenzuges
pyq.
Der Graph V ∗ ist planar, denn die so eingebetteten Kanten konnen sich wegen Satz 6.4
nicht schneiden. V ∗ enthalt parallele Kanten, wenn der gemeinsame Rand zweier Regionen
aus mehreren Voronoi-Kanten besteht.
Weil jeder Voronoi-Knoten einen Grad ≥ 3 besitzt, besteht der Rand der Flachen von V ∗
(bis auf der außeren unbeschrankten Flache) aus jeweils mindestens drei Kanten. Mit Hilfe
der Eulerschen Formel kann man dann den folgenden Satz herleiten.
Satz 6.8. V (S) hat nur O(n) viele Kanten.
Im klassischen Fall ist eine Region Rp genau dann unbeschrankt, wenn p auf dem Rand der
konvexen Hulle von S liegt. In unserem Fall gilt ein entsprechendes Ergebnis.
Satz 6.9. Sei C die konvexe Hulle der Menge der Kreisscheiben Kp : p ∈ S. Der Rand
von C besteht aus einer Folge, die abwechselnd Geradenstucke und Kreisbogen enthalt. Die
Kreisbogen sind Randstucke von Kreisscheiben, dagegen sind die Geradenstucke Tangenten
zu einem Paar von Kreisscheiben. Solche Paare von Kreisscheiben heißen benachbart langs
des Randes von C. Dann gilt: Zwei Regionen Rp und Rq haben genau dann eine gemeinsame
unbeschrankte Voronoi-Kante, wenn sie benachbart langs des Randes von C sind.
58 6. Das Voronoi-Diagramm in der Airline-Metrik
Abbildung 6.2: Ein nicht zusammenhangendes Voronoi-Diagramm.
Satz 6.10. V (S) muß nicht zusammenhangend sein, sondern kann aus bis zu O(n) Zusam-
menhangskomponenten bestehen. Jede Zusammenhangskomponente ist unbeschrankt. Insbe-
sondere enthalt V (S) keine isolierten Punkte.
Anders als im degenerierten klassischen Fall, bei dem die Voronoi-Orte auf einer Geraden lie-
gen und die Voronoi-Kanten parallele Geraden sind, kann im additiv-gewichteten Fall schon
der Rand einer einzelnen Voronoi-Region aus O(n) disjunkten Voronoi-Kanten bestehen.
Hierzu hat Sharir folgendes Beispiel angegeben:
Beispiel 6.2. Sei V das Voronoi-Diagramm der Kreisscheiben K1, . . . , Kn+1. K1 sei die
Einheitskreisscheibe. Die n Kreisscheiben K2, . . . , Kn+1 haben alle den gleichen Radius ρ.
Ihre Zentren liegen gleichmaßig verteilt auf dem Einheitskreis, so daß sie ein regemaßiges
n-Eck bilden wurden, falls man sie verbinden wurde. Man kann ρ so klein machen, daß fur
jedes j = 2, . . . , n + 1 die Kreisscheiben K1 und Kj benachbart sind langs des Randes C
der konvexen Hulle der Menge der Kreisscheiben. Nach Satz 6.9 hat R1 mit jedem Rj eine
gemeinsame unbeschrankte Voronoi-Kante. Die Voronoi-Kanten sind in diesem Fall ganze
Hyperbelaste, welche sich untereinander nicht schneiden. Der Rand von R1 besteht aus O(n)
disjunkten Voronoi-Kanten.
6.3 Das Airline-Voronoi-Diagramm 59
6.3 Das Airline-Voronoi-Diagramm
Sei G = (V, cost) derjenige positive, symmetrische Graph, dessen Airline-Metrik wir als
Abstandsbegriff zugrunde legen. Die Flughafenmenge, d.h. die Knotenmenge von G, sei V =
v1, . . . , vm) ⊂ R2 .
Sei S = p1, . . . , pn eine Menge von n Punkten in der Ebene. Wir mochten nun das Voronoi-
Diagramm von S bzgl. der Airline-Metrik adG definieren und untersuchen.
Zunachst definieren wir eine Funktion f , die jedem Flughafen einen Voronoi-Ort zuordnet.
Definition 6.4. Das Gewicht eines Flughafens v ∈ V sei gleich dem Airline-Abstand zum
nachstliegenden Voronoi-Ort.
w : V → R+
w(v) := minadG(v, p) : p ∈ SDie Funktion f soll nun jeden Flughafen auf den nachstgelegenen Voronoi-Ort abbilden.
Wenn ein Flughafen v zwei Orte pi und pj als nachsten Nachbar in S hat, dann sei f(v) = pi
im Fall i < j und f(v) = pj im Fall j < i.
f : V → S
v 7−→ piv mit iv = mini ∈ 1, . . . , n : adG(v, pi) = w(v)
Wenn f(v) = p ist, dann sagen wir, daß der Flughafen v zum Ort p gehort.
Wir definieren jetzt das Airline-Voronoi-Diagramm AV (S, G) von S bzgl. der Airline-Metrik
von G. Hierzu benutzen wir ein geeignetes additiv gewichtetes Voronoi-Diagramm, in wel-
chem wir dann bestimmte Regionen zu einer Airline-(Voronoi)-Region zusammenfassen.
Definition 6.5. Es sei S := S ∪ V = p1, . . . , pn, v1, . . . , vm, und V (S) sei das additiv
gewichtete Voronoi-Diagramm von S. Das Gewicht eines Ortes p ∈ S sei dabei durch w(p)
gegeben, wenn p ein Flughafen ist, d.h. p ∈ V . Im Fall p ∈ S sei w(p) = 0. Auch die
Zuordnungsfunktion f erweitern wir auf ganz S, indem wir f(p) = p fur p ∈ S setzen.
Die Voronoi-Regionen von V (S) seien R(p, S) : p ∈ S. Die Airline-Voronoi-Regionen
AR(p, S, G) und das Airline-Voronoi-Diagramm AV (S, G) seien wie folgt definiert:
AR(p, S, G) =⋃
q∈S,f(q)=p
R(q, S)(6.6)
AV (S, G) =⋃
p,q∈S,p 6=q
AR(p, S, G) ∩ AR(q, S, G)(6.7)
=⋃
p,q∈S,f(p)6=f(q)
R(p, S) ∩ R(q, S)
60 6. Das Voronoi-Diagramm in der Airline-Metrik
Man kann sich die Konstruktion von AV (S, G) aus V (S) wie folgt veranschaulichen: Jedem
p ∈ S ordnet man eine eigene Farbe zu. Die p ∈ V werden mit der gleichen Farbe wie f(p)
gefarbt. Die Regionen Rp erhalten die Farbe von p. Danach werden alle gleich gefarbten Re-
gionen zusammengefaßt. Man erhalt dann ein sogenanntes gefarbtes Voronoi-Diagramm. Die-
ses gefarbte Voronoi-Diagramm ist identisch mit dem Airline-Voronoi-Diagramm AV (S, G).
Man beachte: Beim Ubergang vom ungefarbten Voronoi-Diagramm zum gefarbten Voronoi-
Diagramm werden Regionen zusammengefaßt, so daß auch Kanten wegfallen. Hierdurch
wird auch der Grad von Knoten verringert. Insbesondere konnen Knoten mit dem Grad
2 entstehen!
Bemerkung. Gefarbte Voronoi-Diagramme erhalt man durch Identifizierung von einzelnen
Voronoi-Orten mit Hilfe der Aquivalenzrelation der Gleichfarbigkeit. Die zugrunde liegen-
den Objekte dieser Art von Voronoi-Diagrammen sind Punktmengen anstelle von einzelnen
Punkten.
Wir untersuchen nun, ob das so definierte Airline-Voronoi-Diagramm die gewunschten Eigen-
schaften hat, denn nur dann ist diese Definition sinnvoll. Wir mussen uberprufen, ob fur alle
Punkte aus AR(p, S, G) auch p ein nachster Nachbar in S bzgl. der Metrik adG ist. Außerdem
mussen diejenigen Punkte der Ebene, welche mehr als einen nachsten Nachbar in S haben,
vernunftig behandelt werden. Dieses bedeutet, daß jeder Punkt der Ebene in mindestens
einer Airline-Voronoi-Region liegen muß, und daß die Schnittmenge zweier Airline-Regionen
aus Kurvenstucken oder einzelnen Punkten bestehen soll. Die beiden letzten Bedingungen
sind schon aufgrund der Eigenschaften der additiv gewichteten Voronoi-Diagramme erfullt.
Sei z ∈ R2 ein Punkt der Ebene, welcher in der Region AR(p, S, G) liegt. Dann liegt z in
R(p, S) oder es gibt ein v ∈ V mit f(v) = p und z ∈ R(v, S). Sei q ∈ S, q 6= p ein weiterer
Ort.
Im Fall z ∈ R(p, S) gilt:
|zp| ≥ adG(z, p)
= min
(|zp|, min
v,w∈V
(|zv| + adG(v, w) + |wp|))≥ min
(|zp|, min
v∈V
(|zv| + w(v)))
= |zp|=⇒ adG(z, p) = |zp|
6.3 Das Airline-Voronoi-Diagramm 61
und
adG(z, q) = min
(|zq|, min
v,w∈V
(|zv| + adG(v, w) + |wq|))≥ min
(|zq|, min
v∈V
(|zv| + w(v)))
≥ |zp|= adG(z, p)
Im Fall z ∈ R(v, S) mit f(v) = p gilt:
|zv| + w(v) = |zv| + adG(v, p)
≥ adG(z, p)
= min
(|zp|, min
v,w∈V
(|zv| + adG(v, w) + |wp|))≥ min
(|zp|, min
v∈V
(|zv| + w(v)))
= |zv| + w(v)
=⇒ adG(z, p) = |zv| + w(v)
und
adG(z, q) = min
(|zq|, min
v,w∈V
(|zv| + adG(v, w) + |wq|))≥ min
(|zq|, min
v∈V
(|zv| + w(v)))
= |zv| + w(v)
= adG(z, p)
In jedem Fall erhalten wir fur alle p ∈ S, z ∈ AR(p, S, G) und q ∈ S \ p:
adG(z, p) ≤ adG(z, q)
Deshalb enthalt AR(p, S, G) wie verlangt nur Punkte, welche p als nachste Nachbarn in S
bzgl. adG haben.
Bemerkung. Bei der Definition von neuen Arten von Voronoi-Diagrammen muß man sich
uberlegen, wie man mit flachigen Bisektoren umgeht. Schon bei der L1-Metrik kann der Bi-
sektor zweier Punkte der Ebene zwei volle Viertelebenen enthalten (siehe [24]). Wenn man
dann wie gewohnt offene oder abgeschlossene Voronoi-Regionen definiert, erhalt man entwe-
der Flachen, die zu keiner Region gehoren (no-man’s land), oder Flachen, die in mehreren
62 6. Das Voronoi-Diagramm in der Airline-Metrik
Regionen liegen. Um diese Situationen zu vermeiden, lost man flachige Bisektoren auf, indem
man sie einer der beiden Regionen zuschlagt.
In unserem Fall entstehen flachige Bisektoren dann, wenn es einen Flughafen v ∈ V und zwei
Orte pi, pj ∈ S, i < j gibt mit w(v) = adG(v, pi) = adG(v, pj). Dann haben alle Punkte der
Region R(v, S) sowohl pi als auch pj als nachsten Nachbar in S bzgl. adG. Wir haben diese
Situation dadurch aufgelost, daß wir f(v) = pi gesetzt habe. R(v, S) ist dann ein Teil von
AR(p, S, G). Die Auflosung flachiger Bisektoren erfolgt also mit Hilfe einer Ordnung von S.
Diese haben wir nicht naher bestimmt, sondern wir lassen dem Anwender die Freiheit, eine
ihm genehme Ordnung auf S zu definieren. Eine Ordnung der Menge S erhalt man z.B.,
wenn man den R2 lexikographisch ordnet.
Viele Eigenschaften der additiv gewichteten Voronoi-Diagramme gelten auch fur die gefarb-
ten additiv gewichteten Voronoi-Diagramme und damit auch fur die Airline-Voronoi-Diagramme,
oder sie konnen entsprechend modifiziert werden.
Definition 6.6. Es sei p ∈ S und v, v′ ∈ V . p dominiert v, wenn |pv| = w(v). v′ dominiert
v, wenn |v′v| + w(v′) = w(v).
Die Region R(v, S) ist genau dann leer, wenn v dominiert wird.
Die Airline-Voronoi-Kanten sind selbstverstandlich wieder wie im additiv gewichteten Fall
Hyperbelstucke oder Geradenstucke. Die Airline-Regionen sind jetzt aber nicht mehr not-
wendigerweise zusammenhangend, und die Schnittmenge dreier Regionen kann mehr als zwei
Punkte enthalten. Das Voronoi-Diagramm hat O(n+m) viele Kanten und braucht nicht zu-
sammenhangend sein. Weil beim gefarbten additiv gewichteten Voronoi-Diagramm Kanten
des ungefarbten Diagramms entfallen konnen, sind die Zusammenhangskomponenten des
Airline-Voronoi-Diagramms nicht mehr notwendigerweise unbeschrankt. Sie enthalten aber
keine isolierten Punkte.
6.4 Anwendungen des Voronoi-Diagramms
Das Prinzip, einen Raum, in dem sich Objekte befinden, in Einflußbereiche aufzuteilen,
ist sehr allgemein und fur viele Wissenschaften von Bedeutung. Es gibt Anwendungen des
Voronoi-Diagramms in der Archaologie, Biologie, Kristallographie, Kunst und Physik. Lite-
raturhinweise hierzu findet man in [10, 23].
Es gibt viele Anwendungen fur das klassische Voronoi-Diagramm. Einige dieser Anwendun-
gen kann man verallgemeinern auf den Fall, daß die zugrundeliegende Metrik eine andere
6.4 Anwendungen des Voronoi-Diagramms 63
als die euklidische ist. Wir betrachten nun einige Beispiele fur Anwendungen des additiv
gewichteten Voronoi-Diagramms und des Airline-Voronoi-Diagramms.
6.4.1 Das Problem des nachsten Postamts
Im klassischen Fall lautet das Problem des nachsten Postamts (”post office“-Problem) wie
folgt:
Definition 6.7 (Problem des nachsten Postamts).
Sei S eine Menge von n Orten in der Ebene. Man baue eine Datenstruktur auf, mit der sich
fur einen beliebigen Anfragepunkt x ∈ R2 der nachstgelegene der n Punkte aus S moglichst
schnell bestimmen laßt.
Bemerkung. Diese Vorgehensweise der Zusammenfassung von Anfrageobjekten, die diesel-
be Antwort hervorrufen, nennt man Ortsansatz (locus approach). Man stellt hiermit einen
Zusammenhang zwischen Losungen eines Problems und Punkten in einem Raum her.
Der Ortsansatz des Postamt-Problems wird durch das Voronoi-Diagramm reprasentiert, denn
das Voronoi-Diagramm unterteilt die Ebene in Regionen gleicher nachster Nachbarn. Wenn
man das Voronoi-Diagramm berechnet hat, muß man nur noch das Lokalisierungsproblem
(”point location“-Problem) losen.
Definition 6.8 (Lokalisierungsproblem).
Gegeben sei das Voronoi-Diagramm V (S). Man baue eine Datenstruktur auf, mit der sich
fur einen beliebigen Anfragepunkt x ∈ R2 moglichst schnell die Voronoi-Region bestimmen
laßt, in der x enthalten ist.
Eine einfache Losung des Lokalisierungsproblems, die sogenannte Streifenmethode (slab me-
thod), haben Dobkin und Lipton [9] entwickelt. Hierbei wir die Ebene in parallele Streifen zer-
legt, indem horizontale Geraden durch die Voronoi-Knoten gezogen werden. Weil innerhalb
der Streifen keine Knoten liegen, sind die Voronoi-Kanten innerhalb der Streifen geordnet.
Zur Lokalisierung eines Punktes x = (x1, x2) wird mittels binarer Suche der Streifen fur x2
bestimmt. Innerhalb des Streifens wird dann eine weitere binare Suche fur x1 durchgefuhrt.
Anfragen lassen sich mit der Streifenmethode zwar in der Zeit O(log n) beantworten, aber
der Speicherbedarf ist quadratisch, und damit ist auch die Vorverarbeitungszeit quadratisch.
Es gibt effizientere Methoden zur Losung des Lokalisierungsproblems (monotone Unterteilun-
gen,”layered-dag“-Datenstruktur). Literatur hierzu sind Kirkpatrick [22] und Edelsbrunner
et al. [11]. Diese Strukturen losen das Lokalisierungsproblem auch in O(log n) Zeit, sie haben
64 6. Das Voronoi-Diagramm in der Airline-Metrik
aber nur linearen Speicherbedarf und konnen in linearer Zeit aus dem Voronoi-Diagramm
aufgebaut werden.
Ein effizienter Algorithmus zur Losung des Postamt-Problems konstruiert zunachst in der
Zeit O(n log n) das Voronoi-Diagramm und baut dann in O(n) Zeit eine effiziente Struktur
zur Losung des Lokalisierungsproblems auf. Man hat dann in O(n log n) Zeit eine Daten-
struktur konstruiert, mit der man Anfragen nach dem nachsten Postamt in O(log n) Zeit
beantworten kann.
Offenbar funktioniert die Streifenmethode auch im additiv gewichteten Fall. Aber auch die
Methode von Kirkpatrick funktioniert im additiv gewichteten Fall, weil die Voronoi-Regionen
R(p, S) sternformig sind mit p im Kern. Auch hier liegt die zusatzliche Vorverarbeitungszeit
(nachdem V (S) konstruiert wurde) in O(n), und Anfragen konnen in der Zeit O(log n)
beantwortet werden.
Den Airline-Fall kann man mit Hilfe des entsprechenden ungefarbten, additiv gewichteten
Voronoi-Diagramms behandeln. Man erhalt dann eine Losung des Postamt-Problems mit
einer O((n + m) log(n + m)) Vorverarbeitung, welche Anfragen in der Zeit O(log(n + m))
beantwortet.
6.4.2 Weitere Distanzprobleme
Sharir [34] untersucht in seinem Artikel das additiv gewichtete Voronoi-Diagramm in der
Form des Voronoi-Diagramms von Kreisscheiben. Außer dem Postamt-Problem beschaftigt
er sich auch mit anderen Distanzproblemen.
Es sei angenommen, daß das Voronoi-Diagramm vorhanden ist. Dann kann man in linearer
Zeit testen, ob es eine Kreisscheibe gibt, welche vollstandig innerhalb einer zweiten Kreis-
scheibe liegt. Dieses ist dann der Fall, wenn die Voronoi-Region einer Kreisscheibe leer ist.
Es sei im folgenden angenommen, daß dieses nicht der Fall ist.
Man kann in linearer Zeit durch Betrachtung der Voronoi-Kanten alle Kreisscheibenpaare
bestimmen, dessen Voronoi-Regionen benachbart sind. Deshalb kann man in linearer Zeit
testen, ob es zwei Kreisscheiben gibt, welche sich schneiden. Wenn dieses nicht der Fall ist,
dann kann man in linearer Zeit ein dichtestes Kreisscheibenpaar, d.h. ein Paar von Kreisen
mit minimalem Abstand, bestimmen.
Man kann dieses Verfahren fur den gefarbten Fall modifizieren und uberprufen, ob es zwei
Kreisscheiben gibt, die sich schneiden und verschieden gefarbt sind. Auch ein dichteste Paar
von Kreisscheiben unterschiedlicher Farbe kann man bestimmen. Im gefarbten Fall betrachtet
6.4 Anwendungen des Voronoi-Diagramms 65
man Kanten nur dann, wenn die zugehorigen Kreisscheiben verschieden gefarbt sind.
Die Gesamtzeit fur die Konstruktion des Voronoi-Diagramms und den Test, ob sich zwei
Kreisscheiben schneiden bzw. fur die Bestimmung eines dichtesten Paares betragt O(n log n)
sowohl im ungefarbten als auch im gefarbten Fall.
Im ungefarbten Fall kann man sogar alle nachsten Nachbarn in der Zeit O(n) bestimmen,
wenn das Voronoi-Diagramm vorhanden ist.
Distanzprobleme spielen z.B. bei der Kollisionsvermeidung von Robotersystemen eine Rolle.
Mit der gefarbten Version kann man Situationen modellieren, in denen sich einige Objekte
schon von vornherein schneiden.
66 6. Das Voronoi-Diagramm in der Airline-Metrik
Kapitel 7
Berechnung des Voronoi-Diagramms
Im vorigen Kapitel haben wir das Airline-Voronoi-Diagramm definiert und gesehen, wie
nutzlich dieses bei der Losung von Distanzproblemen ist. In diesem Abschnitt mochten wir
einen Algorithmus entwickeln, um dieses Voronoi-Diagramm zu berechnen.
Wir haben das Airline-Voronoi-Diagramm auf das additiv gewichtete Voronoi-Diagramm
zuruckgefuhrt. In den ersten beiden Abschnitten besprechen wir, wie man additiv gewich-
tete Voronoi-Diagramme berechnen kann. Dazu verwenden wir den Sweep-Algorithmus von
Fortune [15]. Im ersten Abschnitt besprechen wir den Fortune-Algorithmus fur den klassi-
schen Fall, d.h. Punkte in der Ebene unter Verwendung der euklidischen Metrik. Danach
behandeln wir die wenigen kleineren Anderungen am Algorithmus, die notwendig sind, um
das additiv gewichtete Voronoi-Diagramm zu konstruieren. Grundlegend fur den Fortune-
Algorithmus ist die Transformationsabbildung ∗. Der dritte Abschnitt enthalt eine geome-
trische Interpretation dieser Abbildung. Im letzen Abschnitt untersuchen wir dann, wie man
den Algorithmus zur Berechnung des additiv gewichteten Voronoi-Diagramms dazu benutzen
kann, das Airline-Voronoi-Diagramm zu berechnen.
7.1 Der Sweepline-Algorithmus von Fortune
7.1.1 Einleitung
Die Idee des Sweep-Verfahrens ist, eine horizontale Sweepline von unten nach oben uber
die Ebene laufen zu lassen und sich dabei zu merken, wie die Voronoi-Regionen von der
Sweepline geschnitten werden. In der Sweep-Status-Struktur (SSS) werden die jeweils von
der Sweepline geschnittenen Voronoi-Kanten nach ihren x-Koordinaten sortiert gespeichert.
67
68 7. Berechnung des Voronoi-Diagramms
Die Schwierigkeit dabei ist, daß die Sweepline die Voronoi-Regionen schon vor Erreichen der
zugehorigen Voronoi-Orte schneidet.
Fortune [15] hat als erster diese Schwierigkeit uberwunden. Er hat eine geometrische Trans-
formation gefunden, welche die kombinatorische Struktur des Voronoi-Diagramms nicht
andert und dabei die Eigenschaft besitzt, daß jeder Voronoi-Ort auf sich selbst abgebil-
det wird und als unterster Punkt seiner transformierten Region erscheint. Berechnet wird
zunachst das transformierte Voronoi-Diagramm. Der Algorithmus weiß nun, wann eine neue
Region entsteht, namlich genau dann, wenn die Sweepline den zugehorigen Ort erreicht.
Die Rucktransformation ist einfach. Sie wird vom Algorithmus gleich mitausgefuhrt, so daß
keine transformierten Kanten und transformierten Knoten gespeichert werden, sondern gleich
das untransformierte Voronoi-Diagramm entsteht.
Fortune hat seinen Algorithmus ausfuhrlich in [15] beschrieben. Dieser Abschnitt enthalt eine
verkurzte Form des Artikels von Fortune. Ich zitiere hieraus und prasentiere den Algorithmus
ohne Beweis der Korrektheit.
7.1.2 Die Transformation”∗“
Die Transformationsabbildung ∗ ist grundlegend fur den Algorithmus. Wir werden sie in
diesem Unterabschnitt definieren und ihre Eigenschaften besprechen, ohne diese jedoch zu
beweisen.
Es sei S ∈ R2 eine Menge von n Voronoi-Orten in der euklidischen Ebene. Fur einen Punkt
p ∈ R2 sei px oder p.x die x-Koordinate und entsprechend py oder p.y die y-Koordinate. Die
Punkte der Ebene seien lexikographisch geordnet, d.h. p < q gdw. py < qy oder py = qy und
px < qx.
Definition 7.1. Sei l eine Gerade oder ein Geradensegment. p ∈ R2 sei ein Punkt der
Ebene. Wir sagen, l verlauft unterhalb von p, gdw. es einen Punkt q ∈ l gibt mit qx = px
und qy < py.
Definition 7.2. Die Funktionen dp fur p ∈ S und d sind wie folgt definiert:
dp : R2 → R+ dp(z) := |pz|(7.1)
d : R2 → R+ d(z) := minp∈S
(dp(z)
)(7.2)
Definition 7.3. Der Voronoi-Kreis um z ∈ R2 ist der Kreis um z mit dem Radius d(z).
Das euklidische Voronoi-Diagramm definieren wir wie ublich.
7.1 Der Sweepline-Algorithmus von Fortune 69
Definition 7.4. Der Bisektor von p, q ∈ S und die Voronoi-Region von p ∈ S sind die
Mengen
Bpq = z ∈ R2 : dp(z) = dq(z)(7.3)
Rpq = z ∈ R2 : dp(z) ≤ dq(z)(7.4)
Rp = z ∈ R2 : dp(z) = d(z)(7.5)
=⋂
q∈S\pRpq
Das Voronoi-Diagramm von S ist
V (S) = z ∈ R2 : es gibt p 6= q mit d(z) = dp(z) = dq(z)(7.6)
=⋃
p,q∈S,p 6=q
Rp ∩ Rq
Wir schreiben auch einfach V statt V (S).
Anders als im additiv gewichteten Fall sind die Voronoi-Regionen konvex, und zu zwei Orten
p, q ∈ S gibt es hochstens eine Voronoi-Kante. Wenn es eine Voronoi-Kante zu p und q gibt,
dann bezeichnen wir sie mit epq. Es gibt naturlich auch wieder nur O(n) viele Kanten bzw.
Knoten.
Definition 7.5. Die Hilfsabbildungen ∗p fur p ∈ S und die Abbildung ∗ sind wie folgt
definiert:
∗p : R2 → R2 ∗p(z) : =
(zx, zy + dp(z)
)(7.7)
∗ : R2 → R2 ∗(z) : =
(zx, zy + min
p∈S
(dp(z)
))(7.8)
=(zx, zy + d(z)
)Wir schreiben auch z∗ anstatt ∗(z). ∗ ist stetig. Ein Punkt z ∈ R
2 wird auf den obersten
Punkt des Voronoi-Kreises um z abgebildet. Jeder Voronoi-Ort wird auf sich selbst abgebil-
det. Auch vertikale Geraden werden auf sich selbst abgebildet. Fur B ⊆ R2 schreiben wir
auch B∗ anstatt ∗(B). Auf der Region Rp ist ∗ = ∗p.
Zur Untersuchung der Transformation ∗ betrachten wir zunachst die Hilfsfunktionen ∗p.
Lemma 7.1.
(1) Sei l eine nicht-vertikale Gerade. Dann ist ∗p injektiv auf l und ∗p(l) ist eine Hyperbel.
(2) Sei l eine vertikale Gerade und p 6∈ l. Dann ist ∗p injektiv auf l und ∗p(l) ist eine offene
vertikale Halbgerade, welche oberhalb der Geraden y = py verlauft.
70 7. Berechnung des Voronoi-Diagramms
(3) Sei l eine vertikale Gerade und p ∈ l. Dann ist ∗p(l) die abgeschlossene vertikale Halbge-
rade oberhalb von p. Die Punkte von l, die unterhalb von p liegen, werden auf p abgebildet.
Auf der Menge der Punkte von l, welche oberhalb von p liegen, ist ∗p injektiv.
Wir untersuchen jetzt, wie das Voronoi-Diagramm unter ∗ abgebildet wird.
Satz 7.2.
(1) Die Abbildung ∗ ist injektiv auf V .
(2) Sei epq eine Voronoi-Kante. Dann ist e∗pq ein Hyperbelstuck oder Geradenstuck.
(3) Jeder Voronoi-Ort p ∈ S ist das eindeutig bestimmte Minimum von R∗p, d.h.
p ∈ R∗p und ∀z ∈ R∗
p, z 6= p : py < zy
Satz 7.3.
Sei v ein Voronoi-Knoten. p, q ∈ S seien diejenigen Voronoi-Orte, welche man als erste
erreicht, wenn man den Voronoi-Kreis von v ausgehend von v∗ im Gegenuhrzeigersinn bzw.
Uhrzeigersinn duchlauft.
(1) Wenn v∗ kein Voronoi-Ort ist, dann verlauft die Kante e∗pq von v∗ aus nach oben, und
die restlichen Kanten verlaufen von v∗ aus nach unten.
(2) Wenn v∗ ein Voronoi-Ort ist, dann verlaufen die Kanten e∗pv und e∗vq von v∗ aus nach
oben, und die restlichen Kanten von v∗ verlaufen von v∗ aus nach unten.
Wir konnen jetzt jeden Punkt z des Bildbereichs von ∗ klassifizieren:
• z liegt im Innern einer Region R∗p.
• z liegt auf einer Kante e∗pq, ist aber weder ein Voronoi-Ort noch ein transformierter
Knoten.
• z ist ein Voronoi-Ort, aber kein transformierter Knoten.
In diesem Fall ist z das Minimum der Region R∗z , und es gibt ein Ort p mit z ∈ e∗zp.
• z ist ein transformierter Knoten, aber kein Voronoi-Ort.
In diesem Fall verlauft genau eine Kante von z aus nach oben, und mindestens zwei
Kanten verlaufen nach unten.
• z ist sowohl ein Voronoi-Ort als auch ein transformierter Knoten.
In diesem Fall verlaufen genau zwei Kanten von z aus nach oben, und mindestens eine
Kante verlauft nach unten. z ist das Minimum der Region R∗z .
7.1 Der Sweepline-Algorithmus von Fortune 71
7.1.3 Der Algorithmus zur Berechnung von V ∗ und V
Wie bereits erwahnt lassen wir eine horizontale Sweepline von unten nach oben uber die
Ebene laufen. Wir merken uns dabei, welche Regionen und Kanten des transformierten
Voronoi-Diagramms V ∗ von der Sweepline geschnitten werden.
Eine Region R∗p erscheint zum erstenmal dann, wenn die Sweepline den Ort p erreicht. Re-
gionen verschwinden dann, wenn sich Kanten schneiden. Haltepunkte der Sweepline sind
also die Voronoi-Orte und die Bilder der Voronoi-Knoten. Im ersten Fall sprechen wir von
Ortsereignissen, im zweiten Fall von Schnittereignissen.
Die Koordinaten der Ortsereignisse sind von vornherein gegeben. Die Koordinaten der Schnit-
tereignisse werden vom Algorithmus berechnet. Dazu werden immer dann, wenn eine neue
Kante in die Sweep-Status-Struktur eingetragen wird, die Schnittpunkte dieser Kante mit
seinen Nachbarkanten berechnet.
Seien R∗p und R∗
q zwei Regionen, die langs der Sweepline benachbart sind, und es sei py >
qy. In diesem Fall ist ∗p(Bpq) eine Hyperbel mit dem Minimum p. Zur Vereinfachung der
Darstellung des Algorithmus bezeichnen wir den monoton fallenden Teil der Hyperbel, d.h.
den links von p liegenden Teil, mit C−pq. Den monoton steigenden Teil der Hyperbel, d.h. den
rechts von p liegenden Teil, bezeichnen wir mit C+pq. C−
pq und C+pq heißen Grenzen.
Im Fall py = qy ist ∗p(Bpq) eine offene vertikale Halbgerade. Wir setzen in diesem Fall C−pq = ∅
und C+pq = ∗p(Bpq).
Mit Cpq bezeichnen wir eine der beiden Grenzen C−pq und C+
pq, wenn die Auswahl unwichtig
ist oder vom Zusammenhang bestimmt wird.
Der Algorithmus berechnet das transformierte Voronoi-Diagramm V ∗. Er benutzt dazu die
folgenden Datenstrukturen:
• Die Eingabe ist eine Menge S von n Voronoi-Orten.
• Die Ausgabe ist das transformierte Voronoi-Diagramm V ∗ als Menge von Bisektoren
und Knoten. Jeder Bisektor ist mit den Endpunkten der entsprechenden Kante mar-
kiert.
• Die Ereignisstruktur (ES) enthalt die Haltepunkte der Sweepline. Dieses sind die Orts-
und Schnittereignisse. Sinnvollerweise ordnet man die Ereignisse in Sweeprichtung. ES
ist eine Priority Queue von Ereignissen, d.h. von Punkten der Ebene, die zugleich ent-
weder Voronoi-Orte oder Schnittpunkte von Grenzen sind, und daher dementsprechend
72 7. Berechnung des Voronoi-Diagramms
gekennzeichnet sind. Zu einem Punkt der Ebene konnen mehrere Ereignisse existieren
und in ES enthalten sei. Die Ordnung dieser gleichzeitigen Ereignisse ist unwichtig.
• Die Sweep-Status-Struktur (SSS) speichert die aktuell von der Sweepline geschnitte-
nen transformierten Regionen und Grenzen geordnet von links nach rechts. SSS ist
eine Folge (R∗1, C1, R
∗2, . . . , R
∗k−1, Ck−1, R
∗k), die abwechselnd Regionen von V ∗ und die
entsprechenden Grenzen zwischen den Regionen enthalt. Regionen konnen mehrfach
in der Sweep-Status-Struktur vorkommen.
Algorithmus 7.1. (Berechnung von V ∗)
1) Initialisiere SSS und ES.
2) while not empty(ES) do
3) p := deletemin(ES);
4) if (p ist ein Ortsereignis) then
5) Suche eine Region R∗q in SSS, welche p enthalt.
(Wenn p auf einer Grenze liegt, dann gibt es zwei solcher Regionen. Man kann
sich dann eine der beiden aussuchen.)
6) Losche ggfs. den Schnittpunkt zwischen der linken und der rechten Grenze von
R∗q aus ES.
7) Erzeuge den Bisektor B∗pq.
8) Ersetze in SSS die Region R∗q durch die Folge R∗
q , C−pq, R
∗p, C
+pq, R
∗q .
9) Berechne den Schnittpunkt von C−pq mit seinem linken Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
10) Berechne den Schnittpunkt von C+pq mit seinem rechten Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
11) else if (p ist ein Schnittereignis) then
12) Sei p der Schnittpunkt zwischen den Grenzen Cqr und Crs.
13) Losche ggfs. den Schnittpunkt von Cqr mit seinem linken Nachbarn in SSS
und den Schnittpunkt von Crs mit seinem rechten Nachbarn in SSS aus ES.
14) Erzeuge den Bisektor B∗qs.
15) Ersetze in SSS die Folge Cqr, R∗r , Crs durch die Grenze Cqs.
16) Berechne den Schnittpunkt von Cqs mit seinem linken Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
17) Berechne den Schnittpunkt von Cqs mit seinem rechten Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
18) Markiere p als Knoten auf B∗qr, B∗
rs und B∗qs.
19) end; (* if *)
20) end; (* while *)
7.1 Der Sweepline-Algorithmus von Fortune 73
Die Initialisierung von SSS und ES fuhre man wie folgt durch:
Sei S = p1, . . . , pn mit pi < pj fur i < j, d.h. pi.y < pj.y oder pi.y = pj .y und
pi.x < pj .x. Sei k = maxj : pj.y = p1.y. Erzeuge die Bisektoren B∗p1p2
, . . . , B∗pk−1pk
und
setze SSS=(R∗p1
, C+p1p2
, R∗p2
. . . , R∗pk−1
, C+pk−1pk
, R∗pk
). Erzeuge Ortsereignisse zu den ubrigge-
bliebenen Voronoi-Orten pk+1, . . . , pn und initialisiere ES hiermit.
Mit dieser Initialisierung wird insbesondere der Sonderfall, daß mehrere Voronoi-Orte mit der
minimalen y-Koordinate p1.y existieren, korrekt behandelt. In dem Normalfall, daß es einen
eindeutig bestimmten untersten Voronoi-Ort gibt, d.h. p1.y < pj .y fur alle j ∈ 2, . . . , n,ist nach der Initialisierung SSS=(R∗
p1) und ES=(p2, . . . , pn).
Der Algorithmus 7.1 hat die sehr angenehme Eigenschaft, daß er auch mit degenerierten
Eingaben zurechtkommt, ohne sie gesondert behandeln zu mussen. Es wird nicht vorausge-
setzt, daß sich die Punkte aus S in allgemeiner Lage befinden. Dieses bedeutet, daß vier
oder noch mehr Voronoi-Orte kozirkular sein durfen, und daß drei oder mehr Orte kollinear
sein durfen. Allerdings kann der Algorithmus im degenerierten Fall Kanten der Lange Null
erzeugen. Kanten der Lange Null werden durch Bisektoren reprasentiert, bei denen beide
Endknoten identisch sind. Solche Kanten kann man naturlich nachtraglich wieder aus der
Ausgabe entfernen, falls dies erforderlich sein sollte. Alternativ kann man degenerierte Falle
auch explizit behandeln, allerdings wird der Algorithmus dann komplizierter.
Satz 7.4. Man kann den Algorithmus 7.1 so implementieren, daß man eine Laufzeit von
O(n log n) und ein Speicherplatzbedarf von O(n) erreicht.
Beweis.
Die while-Schleife wird O(n)-mal durchlaufen. Deshalb ist auch die Anzahl der vom Algorith-
mus erzeugten Bisektoren in O(n). Die Priority Queue ES enthalt nur O(n) viele Eintrage,
namlich hochstens zwei Eintrage je Grenze und einen Eintrag je Voronoi-Ort. Auf ES benotigt
wir die Operationen insert, delete und deletemin. ES kann man als Heap implementieren,
so daß man O(log n)-Zeit je Operation braucht. Auch SSS enthalt nur O(n) viele Eintrage,
denn eine horizontale Gerade kann einen Bisektor hochstens zweimal schneiden. Auf SSS
benotigt wir die Operationen insert, delete und search (Zeile 5)). SSS kann man als AVL-
Baum implementieren, so daß man O(logn)-Zeit je Operation braucht. Insgesamt braucht
man bei dieser Implementierung O(n log n) viel Zeit.
Algorithmus 7.1 ist ein optimaler Algorithmus, denn die Konstruktion des Voronoi-Dia-
gramms erfordert Ω(n log n) viel Zeit, auch wenn die n Punkte in S bereits nach einer
Koordinate sortiert sind (siehe [24]).
74 7. Berechnung des Voronoi-Diagramms
Satz 7.5. Man kann den Algorithmus 7.1 so modifizieren, daß er gleich V anstatt V ∗ be-
rechnet.
Beweis.
Der Algorithmus berechnet eine Kante, indem er zuerst den Bisektor zu der entsprechen-
den Kante erzeugt und spater dann den Bisektor mit den Endpunkten der Kante mar-
kiert. Diese Operationen kann man auch mit den untransformierten Bisektoren und Knoten
durchfuhren. Die Ereignisstruktur enthalt Ortsereignisse und Schnittereignisse. Ortsereignis-
se sind die Voronoi-Orte. Diese werden durch die Transformation auf sich selbst abgebildet,
so daß die transformierten Orte mit den untransformierten Orten identisch sind. Schnit-
tereignisse sind Schnittpunkte von Grenzen. Den Schnittpunkt zweier Grenzen erhalt man
auch, indem man den Schnittpunkt der zwei entsprechenden untransformierten Bisektoren
berechnet, und dann zur y-Koordinate dieses Schnittpunktes den Abstand zu einem der zu
den Bisektoren gehorenden Orte addiert. Auch die Sweep-Status-Struktur SSS kann untrans-
formierte Voronoi-Regionen und Bisektoren enthalten, die Transformation muß man aber bei
der search-Operation in Zeile 5) berucksichtigen.
7.2 Der Sweepline-Algorithmus fur das additiv gewich-
tete Voronoi-Diagramm
Fortune hat in dem Artikel [15] uber seinen Sweepline-Algorithmus auch gezeigt, daß man mit
der gleichen Sweepline-Technik auch das additiv gewichtete Voronoi-Diagramm berechnen
kann. Der entsprechende Abschnitt seines Artikels ist die Grundlage fur diesen Abschnitt.
Ich zitiere aus Fortunes Artikel und fasse die Ergebnisse zusammen.
Im letzten Kapitel haben wir das additiv gewichtete Voronoi-Diagramm definiert und einige
Eigenschaften aus dem Artikel von Sharir [34] besprochen. Sei hier wieder S eine Menge von
n Voronoi-Orten und wp das Gewicht des Ortes p ∈ S. Die Gewichte seien alle nichtnegativ.
Lemma 7.6.
Es seien p, q ∈ S, p 6= q und weder p dominiere q noch q dominiere p (zur Erinnerung: p
dominiert q, wenn |pq|+ wp ≤ wq). Es sei wp > wq. Bpq ist dann derjenige Ast der Hyperbel
mit den Brennpunkten p und q, welcher um p herum verlauft.
(1) Sei |qy −py| > wp−wq. Dann verlauft eine Asymptote von Bpq nach links und die andere
nach rechts.
(2) Sei |qy − py| = wp − wq. Dann hat Bpq eine vertikale Asymptote und eine nichtvertikale
Asymptote.
7.2 Der Sweepline-Algorithmus fur das additiv gewichtete Voronoi-Diagramm 75
(3) Sei |qy −py| > wp −wq. Dann verlaufen beide Asymptoten von Bpq nach links, oder beide
Asymptoten verlaufen nach rechts.
Die Transformationsabbildung ∗ berucksichtigt im additiv gewichteten Fall auch die Gewich-
te der Voronoi-Orte.
Definition 7.6. Die Hilfsabbildungen ∗p fur p ∈ S und die Abbildung ∗ sind wie folgt
definiert:
∗p : R2 → R2 ∗p(z) : =
(zx, zy + |pz| + wp
)(7.9)
∗ : R2 → R2 ∗(z) : =
(zx, zy + min
p∈S
(|pz| + wp
))(7.10)
Fur ein Voronoi-Ort p ∈ S ist ∗p(p) = (px, py + wp) und ∗q(p) = (px, py + |qp| + wq). Wenn
∗q(p)y ≤ ∗p(p)y mit q 6= p, dann ist |qp| + wq ≤ wp, d.h. q dominiert p. Hieraus folgt, daß p
dann von einem anderen Ort dominiert wird, wenn ∗(p)y < py + wp oder ∗(p)y = py + wp =
∗q(p)y mit einem q 6= p.
Lemma 7.7. Es sei p ∈ S ein Ort, der nicht dominiert wird. Dann ist Rp 6= ∅ und p∗ =
(px, py + wp) ist das eindeutig bestimmte Minimum von R∗p, d.h.
p∗ ∈ R∗p und ∀z ∈ R∗
p, z 6= p∗ : p∗y < zy
Lemma 7.8.
Es seien p, q ∈ S, p 6= q und weder p dominiere q noch q dominiere p.
(1) Sei qy + wq > py + wp. Dann ist (qx, qy + wq) das eindeutig bestimmte Minimum von
∗q(Bpq) und ∗q(Bpq) hat genau eine horizontale Tangente. Diese Tangente beruhrt ∗q(Bpq)
im Punkt (qx, qy + wq).
(2) Sei qy + wq = py + wp. Dann hat ∗q(Bpq) keine horizontalen Tangenten. ∗q(Bpq) verlauft
oberhalb der Geraden y = qy +wq und hat einen offenen Endpunkt bei((px + qx)/2, qy +wq
).
Der Sweepline-Algorithmus fur den additiv gewichteten Fall ist dem Algorithmus 7.1 sehr
ahnlich. Es gibt drei kleine Unterschiede:
(1) Der erste Unterschied ist, daß ein Voronoi-Ort p ∈ S durch die Abbildung ∗p nicht mehr
auf sich selbst abgebildet wird, sondern entsprechend seinem Gewicht nach oben verschoben
wird. Die Koordinaten eines Ortsereignisses zu dem Voronoi-Ort p ∈ S seien jetzt ∗p(p) =
(px, py + wp) anstatt p.
(2) Der zweite Unterschied ist, daß beim Auftreten eines Ortsereignisses getestet werden
muß, ob der neue Ort von keinem anderen Ort dominiert wird. Dieser Test ist, wie wir
gesehen haben, ein Nebenprodukt der Transformationsabbildung ∗.
76 7. Berechnung des Voronoi-Diagramms
(3) Der dritte Unterschied betrifft die Initialisierung von SSS und ES. Nachdem SSS mit z.B.
(R∗p1
, C+p1p2
, R∗p2
. . . , R∗pk−1
, C+pk−1pk
, R∗pk
) initialisiert wurde, muß man noch die Schnittpunkte
der Grenzen mit den jeweiligen Nachbarngrenzen in SSS berechnen und ggfs. in ES einfugen.
Im klassischen Fall ist dieses nicht notwendig, weil dort die Grenzen vertikale Halbgeraden
sind. Diese konnen sich naturlich nicht schneiden, da sie alle parallel verlaufen.
Der Algorithmus berechnet das transformierte additiv gewichtete Voronoi-Diagramm V ∗. Er
benutzt dazu die folgenden Datenstrukturen:
• Die Eingabe ist eine Menge S von n gewichteten Voronoi-Orten.
• Die Ausgabe ist das transformierte Voronoi-Diagramm V ∗ als Menge von Bisektoren
und Knoten. Jeder Bisektor ist mit den Endpunkten der entsprechenden Kante mar-
kiert.
• Die Ereignisstruktur (ES) enthalt die Haltepunkte der Sweepline. Dieses sind die Orts-
und Schnittereignisse in Sweeprichtung geordnet. Anders als im klassischen Fall tritt
das Ortsereignis zu dem Voronoi-Ort p ∈ S nicht am Punkt p ein, sondern am Punkt
(px, py + wp). Zu einem Punkt der Ebene konnen mehrere Ereignisse existieren und in
ES enthalten sei. Die Ordnung dieser gleichzeitigen Ereignisse ist unwichtig.
• Die Sweep-Status-Struktur (SSS) speichert die aktuell von der Sweepline geschnitte-
nen transformierten Regionen und Grenzen geordnet von links nach rechts. SSS ist
eine Folge (R∗1, C1, R
∗2, . . . , R
∗k−1, Ck−1, R
∗k), die abwechselnd Regionen von V ∗ und die
entsprechenden Grenzen zwischen den Regionen enthalt. Regionen konnen mehrfach
in der Sweep-Status-Struktur vorkommen.
Algorithmus 7.2. (Berechnung von V ∗)
1) Initialisiere SSS und ES.
2) while not empty(ES) do
3) p := deletemin(ES);
4) if (p ist ein Ortsereignis) then
5) Suche eine Region R∗q in SSS, welche den Punkt (px, py + wp) enthalt.
(Wenn (px, py + wp) auf einer Grenze liegt, dann gibt es zwei solcher Regionen.
Man kann sich dann eine der beiden aussuchen.)
Wenn q den Ort p dominiert, dann gehe zum Anfang der while-Schleife.
6) Losche ggfs. den Schnittpunkt zwischen der linken und der rechten Grenze von
R∗q aus ES.
7) Erzeuge den Bisektor B∗pq.
7.2 Der Sweepline-Algorithmus fur das additiv gewichtete Voronoi-Diagramm 77
8) Ersetze in SSS die Region R∗q durch die Folge R∗
q , C−pq, R
∗p, C
+pq, R
∗q .
9) Berechne den Schnittpunkt von C−pq mit seinem linken Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
10) Berechne den Schnittpunkt von C+pq mit seinem rechten Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
11) else if (p ist ein Schnittereignis) then
12) Sei p der Schnittpunkt zwischen den Grenzen Cqr und Crs.
13) Losche ggfs. den Schnittpunkt von Cqr mit seinem linken Nachbarn in SSS
und den Schnittpunkt von Crs mit seinem rechten Nachbarn in SSS aus ES.
14) Erzeuge den Bisektor B∗qs.
15) Ersetze in SSS die Folge Cqr, R∗r , Crs durch die Grenze Cqs.
16) Berechne den Schnittpunkt von Cqs mit seinem linken Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
17) Berechne den Schnittpunkt von Cqs mit seinem rechten Nachbarn in SSS und
fuge diesen ggfs. in ES ein.
18) Markiere p als Knoten auf B∗qr, B∗
rs und B∗qs.
19) end; (* if *)
20) end; (* while *)
Die Initialisierung von SSS und ES fuhre man wie folgt durch:
Sei S = p1, . . . , pn mit ∗pi(pi) < ∗pj
(pj) fur i < j, d.h. pi.y + wpi< pj.y + wpj
oder
pi.y +wpi= pj.y +wpj
und pi.x < pj .x. Sei k = maxj : pj.y +wpi= p1.y +wp1. Erzeuge die
Bisektoren B∗p1p2
, . . . , B∗pk−1pk
und setze SSS=(R∗p1
, C+p1p2
, R∗p2
. . . , R∗pk−1
, C+pk−1pk
, R∗pk
). Erzeu-
ge Ortsereignisse zu den ubriggebliebenen Voronoi-Orten pk+1, . . . , pn und initialisiere ES
hiermit. Berechne die Schnittpunkte der Grenzen in SSS mit den jeweiligen Nachbarngrenzen
und fuge sie ggfs. in ES ein.
Satz 7.9. Man kann den Algorithmus 7.2 so implementieren, daß man eine Laufzeit von
O(n log n) und ein Speicherplatzbedarf von O(n) erreicht.
Der Sweepline-Algorithmus von Fortune ist der erste Algorithmus, mit dem man das additiv
gewichtete Voronoi-Diagramm in der Zeit O(n log n) konstruieren kann. Ein alterer Algorith-
mus zur Konstruktion des additiv gewichteten Voronoi-Diagramms stammt von Sharir [34].
Hierbei handelt es sich um einen O(n log2 n)-Zeit divide-and-conquer Algorithmus, welcher
zudem noch wegen der komplizierten Details des merge-Schritts schwieriger zu implementie-
ren ist.
Satz 7.10. Man kann den Algorithmus 7.2 so modifizieren, daß er gleich V anstatt V ∗
berechnet.
78 7. Berechnung des Voronoi-Diagramms
7.3 Eine geometrische Interpretation der Transforma-
tionsabbildung”∗“
Von Edelsbrunner und Seidel [12] stammt eine dreidimensionale geometrische Interpretation
des Voronoi-Diagramms. Fortune [15] verwendet sie, um seinen Sweepline-Algorithmus zu
veranschaulichen. Hiermit wird die Bedeutung der Transformationsabbildung”∗“ und die
Funktionsweise des Sweepline-Algorithmus sehr verstandlich erklart.
Dieser Abschnitt ist eine Zusammenfassung und Erlauterung des entsprechenden Abschnitts
aus [15]. Weitere Grundlagen fur diesen Abschnitt sind [3, 24].
In [3] wird eine intuitive Betrachtungsweise der Voronoi-Diagramme erwahnt (”expanding
waves“-Betrachtungsweise):
Satz 7.11. Sei z ∈ R2 ein Punkt in der Ebene, und S sei eine Menge von n Voronoi-Orten
im R2 . Kp(t) : p ∈ S sei eine Menge von n Kreisen, Kp(t) = x ∈ R
2 : |px| = t.Die Kreise haben die Voronoi-Orte als Mittelpunkte und den gemeinsamen Radius r = t
zum Zeitpunkt t. Wir beobachten, wie sich die Kreise vom Zeitpunkt t = 0 aus langsam mit
gleicher Geschwindigkeit vergroßern. Dann gilt:
(1) Der Kreis Kp(t) erreicht den Punkt z als erster genau dann, wenn z im Innern der
Voronoi-Region Rp liegt.
(2) Die Kreise Kp(t), Kq(t) erreichen gleichzeitig den Punkt z als erste genau dann, wenn
z im Innern der Voronoi-Kante epq liegt.
(3) Die Kreise Kp1(t), . . . , Kpk(t) mit k ≥ 3 erreichen gleichzeitig den Punkt z als erste
genau dann, wenn z ein Voronoi-Knoten ist, an dem die Regionen Rp1 , . . . , Rpkangrenzen.
Wir ubertragen diese dreidimensionale Betrachtungsweise in den R3 . Dazu interpretieren
wir die z-Achse als Zeitachse. Die xy-Ebene im R3 entspricht der euklidischen Ebene R
2 .
Die Kreise (Kp(t))p∈S breiten sich von den Voronoi-Orten aus und steigen dabei die z-Achse
hoch. Sie erzeugen dabei Kegel mit Innenwinkel π/2, welche auf der xy-Ebene senkrecht
stehen. Die Spitzen dieser Kegel liegen in den Voronoi-Orten.
Definition 7.7. Der Kegel Gp eines Voronoi-Ortes p ∈ S ist der Graph der Abstandsfunk-
tion dp.
Gp =(
x, y, dp(x, y))
: (x, y) ∈ R2
(7.11)
7.3 Eine geometrische Interpretation der Transformationsabbildung”∗“ 79
C sei die untere Kontur der Flachen (Gp)p∈S, d.h.
C =
(x, y, min
p∈S
(dp(x, y)
)): (x, y) ∈ R
2
(7.12)
=(
x, y, d(x, y))
: (x, y) ∈ R2
Die Menge D enthalte diejenigen Punkte aus C, welche auf mindestens zwei Kegeln liegen.
D =(
x, y, z) ∈ C : es gibt p 6= q mit z = dp(x, y) = dq(x, y)
(7.13)
=(
x, y, z) ∈ R3 : (x, y) ∈ V (S) und z = d(x, y)
Das Voronoi-Diagramm V (S) ist dann gleich der Projektion von D auf die xy-Ebene.
Satz 7.12. Es sei π12 die Projektion des R3 auf die xy-Ebene, d.h.
π12 : R3 → R2 , π12(x, y, z) = (x, y).(7.14)
Dann gilt:
Bpq = π12(Gp ∩ Gq)(7.15)
Rp = π12(Gp ∩ C)(7.16)
V (S) = π12(D)(7.17)
Bemerkung. Dieser Ansatz von Edelsbrunner und Seidel ist nicht auf die euklidische Metrik
beschrankt. Wir haben zur Definition der Flachen (Gp)p∈S die Abstandsfunktionen dp(z) :=
|pz| benutzt. dp : R2 → R+ ordnet jedem Punkt z der Ebene den Wert dp(z) als Abstand
zu p zu. Entscheidend ist die Stetigkeit der Funktionen (dp)p∈S, so daß die Graphen (Gp)p∈S
Flachen im R3 sind und man C als untere Kontur dieser Flachen konstruieren kann. Man kann
deshalb mit diesem Ansatz das Voronoi-Diagramm von S bezuglich einer Familie (fp)p∈S von
stetigen Funktionen R2 → R definieren:
Gp =(
x, y, fp(x, y))
: (x, y) ∈ R2
C =
(x, y, min
p∈S
(fp(x, y)
)): (x, y) ∈ R
2
D =
(x, y, z
) ∈ C : es gibt p 6= q mit z = dp(x, y) = dq(x, y)
V (S) := π12(D)
Bemerkung. Aus Satz 7.12 erhalt man offenbar sofort einen z-Buffer-Algorithmus zur Dar-
stellung von Voronoi-Diagrammen am Bildschirm.
80 7. Berechnung des Voronoi-Diagramms
Wenn man nicht langs der z-Achse sondern schrag entlang der Geraden x = 0, y + z = 0projiziert, dann erhalt man das transformierte Voronoi-Diagramm V ∗(S).
Satz 7.13. Es sei π∗12 die Projektion des R
3 auf die xy-Ebene langs der Geraden x =
0, y + z = 0, d.h.
π∗12 : R3 → R
2 , π∗12(x, y, z) = (x, y + z).(7.18)
Dann gilt:
∗p(Bpq) = π∗12(Gp ∩ Gq)(7.19)
R∗p = π∗
12(Gp ∩ C)(7.20)
V ∗(S) = π∗12(D)(7.21)
Satz 7.13 liefert eine geometrische Interpretation des Fortune-Algorithmus:
Sei die aktuelle Position der Sweepline die Gerade y = c (in der xy-Ebene). Sei Pc die Ebene
y + z = c. Dann ist der Teil von V ∗(S), welcher momentan von der Sweepline geschnitten
wird, gleich der schragen Projektion π∗12(Pc ∩D). Wir konnen uns den Fortune-Algorithmus
deshalb auch so vorstellen, daß eine Sweepebene parallel zur Ebene y + z = 0 durch den R3
lauft.
In dem Moment, wo die Sweepebene einen Kegel Gp erreicht, ist sie tangent zu dem Kegel,
so daß die schrage Projektion des Durchschnitts zwischen der Sweepebene und dem Kegel
gleich dem Ort p ist. Hierdurch wird auch klar, weshalb eine transformierte Region R∗p erst
dann in der Sweep-Status-Struktur erscheint, wenn die Sweepline den Ort p erreicht.
Im additiv-gewichteten Fall ist Gp = (x, y, dp(x, y) + wp) : (x, y) ∈ R2 ein um wp in
z-Richtung verschobener Kegel.
7.4 Berechnung des Airline-Voronoi-Diagramms
Sei G = (V, cost) ein positiver, symmetrischer Graph mit Knotenmenge V = v1, . . . , vm ⊂R
2 , und S = p1, . . . , pn ⊂ R2 sei eine Menge von n Voronoi-Orten in der Ebene.
Im letzten Kapitel haben wir das Airline-Voronoi-Diagramm AV (S, G) von S bzgl. der
Airline-Metrik von G definiert als ein gefarbtes, additiv gewichtetes Voronoi-Diagramm. Es
sei V (S) das dem Airline-Voronoi-Diagramm AV (S, G) zugrunde liegende ungefarbte, addi-
tiv gewichtete Voronoi-Diagramm. Hierbei ist S := S ∪V = p1, . . . , pn, v1, . . . , vm, und fur
7.4 Berechnung des Airline-Voronoi-Diagramms 81
die Gewichtsfunktion w gilt:
w : S → R+
w(z) :=
0 falls z ∈ S
minadG(z, p) : p ∈ S falls z ∈ V \ S
Das gefarbte Diagramm AV (S, G) erhalten wir aus dem ungefarbten Diagramm V (S), indem
wir diejenigen Kanten entfernen, welche zwei gleichfarbige Regionen voneinander abgrenzen.
Zum Entfernen der Kanten benotigen wir die Funktion f , welche jeden Flughafen auf den
nachstgelegenen Voronoi-Ort abbildet.
f : S → S
w(z) :=
z falls z ∈ S
piz falls z ∈ V \ S und iz = mini ∈ 1, . . . , n : adG(z, pi) = w(z)
Man kann das Airline-Voronoi-Diagramm AV (S, G) nun wir folgt konstruieren:
(1) Zuerst berechne man die Funktionen w und f , d.h. man berechne(w(v)
)v∈V
und(f(v)
)v∈V
.
Hierzu benotigt man die Airline-DistanzenadG(v, p) : v ∈ V, p ∈ S
. Mit dem Al-
gorithmus 5.4 kann man zu jedem p ∈ S die MengeadG(v, p) : v ∈ V in O(m2)-
Zeit berechnen. Durch n-fache Anwendung dieses Algorithmus, kann man dann die MengeadG(v, p) : v ∈ V, p ∈ S
und damit die Funktionen w und f in O(nm2)-Zeit berechnen.
Dieses kann man so implementieren, daß man einen Speicherplatzbedarf von O(n + m) er-
reicht.
(2) Danach konstruiere man das ungefarbte, additiv gewichtete Voronoi-Diagramm V (S)
mit dem Algorithmus 7.2. Diesen kann man nach Satz 7.9 so implementieren, daß man eine
Laufzeit von O((n + m) log(n + m)) und einen Speicherplatzbedarf von O(n + m) erreicht.
(3) Zuletzt loscht man diejenigen Kanten und Knoten, welche beim Ubergang von V (S) zu
AV (S, G) wegfallen. Dieses kann man in der Zeit O(n + m) durchfuhren.
Satz 7.14. Man kann das Airline-Voronoi-Diagramm so berechnen, daß man eine Laufzeit
von O(n logn + nm2) und ein Speicherplatzbedarf von O(n + m) erreicht.
82 7. Berechnung des Voronoi-Diagramms
Kapitel 8
Abschließende Bemerkungen und
offene Probleme
Naturlich kann eine einzelne wissenschaftliche Arbeit kein großeres Gebiet bis ins letzte Detail
behandeln. Wir haben uns in dieser Arbeit damit beschaftigt, wie man aus einem metrischen
Raum (X, d) und einem Distanzgraphen G, dessen Knoten zugleich Punkte dieses metrischen
Raumes sind, einen weitere Metrik adG,d konstruiert. Diese neue Metrik soll ausdrucken, daß
man die Kanten des Graphen als zusatzliche Verbindungen von Punkten in diesem Raum
auffaßt. Hierdurch verkurzt sich der Abstand von Punktepaaren.
Auf diese Art erhalt man eine Metrik, die sowohl mit der ursprunglichen Metrik als auch
mit der Kostenfunktion des Graphen”moglichst gut vertraglich“ ist. Diese Aussage haben
wir durch dem Satz 4.5 prazisiert.
Viel Information, welche in der alten Metrik und in der Kostenfunktion des Graphen steckt,
ist auch in der neuen Metrik enthalten. Eine interessante Frage ist nun, ob und ggfs. wie
man aus der neuen Metrik die alte Metrik und den Graphen zuruckgewinnen kann.
Wir haben uns besonders intensiv mit dem Fall beschaftigt, in dem der metrische Raum
(X, d) die euklidische Ebene ist. Fur diesen Fall haben wir untersucht, wie man das zugehorige
Airline-Voronoi-Diagramm berechnen kann. Eine offenes Problem ist die Berechnung der
Airline-Voronoi-Diagramme, wenn andere metrischen Raume zugrunde liegen. Hiermit meine
ich insbesondere den euklidischen Raum R3 und die Kugeloberflache S2 := (x, y) : x2+y2 =
1 ⊂ R3 .
Eine andere Moglichkeit zur weiteren Untersuchung der Airline-Voronoi-Diagramme ist die
Betrachtung von stochastischen Eigenschaften, wenn man annehmen kann, daß die Voronoi-
Orte oder Flughafen zufallig verteilt sind. Vielleicht erhalt man dann ein effizientes randomi-
83
84 8. Abschließende Bemerkungen und offene Probleme
siertes inkrementelles Verfahren zur Konstruktion des Airline-Voronoi-Diagramms, welches
sich auch als on-line-Verfahren eignet, also fur Situationen, in denen Orte und Flughafen
nachtraglich hinzugefugt oder entfernt werden.
Fur die Bewegungsplanung und Kollisionsvermeidung von Robotersystemen ist das dynami-
sche Verhalten von gefarbten additiv gewichteten Voronoi-Diagrammen wichtig. Man konn-
te untersuchen, wie sich die Voronoi-Diagramme verandern, wenn einzelne Orte sich auf
bestimmten Kurven bewegen, z.B. Geraden oder Kreise.
Obwohl wir uns auch mit Anwendungen der Voronoi-Diagramme beschaftigt haben, haben
wir nur kurz erwahnt, daß es auch Anwendungen außerhalb der Informatik gibt.
Eine weitere offene Frage ist, wie man Algorithmen zur Konstruktion der Diagramme paralle-
lisieren kann, so daß bei geeigneter Hardware die Berechnung schneller durchgefuhrt werden
kann.
Anhang A
Die Java-Programme zur
Veranschaulichung der
Voronoi-Diagramme
Ich habe zwei Java-Programme entwickelt zur Veranschaulichung des additiv gewichteten
Voronoi-Diagramms und des Airline-Voronoi-Diagramms. Zur Berechnung dieser Diagramme
habe ich die Algorithmen aus dem 7. Kapitel implementiert.
In diesem Kapitel erklare ich die Bedienung dieser Programme und deren Aufbau. Danach
werden wir einige Schwierigkeiten besprechen, welche sich bei der Implementierung der Al-
gorithmen ergeben. Hierzu stelle ich meine Losungswege vor.
A.1 Das Programm”VoroCircles“
A.1.1 Einfuhrung
Das Programm”VoroCircles“ dient zur Veranschaulichung der additiv gewichteten Voronoi-
Diagramme.
Zur Erinnerung: Additiv gewichtete Punktmengen kann man als Kreisscheiben darstellen.
Sei S eine Menge von n Voronoi-Orten in der Ebene. Zu jedem Ort p ∈ S sei ein additives
Gewicht wp gegeben. Es sei wmax = maxwp : p ∈ S, rp = wmax − wp, und Kp = z ∈ R2 :
|pz| ≤ rp sei die abgeschlossene Kreisscheibe um das Zentrum p mit dem Radius rp. Dann
ist das additiv gewichtete Voronoi-Diagramm von S identisch mit dem Voronoi-Diagramm
der Kreisscheiben Kp : p ∈ S.
85
86 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
Abbildung A.1: Das Hauptfenster von VoroCircles.
A.1.2 Die Bedienung von”VoroCircles“
Das Hauptfenster von VoroCircles besteht aus einer Zeichenflache und einer Steuerungslei-
ste. In der Zeichenflache werden die Kreisscheiben und das zugehorige Voronoi-Diagramm
dargestellt. Der Benutzer kann einzelne Kreisscheiben hinzufugen, entfernen oder verschie-
ben. Er kann auch den Radius einer Kreisscheibe verandern. Das Programm berechnet nach
jeder Veranderung in der Zeichenflache automatisch das zugehorige Voronoi-Diagramm und
zeichnet die Voronoi-Kanten in die Zeichenflache ein.
Zur besseren Unterscheidung werden die einzelnen Objekte verschiedenfarbig gezeichnet. Die
Kanten werden blau gezeichnet. Zur Darstellung der Kreisscheiben werden drei Farben be-
nutzt. Die Kreisscheiben selber werden gelb dargestellt. Zusatzlich werden die Mittelpunkte
der Kreisscheiben als rote Punkte eingezeichnet, und die Rander der Kreisscheiben werden
grun gekennzeichnet.
Die Steuerungsleiste am unteren Bildschirmrand enthalt zwei Gruppen von Markierungs-
feldern und eine Schaltflache. Auf der rechten Seite befindet sich eine Gruppe von sechs
Markierungsfeldern. Die Markierungsfelder sind beschriftet mit den Werten”0“,
”10“,
”20“,
”30“,
”40“ und
”50“. Hier kann man einen Wert fur den Radius einstellen, bevor man eine
A.1 Das Programm”VoroCircles“ 87
Kreisscheibe hinzufugt. Auf der linken Seite befindet sich eine Gruppe von zwei Markie-
rungsfeldern. Wenn das Markierungsfeld”Add Site“ aktiv ist, dann kann der Benutzer in
der Zeichenflache Kreisscheiben hinzufugen, entfernen oder verschieben. Wenn das Markie-
rungsfeld”Change Radius“ aktiv ist, dann kann der Benutzer die Radien der Kreisscheiben
vergroßern oder verkleinern, oder er kann Kreisscheiben verschieben. Die Schaltflache”Clear“
dient zum Loschen des Inhalts der Zeichenflache.
Im”Add Site“-Modus kann man eine Kreisscheibe hinzufugen, indem man den Mauszeiger
in die Zeichenflache bewegt und die linke Maustaste druckt. Die Kreisscheibe wird dann
so plaziert, das sich der Mittelpunkt am Ort des Mauszeigers befindet. Zum Entfernen ei-
ner Kreisscheibe bewegt man den Mauszeiger in die zugehorige Voronoi-Region und druckt
dann die rechte Maustaste. Wenn man den Mauszeiger auf den rot eingezeichneten Mittel-
punkt einer Kreisscheibe bewegt, dann kann man diese mit Hilfe der linken Maustaste in der
Zeichenflache verschieben.
Im”Change Radius“-Modus kann man die Radien der Keisscheiben um funf Pixeleinhei-
ten vergroßern oder verkleinern, indem man die linke bzw. rechte Maustaste druckt. Man
kann allerdings nur Kreisscheiben mit einem Radius kleiner 50 vergroßern und Kreisscheiben
mit einem Radius großer 0 verkleinern. Es wird diejenige Kreisscheibe ausgewahlt, dessen
Mittelpunkt dem Mauszeiger am nachsten ist. Wenn sich der Mauszeiger genau uber einen
Mittelpunkt befindet, dann kann man wie im”Add Site“-Modus Kreisscheiben verschie-
ben. Man bachte daher, daß sich zum Vergroßern oder Verkleinern von Kreisscheiben der
Mauszeiger nicht genau uber dem Mittelpunkt einer Kreisscheibe befinden darf.
A.1.3 Aufbau und Installation von”VoroCircles“
Ich habe VoroCircles mit der Java-Version JDK 1.1.6 entwickelt. Das Programm besteht aus
dem Ordner “VoroCircles“. Dieser Ordner enthalt die folgenden Dateien:
Ausgabe.java Punkt.java
Edge.java Site.java
EdgeList.java SiteList.java
Main.java VoroSweep.java
MainCanvas.java WStueck.java
MainInfo.java
Diese Dateien enthalten den Quelltext der gleichnamigen Klassen. Zum Ausfuhren des Pro-
gramms muß man zunachst das JDK installieren. Danach kann man das Programm mit
88 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
dem Befehl”javac Main.java“ kompilieren. Hierdurch werden die entsprechenden Bytecode-
Dateien mit der Endung”*.class“ erzeugt. Gestartet wird das Programm mit dem Befehl
”java Main“.
Die Main-Klasse bildet den Hauptteil des Programms. Hier wird der Aufbau des Haupt-
fensters definiert und die globalen Variablen verwaltet. Die Main-Klasse enthalt die main-
Methode zum Starten des Programms, Methoden zum Abfragen der Zustande der Markie-
rungsfelder und eine Methode, welche das Action-Ereignis behandelt, daß beim anklicken
der Clear-Schaltflache erzeugt wird.
Die MainCanvas-Klasse ist eine Subklasse der Canvas-Klasse von Java. Die Main-Klasse
erzeugt ein Objekt der MainCanvas-Klasse. Dieses Objekt ist die Zeichenflache des Pro-
gramms. Die MainCanvas-Klasse enthalt Methoden zum Neuzeichnen und Aktualisieren des
Inhalts der Zeichenflache sowie Methoden zur Behandlung von Maus-Ereignisse, welche beim
Hinzufugen, Entfernen oder Verschieben von Kreisscheiben entstehen.
Die MainInfo-Klasse enthalt Methoden zur Ausgabe von Debugging-Informationen. Diese
Klasse wurde fur die Entwicklung des Programms verwendet, in der Endversion ist diese
Klasse inaktiv.
Die Ausgabe-Klasse enthalt Methoden zum Zeichnen der Kreisscheiben und Voronoi-Kanten.
Die Punkt-Klasse dient zur Modellierung von Punkten in der Ebene. Sie enthalt zwei Instan-
zenvariablen”x“ und
”y“ vom Typ
”double“ zum Speichern der Koordinaten des jeweiligen
Punktes. Desweiteren enthalt sie eine Methode zum Vergleichen zweier Punkte bzgl. der auf
Seite 68 beschriebenen lexikographischen Ordnung und eine Methode zum Berechnen des
Abstandes zweier Punkte.
Die Site-Klasse dient zur Modellierung der additiv gewichteten Voronoi-Orte. Sie ist eine
Subklasse der Punkt-Klasse und enthalt zusatzlich eine Instanzenvariable zum Speichern
des additiven Gewichtes des jeweiligen Ortes. Desweiteren enthalt sie eine Methode zum
Testen, ob ein Voronoi-Ort einen zweiten Voronoi-Ort dominiert.
Die Edge-Klasse dient zur Modellierung der Bisektoren und Voronoi-Kanten. Sie enthalt
Instanzenvariablen zum Speichern der zugehorigen Voronoi-Orte und der Endpunkte der
Kanten. Desweiteren enthalt sie Methoden zur Berechnung von Schnittpunkten zwischen
den Bisektoren und zwischen einem Bisektor und einer Geraden.
Objekte der SiteList-Klasse sind Behalter zum Speichern einer Menge von Site-Objekten.
Die Main-Klasse erzeugt ein Objekt der SiteList-Klasse. Dieses Objekt verwaltet die Menge
der vom Benutzer eingegebenen Voronoi-Orte.
A.2 Das Programm”VoroAirline“ 89
Objekte der EdgeList-Klasse sind Behalter zum Speichern einer Menge von Edge-Objekten.
Die Main-Klasse erzeugt ein Objekt der EdgeList-Klasse. Dieses Objekt verwaltet die Menge
der vom Programm berechneten Voronoi-Kanten.
Die VoroSweep-Klasse dient zur Implementierung des Sweepline-Algorithmus von Fortune
fur additiv gewichtete Voronoi-Diagramme (Algorithmus 7.2). Der Algorithmus benotigt
als Eingabe ein Objekt der SiteList-Klasse. Das Ergebnis der Berechnung ist ein Objekt
der EdgeList-Klasse. Zur Berechnung baut der Algorithmus eine Ereignisstruktur und eine
Sweep-Status-Struktur auf. Dieses geschieht innerhalb der VoroSweep-Klasse.
Die Sweep-Status-Struktur enthalt Objekte der WStueck-Klasse. Die WStueck-Klasse enthalt
außerdem einige Hilfsfunktionen fur den Fortune-Algorithmus.
A.2 Das Programm”VoroAirline“
A.2.1 Einfuhrung
Das Programm VoroAirline dient zur Veranschaulichung der Airline-Voronoi-Diagramme.
Zur Erinnerung: Wir haben das Airline-Voronoi-Diagramm zuruckgefuhrt auf das additiv
gewichtete Voronoi-Diagramm. Sei S eine Menge von n Voronoi-Orten in der Ebene, und
G sei derjenige Graph, dessen Airline-Metrik wir als Abstandsbegriff zugrunde legen. Es
sei V die Knotenmenge von G, E die Kantenmenge von G, cost die Kostenfunktion von G
und S := S ∪ V . Das Airline-Voronoi-Diagramm AV (S, G) ist gleich dem gefarbten additiv
gewichteten Voronoi-Diagramm V (S) bzgl. der Gewichtsfunktion w : S → R+ und der
Zuordnungsfunktion f : S → S. Das Gewicht eines Flughafens v ∈ V ist gleich dem Airline-
Abstand zum nachstliegenden Voronoi-Ort, d.h. w(v) = minadG(v, p) : p ∈ S. Im Fall
p ∈ S sei w(p) = 0. Die Zuordnungsfunktion f bildet jeden Flughafen v ∈ V auf den
nachstgelegenen Voronoi-Ort ab.
A.2.2 Die Bedienung von”VoroAirline“
Das Hauptfenster von VoroAirline besteht wie bei VoroCircles aus einer Zeichenflache und
einer Steuerungsleiste. In der Zeichenflache werden die Voronoi-Orte, Flughafen, Flugverbin-
dungen und das zugehorige Voronoi-Diagramm dargestellt. Zur Vereinfachung der Eingabe
der Flugverbindungen setzen wir voraus, daß alle Flugzeuge gleich schnell fliegen. Dann
existiert ein Faktor cspeed, um den die Flugverbindungen den Abstand der entsprechenden
90 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
Abbildung A.2: Das Hauptfenster von VoroAirline.
A.2 Das Programm”VoroAirline“ 91
Flughafen verkurzen, d.h. cost(v, w) = |vw|/cspeed falls (v, w) ∈ E. Der implementierte
Algorithmus zur Zuruckfuhrung des Airline-Voronoi-Diagramms auf das additiv gewichte-
te Voronoi-Diagramm macht von dieser Vereinfachung und der damit verbundenen Ein-
schrankung der moglichen Eingabedaten keinen Gebrauch.
Der Benutzer kann in der Zeichenflache einzelne Voronoi-Orte oder Flughafen hinzufugen,
entfernen oder verschieben. Er kann selbstverstandlich auch Flugverbindungen hinzufugen
oder entfernen. Das Programm berechnet nach jeder Veranderung in der Zeichenflache auto-
matisch das zugehorige Voronoi-Diagramm und zeichnet die Voronoi-Kanten in die Zeichen-
flache ein.
Zur besseren Unterscheidung werden die einzelnen Objekte verschiedenfarbig gezeichnet. Die
Voronoi-Orte sind rot, die Flughafen und Flugverbindungen schwarz. Die Kanten des Airline-
Voronoi-Diagramms weden blau gezeichnet. Zusatzlich sind noch diejenigen Kanten, welche
beim Ubergang vom ungefarbten additiv gewichteten Voronoi-Diagramm zum gefarbten ad-
ditiv gewichteten Voronoi-Diagramm entfallen, grau eingezeichnet.
Die Steuerungsleiste enthalt am linken Rand eine Gruppe von drei Markierungsfeldern. Wenn
das Markierungsfeld”Add or remove site“ aktiv ist, dann kann der Benutzer in der Zeichen-
flache Voronoi-Orte hinzufugen, entfernen oder verschieben. Entsprechend kann der Benutzer
Flughafen hinzufugen, entfernen oder verschieben, wenn das Markierungsfeld”Add or remo-
ve airport“ aktiv ist, und wenn das Markierungsfeld”Add or remove connection“ aktiv ist,
dann kann der Benutzer Flugverbindungen hinzufugen oder entfernen.
Links von der Mitte befinden sich drei Schaltflachen. Die Schaltflache”Clear“ dient zum
Loschen des Inhalts der Zeichenflache. Mit der Schaltflache”Remove all connections“ kann
man alle Flugverbindungen loschen. Die Schaltflache”Add all connections“ dient dazu, alle
moglichen Flugverbindungen zwischen den vorhandenen Flughafen hinzuzufugen. Hiermit
kann man den Graphen G vollstandig machen.
Rechts von der Mitte befinden sich ein Label-Objekt, eine Schaltflache und ein Textfeld. Das
Label-Objekt zeigt die Fluggeschwindigkeit cspeed an. Im Textfeld kann man einen neuen
Wert fur cspeed eingeben. Zulassig sind alle Zahlen ≥ 1. Die Schaltflache dient dazu, den im
Textfeld eingestellten Wert zu ubernehmen.
Am rechten Rand sind zwei Markierungsfelder. Hiermit kann man die Darstellung der Kanten
oder die Darstellung der Flugverbindungen unterdrucken.
92 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
A.2.3 Aufbau und Installation von”VoroAirline“
Ich habe auch VoroAirline mit der Java-Version JDK 1.1.6 entwickelt. Das Programm besteht
aus dem Ordner “VoroAirline“. Dieser Ordner enthalt die folgenden Dateien:
AirportList.java MainInfo.java
Ausgabe.java Punkt.java
Edge.java Site.java
EdgeList.java SiteList.java
Main.java VoroSweep.java
MainCanvas.java WStueck.java
Diese Dateien enthalten den Quelltext der gleichnamigen Klassen. Zum Ausfuhren des Pro-
gramms muß man zunachst das JDK installieren. Danach kann man das Programm mit
dem Befehl”javac Main.java“ kompilieren. Hierdurch werden die entsprechenden Bytecode-
Dateien mit der Endung”*.class“ erzeugt. Gestartet wird das Programm mit dem Befehl
”java Main“.
Die Klassen entsprechen denen von VoroCircles. Teilweise sind sie sogar identisch.
Die Site-Klasse dient jetzt sowohl zur Modellierung der Voronoi-Orte als auch der Flughafen.
Dazu enthalt sie zusatzlich eine Instanzenvariable”color“ vom Typ
”Site“ und eine boolesche-
Instanzenvariable”active“. Die color-Variable dient zum Speichern der Werte der Zuord-
nungsfunktion. Die active-Variable gibt an, ob ein Flughafen dominiert wird.
Neu ist die AirportList-Klasse. Objekte dieser Klasse sind Behalter zum Speichern einer
Menge von Flughafen und der Flugverbindungen untereinander. Die Main-Klasse erzeugt
ein Objekt der AirportList-Klasse. Dieses Objekt verwaltet die Menge der vom Benutzer
eingegebenen Flughafen und Flugverbindungen. Desweiteren enthalt sie eine Methode, um
die Gewichtsfunktion w und die Zuordnungsfunktion f zu berechnen. Dieses geschieht genau
so, wie es im Kapitel uber die Berechnung des Airline-Voronoi-Diagramms beschrieben ist.
Dabei wird auch der Wert der Variable”active“ bestimmt.
Die VoroSweep-Klasse dient zur Berechnung des Airline-Voronoi-Diagramms nach dem For-
tune-Algorithmus fur additiv gewichtete Voronoi-Diagramme (Algorithmus 7.2). Der Algo-
rithmus benotigt als Eingabe ein Objekt der SiteList-Klasse und hier außerdem ein Objekt
der AirportList-Klasse. Das Ergebnis der Berechnung ist wieder ein Objekt der EdgeList-
Klasse.
A.3 Schwierigkeiten bei der Implementierung 93
A.3 Schwierigkeiten bei der Implementierung
Das Thema dieser Diplomarbeit besteht aus zwei Teilen. Der erste Teil ist die Untersu-
chung der strukturellen Eigenschaften des Airline-Voronoi-Diagramms. Der zweite Teil ist
die Veranschaulichung des Airline-Voronoi-Diagramms durch ein Java-Programm. In diesem
Abschnitt beschreibe ich, welche Schwierigkeiten sich hierbei ergeben haben und wie ich
diese Schwierigkeiten uberwunden habe.
Im siebten Kapitel haben wir besprochen, wie man das Airline-Voronoi-Diagramm konstru-
ieren kann:
(1) Zuerst berechnet man die Gewichtsfunktion w : S → R+ und die Zuordnungsfunktion
f : S → S, d.h. man berechne(w(v)
)v∈V
und(f(v)
)v∈V
. Hierzu benotigt man die Airline-
DistanzenadG(v, p) : v ∈ V, p ∈ S
. Mit dem Algorithmus 5.4 kann man zu jedem p ∈ S
die MengeadG(v, p) : v ∈ V berechnen. Durch n-fache Anwendung dieses Algorithmus,
kann man dann die MengeadG(v, p) : v ∈ V, p ∈ S
und damit die Funktionen w und f
berechnen.
(2) Danach konstruiert man das ungefarbte, additiv gewichtete Voronoi-Diagramm V (S) mit
dem Fortune-Algorithmus 7.2.
(3) Zuletzt loscht man diejenigen Kanten und Knoten, welche beim Ubergang von V (S) zu
AV (S, G) wegfallen.
Die Schritte (1) und (3) sind einfach zu implementieren. Der Algorithmus 5.4 ist eine Anwen-
dung des Dijkstra-Algorithmus 5.3. Bei der Berechnung von w und f kann man gleichzeitig
schon feststellen, ob ein Flughafen v ∈ V dominiert wird durch den zugehorigen Voronoi-Ort
f(v) ∈ S oder durch einen anderen Flughafen. Flughafen, welche dominiert werden, habe
ich beim zweiten Schritt nicht berucksichtigt.
Schwierigkeiten ergaben sich beim zweiten Schritt, d.h. bei der Implementierung des Algo-
rithmus von Fortune fur additiv gewichtete Punktmengen.
Ziel meiner Software-Entwicklung im Rahmen dieser Diplomarbeit war es, ein Programm
”VoroAirline“ zur Veranschaulichung des Airline-Voronoi-Diagramms zu erhalten. Weil dieses
eine umfangreiche und komplizierte Aufgabe ist, bin ich etappenweise vorgegangen.
Zunachst habe ich den Fortune-Algorithmus fur den klassischen Fall, d.h. Punkte in der
Ebene unter Verwendung der euklidischen Metrik, implementiert (Algorithmus 7.1). Dieses
war relativ problemlos moglich. Allerdings beschreibt Fortune seinen Algorithmus in seinem
Artikel [15] sehr skizzenhaft, so daß man sich zur Implementierung viele eigene Gedanken
machen muß.
94 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
Als nachstes habe ich das Programm so verandert, daß es auch mit additiv gewichteten Orten
zurechtkommt. Hierbei gab es die bereits erwahnten Schwierigkeiten, auf welche wir noch
genauer eingehen werden. Das Ergebnis dieses Schrittes ist das Programm”VoroCircles“ zur
Veranschaulichung des additiv gewichteten Voronoi-Diagramms.
Zuletzt habe ich VoroCircles so verandert, daß das Programm zur Veranschaulichung des
Airline-Voronoi-Diagramms dient. Dieses war relativ einfach moglich, ohne daß sich Schwie-
rigkeiten ergaben. Das Ergebnis habe ich”VoroAirline“ genannt.
Der Fortune-Algorithmus fur additiv gewichtete Punktmengen (Algorithmus 7.2) unterschei-
det sich strukturell kaum vom gewohnlichen Fortune-Algorithmus (Algorithmus 7.1). Den
gewohnlichen Fortune-Algorithmus kann man aber viel leichter implementieren. Das Pro-
blem im additiv gewichteten Fall ist, daß die Bisektoren hier Hyperbelaste sein konnen. Man
muß sich uberlegen, wie man die Bisektoren bzw. Voronoi-Kanten mittels geeigneter Daten-
strukturen darstellen kann. Desweiteren muß man sich uberlegen, wie man die Schnittpunkte
zweier Hyperbeln bzw. die Schnittpunkte zwischen einer Hyperbel und einer Geraden be-
rechnen kann. Auch das Zeichnen des Voronoi-Diagramms ist im additiv gewichteten Fall
schwieriger, weil man in Java Hyperbelstucke nicht wie Geradenstucke direkt zeichnen kann.
Probleme ergeben sich auch dadurch, daß wir bisher von reellen Zahlen ausgegangen sind,
der Computer aber mit Gleitkomma-Zahlen rechnet. Hierdurch entstehen Rechenungenau-
igkeiten und Rundungsfehler. Insbesondere mit Tests der Art”a=b?“ oder
”a¡b“ muß man
vorsichtig umgehen.
A.3.1 Darstellung der Bisektoren
Es seien s1 = (x1, y1) und s2 = (x2, y2) zwei Voronoi-Orte mit den additiven Gewichten w1
bzw. w2. Es sei w1 > w2 und r := w1 − w2. Der Bisektor
B12 = z ∈ R2 : |s1z| + w1 = |s2z| + w2(A.1)
ist ein Ast einer Hyperbel mit den Brennpunkten s1 und s2.
Mein erster Losungsansatz war das Aufstellen einer Gleichung
ax2 + by2 + cxy + dx + ey + f = 0(A.2)
A.3 Schwierigkeiten bei der Implementierung 95
Durch Ausrechnen erhalt man
a = (x1 − x2)2 − r2(A.3)
b = (y1 − y2)2 − r2(A.4)
c = 2(x1 − x2)(y1 − y2)(A.5)
d = 2k(x1 − x2) + 2r2x1(A.6)
e = 2k(y1 − y2) + 2r2y1(A.7)
f = k2 − r2(x21 + y2
1)(A.8)
k =1
2(x2
2 + y22 − x2
1 − y21 − r2)(A.9)
Im Fall w1 = w2 ist der Bisektor eine Gerade. Wenn y1 6= y2 ist, dann erhalt man
a = b = c = 0, e = −1, d =x1 − x2
y2 − y1, f =
x22 + y2
2 − x21 − y2
1
2(y2 − y1)(A.10)
Im Fall y1 = y2 verlauft die Gerade vertikal:
a = b = c = e = 0, d = −1, f =x1 + x2
2(A.11)
Diese Darstellungsart fur Bisektoren ist unbefriedigend. Sie ist kompliziert, es sind insbe-
sondere Fallunterscheidungen notwendig. Außerdem liefert sie die ganze Hyperbel und nicht
nur einen Hyperbelast. Deshalb habe ich nach Alternativen gesucht und eine geeignete pa-
rametrisierte Darstellung in [35] gefunden:(x(t)
y(t)
)=
(v −w
w v
)(a cosh t
b sinh t
)+
(mx
my
)(A.12)
mit
a = −r
2(A.13)
b =1
2
√(x2 − x1)2 + (y2 − y1)2 − r2(A.14)
v =x2 − x1√
(x2 − x1)2 + (y2 − y1)2(A.15)
w =y2 − y1√
(x2 − x1)2 + (y2 − y1)2(A.16)
mx =x1 + x2
2(A.17)
my =y1 + y2
2(A.18)
Bei dieser Darstellungsart braucht man keine Fallunterscheidungen mehr zwischen Hyper-
belasten und Geraden zu machen. Im Geraden-Fall ist einfach a = 0. Man kann nun relativ
96 A. Die Java-Programme zur Veranschaulichung der Voronoi-Diagramme
einfach die Asymptoten eines Bisektors und die Tangente an einen Bisektor bei einem ge-
gebenen Punkt berechnen. Auch die Schnittpunkte eines Bisektors mit einer Geraden kann
man hiermit berechnen.
Zwei beliebige Hyperbelaste in der Ebene konnen sich viermal schneiden. Wir brauchen aber
fur den Fortune-Algorithmus nur den Schnittpunkt von zwei Hyperbelasten, welche einen
gemeinsamen Brennpunkt besitzen. Aus dem Satz 6.5 folgt, daß in diesem Fall sich die beiden
Hyperbelaste hochstens zweimal schneiden konnen. Dennoch ist es mir nicht gelungen, eine
Formel zur direkten Berechnung dieser Schnittpunkte herzuleiten.
Ich habe mir deshalb folgendes Naherungsverfahren ausgedacht:
Gegeben seien drei Orte s1, s2 und s3 mit w1 > w2 > w3. Berechnet werden soll die Schnitt-
menge
B12 ∩ B13 ∩ B23 = B12 ∩ B13 = B13 ∩ B23 = B12 ∩ B23
Zunachst schneide ich B23 mit den Asymptoten zu B12. Dann kostruiere ich die Tangenten
an B23 bei den Schnittpunkten. Die Tangenten schneide ich mit B12 und konstuiere die
Tangenten an B12 bei den neuen Schnittpunkten. Die neuen Tangenten schneide ich dann
wieder mit B23, u.s.w.
Dieses Verfahren habe ich ausgiebig getestet. Es scheint korrekt zu sein, obwohl ich die
Korrektheit nicht beweisen kann. Außerdem konvergiert es extrem schnell. Man kommt meist
schon nach drei bis vier Schritten in den Bereich, in dem wegen der Ungenauigkeit der
Gleitkomma-Zahlen weitere Schritte keine Verbesserung mehr ergeben.
Literaturverzeichnis
[1] Aho, A.V., J.E. Hopcroft, and J.D. Ullman: The Design and Analysis of Com-
puter Algorithms. Addison-Wesley, Reading, Mass. [u.a.], 1974.
[2] Aurenhammer, F.: Voronoi diagrams: A survey of a fundamental geometric data
structure. ACM Comput. Surv., 23:345–405, 1991.
[3] Aurenhammer, F. and R. Klein: Voronoi diagrams. Informatik Berichte 198,
FernUniversitat Hagen, 1996.
[4] Bellman, R.E.: Dynamic Programming. Princeton Univ. Press, Princeton, NJ, 1957.
[5] Brandstadt, A.: Effiziente Graphenalgorithmen. FernUniversitat Hagen, Kurs 1685,
1992.
[6] Coppersmith, D. and S. Winograd: On the asymptotic complexity of matrix mul-
tiplication. IEEE Symposium on Foundations of Computer Science, 22:82–100, 1981.
[7] Deo, N. and C. Pang: Shortest-path algorithms: Taxonomy and annotation. Net-
works, 14:275–323, 1984.
[8] Dijkstra, E.W.: A note on two problems in connexion with graphs. Numerische
Mathematik, 1:269–271, 1959.
[9] Dobkin, D.P. and Lipton R.J.: Multidimensional searching problems. SIAM Journal
on Computing, 5:181–186, 1976.
[10] Edelsbrunner, H.: Algorithms in Combinatorial Geometry. Springer, Berlin; Hei-
delberg; New York, 1987.
[11] Edelsbrunner, H., L.J. Guibas, and J. Stolfi: Optimal point location in a mono-
tone subdivision. SIAM Journal on Computing, 15:317–340, 1986.
[12] Edelsbrunner, H. and R. Seidel: Voronoi diagrams and arrangements. Discrete
Comput. Geom., 1:25–44, 1986.
97
98 LITERATURVERZEICHNIS
[13] Fischer, G.: Lineare Algebra. Vieweg, Braunschweig; Wiesbaden, 10., vollst. neu be-
arb. und erw. Auflage, 1995.
[14] Forster, O.: Analysis 2. Vieweg, Braunschweig; Wiesbaden, 5., durchges. Auflage,
1984.
[15] Fortune, S.: A sweepline algorithm for Voronoi diagrams. Algorithmica, 2:153–174,
1987.
[16] Fredman, M.L.: New bounds on the complexity of the shortest path problem. SIAM
Journal on Computing, 5:83–89, 1976.
[17] Fredman, M.L. and R.E. Tarjan: Fibonacci heaps and their use in network opti-
mization. Journal of the ACM, 34:596–615, 1987.
[18] Guting, R.H.: Datenstrukturen und Algorithmen. Teubner, Stuttgart, 1992.
[19] Hart, P.E, N.J. Nilsson, and B. Raphael: A formal basis for the heuristic determi-
nation of minimum cost paths. IEEE Transactions on System Science and Cybernetics,
SSC-4:100–107, 1968.
[20] Heuser, H.: Lehrbuch der Analysis, Teil 1. Teubner, Stuttgart, 5., durchges. Auflage,
1988.
[21] Johnson, D.B.: Efficient algorithms for shortest paths in sparse networks. Journal of
the ACM, 24:1–13, 1977.
[22] Kirkpatrick, D.G.: Optimal search in planar subdivisions. SIAM Journal on Com-
puting, 12:28–35, 1983.
[23] Klein, R.: Concrete and Abstract Voronoi Diagrams. Number 400 in Lecture Notes
in Computer Science. Springer, Berlin; Heidelberg; New York, 1989.
[24] Klein, R.: Algorithmische Geometrie. Addison-Wesley-Longman, Bonn, 1. Auflage,
1997.
[25] Klingenberg, W.: Eine Vorlesung uber Differentialgeometrie. Springer, Berlin; Hei-
delberg; New York, 1973.
[26] Lee, D.T. and R.L. Drysdale: Generalisation of Voronoi diagrams in the plane.
SIAM Journal on Computing, 10:73–87, 1981.
[27] Mehlhorn, K.: Data Structures and Algorithms 2: Graph Algorithms and NP-
Completeness. Springer, Berlin; Heidelberg; New York, 1984.
LITERATURVERZEICHNIS 99
[28] Mehlhorn, K.: Datenstrukturen und effiziente Algorithmen 1: Sortieren und Suchen.
Teubner, Stuttgart, 2. Auflage, 1988.
[29] Moffat, A. and T. Takaoka: An all pairs shortest path algorithm with expected time
O(n2 log n). SIAM Journal on Computing, 16:1023–1031, 1987.
[30] Nilsson, N.J.: Principles of Artificial Intelligence. Springer, Berlin; Heidelberg; New
York, 1982.
[31] Ottmann, T. und P. Widmayer: Algorithmen und Datenstrukturen. BI-Wissen-
schaftsverlag, Mannheim; Leipzig; Wien; Zurich, 2., vollst. uberarb. und erw. Auflage,
1993.
[32] Querenburg, B. von: Mengentheoretische Topologie. Springer, Berlin; Heidelberg;
New York, 2., neubearb. u. erw. Auflage, 1979.
[33] Shamos, M.I. and D. Hoey: Closest-point problems. In Proceedings 16th IEEE
Symposium on Foundation of Computer Science, pages 151–162, 1975.
[34] Sharir, M.: Intersection and closest-pair problems for a set of planar discs. SIAM
Journal on Computing, 14:448–468, 1985.
[35] Spallek, K.: Kurven und Karten. Bibliographisches Institut, Mannheim; Wien; Zurich,
1980.
[36] Spira, P.M.: A new algorithm for finding all shortest paths in a graph of positive arcs
in average time O(n2 log2 n). SIAM Journal on Computing, 2:28–32, 1973.
[37] Strassen, V.: Gaussian elimination is not optimal. Num. Math., 13:354–356, 1969.