All-Pairs Almost Shortest Paths

Werbung
All-Pairs Almost Shortest Paths
Ausarbeitung des Vortrags von Martin Holzer
zum Seminar Kürzeste Wege“
”
bei Prof. Dr. Dorothea Wagner
Universität Konstanz, WS 2001/02
Abstract
Das All-Pairs Shortest Path Problem, kurz APSP-Problem, besteht im Auffinden der Distanzen aller Paare von Knoten in einem Grafen. Wird nun die
Bedingung der Exaktheit dieser Distanzen etwas aufgeweicht und ein einseitiger additiver Fehler von maximal einem k ∈ N zugelassen, so spricht man vom
All-Pairs Almost Shortest Path Problem, kurz APASP-Problem genannt. In
diesem Papier wird nun eine Familie von Algorithmen APASPk vorgestellt
2
2
werden, welche (für gerades k ≥ 2) eine Laufzeit in Õ(min{n2− k+2 m k+2 ,
2
n2+ 3k−2 }) haben und das APASP-Problem für einen Grafen mit einem einseitigen additiven Fehler von maximal k lösen, falls mit n und m die Kardinalität der Knoten bzw. Kanten bezeichnet wird.
Wir bezeichnen mit einem k-Emulator zu einem ungewichteten Grafen
einen gewichteten Grafen mit derselben Knotenmenge so, dass die Distanz
zweier Knoten im Emulator um höchstens k größer ist als im Originalgraf.
In diesem Papier wird gezeigt werden, dass jeder Graf mit n Knoten einen 2Emulator mit Õ(n3/2 ) Kanten hat, welcher in Õ(n5/2 ) Zeit konstruiert werden
kann. Außerdem ist diese Schranke für die Kantenmenge asymptotisch scharf.
Schließlich wird noch das folgende Ergebnis über Spanner gegeben werden: Jeder gewichtete Graf mit n Knoten hat einen 3-Spanner mit Õ(n3/2 )
Kanten, der in Õ(mn1/2 ) Zeit konstruiert werden kann.
1
Bezeichnungen
Im Folgenden sollen einige Bezeichnungen und Schreibweisen, die im gesamten Papier verwendet werden, festgelegt werden:
1
• Mit G := (V, E) wird ein ungerichteter Graf bezeichnet, der — bis auf
Weiteres — auch ungewichtet ist. In einigen wenigen Fällen, in denen
G einen gewichteten Grafen bezeichnet, wird dies also explizit vermerkt
sein. Des Weiteren wird die Kardinalität der Knotenmenge von G mit
|V | =: n, entsprechend die der Kantenmenge mit |E| =: m bezeichnet.
• Die (exakte) Distanz zwischen zwei Knoten u, v ∈ V wird als δ(u, v),
die geschätzte Distanz dieses Knotenpaares als δ̂(u, v) notiert. Entsprechend wird die Matrix, die die geschätzten Distanzen aller Paare von
Knoten eines Grafen beinhaltet, mit (δ̂(u, v))u,v bezeichnet.
• deg(v) steht für den Grad des Knotens v ∈ V .
• Schließlich soll mit Õ(f ) die Komplexität O(f polylog n) eines Algorithmus bezeichnet werden. Ein Beispiel hierfür ist: Õ(n2 ) = O(n2
(log n)1/2 ).
2
Einleitung
Im Folgenden wird ein Algorithmus apaspk gegeben werden, der das APASPProblem für einen Grafen G mit einem additiven Fehler von maximal k − 1
löst, d. h. für die geschätzte Distanz zweier Knoten u, v ∈ V gilt: δ(u, v) ≤
δ̂(u, v) ≤ δ(u, v)+(k−1). Dieser, wie auch die folgenden Algorithmen apaspk
und APASPk , basieren auf der Zerlegung des Grafen in sog. dominierende
Knotenmengen und eine gewisse induzierte Menge von Kanten durch einen
Algorithmus decompose, welcher zunächst gegeben werden soll.
3
Zerlegung eines Grafen
Definition. Eine Knotenmenge D dominiert eine Knotenmenge U , falls
jeder Knoten in U einen Nachbarn in D hat.
Damit gilt dann das folgende — hier nicht bewiesene —
n
Lemma. Eine Knotenmenge D der Größe O( n log
), 1 ≤ s ≤ n, die alle
s
Knoten mit Grad mindestens s dominiert, kann deterministisch in O(m + n)
Zeit gefunden werden.
2
Es soll jedoch ein auf dem Greedy-Prinzip basierender Algorithmus zur
Gewinnung solcher dominierender Knotenmengen angegeben werden. Als
Eingabe verlangt der Algorithmus einen Grafen G und einen Knotengrad
s und liefert eine dominierende Menge D zusammen mit einer Menge E ∗ von
Kanten zwischen dominierten und dominierenden Knoten zurück.
dominate(G, s):
D sei leere Menge
Solange ein nicht-dominierter Knoten ex., füge D einen Knoten aus V , der
die größte Anzahl noch nicht dominierter Knoten mit Grad mind. s dominiert, hinzu
Konstruiere eine Kantenmenge E ∗ ⊆ E der Größe O(n) so, dass für jedes
u ∈ V mit Grad mind. s eine Kante (u, w) ∈ E ∗ ex. mit w ∈ D
Gib (D, E ∗ ) zurück
Nun kann der eigentliche Zerlegungsalgorithmus formuliert werden:
decompose(G, hs1 , s2 , . . . , sk−1 i):
Für i ← 2 bis k:
Ei ← {e = (u, v) ∈ E|deg(u) ≤ si−1 ∨ deg(v) ≤ si−1 }
Für i ← 1 bis k − 1:
(Di , Ei∗ ) ← dominate(G, si )
E1 ← E
Dk ← S
V
E ∗ ← 1≤i<k Ei∗
Gib (hE1 , . . . , Ek , E ∗ i, hD1 , . . . , Dk i) zurück
decompose nimmt als Eingabe einen (ungewichteten) Grafen G und eine
absteigende Folge hs1 , s2 , . . . , sk−1 i von Knotengraden ( Schwellen‘). Zunächst
’
werden Kantenmengen Ei gebildet, wobei noch E1 := E ergänzt wird. Dabei
besteht die Menge Ei aus solchen Kanten, die (mindestens einen) Knoten
vom Grad höchstens si−1 berühren. Danach werden bezüglich der Folge der
Knotengrade jeweils dominierende Mengen Di und Verbindungskanten Ei∗
3
zwischen dominierten und dominierenden Knoten gefunden, wobei Dk := V
ergänzt wird. Schließlich werden alle Kantenmenge Ei∗ zu einer Menge E ∗
vereinigt und zusammen mit den Ei sowie den Di zurückgegeben.
Zu bemerken ist noch: die Folge der zurückgegebenen Kantenmengen ist
absteigend: E = E1 ⊇ E2 ⊇ . . . ⊇ Ek . Mit Vi sei noch die Menge der Knoten
mit Grad (echt) größer als si bezeichnet. Damit gilt: V1 ⊆ V2 ⊆ . . . ⊆ Vk = V ,
und die Menge Ei besteht genau aus solchen Kanten, die einen Knoten
berühren, der nicht zu Vi−1 gehört.
Die Laufzeit von decompose liegt in O(k(m + n)) (ohne Beweis).
4
Der Algorithmus apaspk
Algorithmus apaspk (G) beinhaltet viele‘ Aufrufe des Algorithmus von Di’
jkstra auf gewichteten Grafen (obwohl Graf G ungewichtet ist). Diese Aufrufe werden im Folgenden für einen (gewichteten) Grafen H, eine Kantenbewertung — welche sowohl als Eingabe als auch als Ausgabe fungiert —
(δ̂(u, v))u,v und einen Startknoten v mit dijkstra(H, δ̂, v) bezeichnet, was
die Distanzen aller Knoten (und einen Baum mit kürzesten Wegen) von v
aus liefert. dijkstra kann in O(m + n log n) Zeit implementiert werden; speziell hier kann eine Implementation in O(m + n) Zeit verwendet werden.
Obwohl die Zahl der Aufrufe von dijkstra vergleichsweise groß ist, sind
die übergebenen Grafen relativ dünn. Sie sind außerdem nicht notwendigerweise Subgrafen von G und variieren von Aufruf zu Aufruf. Das Gewicht
einer Kante (u, v), δ̂(u, v), ist die momentan beste Schranke an die Distanz
der Knoten im Originalgrafen und wird initial auf 1 gesetzt, falls (u, v) ∈ E,
und auf +∞ sonst.
Nun zu apaspk (G): Hier wird zunächst eine Folge von Knotengraden
si bestimmt, bezüglich derer der Eingabegraf G dann mittels decompose
zerlegt wird. Anschließend wird die Matrix δ̂ — wie eben beschrieben — initialisiert, und es wird für jeden Knoten aus jeder dominierenden Menge Di
dijkstra ausgeführt. Rückgabe ist schließlich wieder δ̂.
Bemerkt sei noch: Die Kanten aus Ei und E ∗ sind Originalkanten des
4
Grafen, während die Kanten {u} × V nicht notwendig in E enthalten sein
müssen.
Für i ← 1 bis
− 1:
¡ mk¢1−i/k
si ← n
(log n)i/k
(hE1 , E2 , . . . , Ek , E ∗ i, hD1 , D2 , . . . , Dk i) ← decompose(G, hs1 , s2 , . . . , sk−1 i)
Für alle u, v ∈ V :
falls (u, v) ∈ E:
δ̂(u, v) ← 1
sonst δ̂(u, v) ← +∞
Für i ← 1 bis k:
für jedes u ∈ Di :
dijkstra((V, Ei ∪ E ∗ ∪ ({u} × V )), δ̂, u)
Gib (δ̂(u, v))u,v zurück
Analyse des Algorithmus
Aussagen hinsichtlich der Laufzeit und der Exaktheit von apaspk (G) sind
zusammengefasst im folgenden
Satz. apaspk (k ≥ 2) läuft in O(kn2−1/k m1/k (log n)1−1/k ) = Õ(n2−1/k m1/k )
Zeit und für alle u, v ∈ V gilt: δ(u, v) ≤ δ̂(u, v) ≤ δ(u, v) + 2(k − 1).
Beweis:
Zunächst soll die Aussage über die Komplexität des Algorithmus gezeigt werden: Der Aufwand für die Zerlegung des Grafen ist offensichtlich in O(kn2 ),
2
und die Initialisierung der Matrix für die Kantengewichte
Pk−1 benötigt O(n )
Zeit. Der Aufwand für alle dijkstra-Aufrufe beträgt O( i=1 |Di |·(|Ei |+n)).
n
Dies lässt sich unter Beachtung von |Di | = O( n log
), |Dk | = |V | = n,
si
|E1 | = |E| =Pm und |Ei | = nsi−1 (2 ≤ i ≤ k) zusammenfassen zu
n log n
n
· m + k−2
· nsi−1 + n · nsk−1 ) = O(kn2−1/k , m1/k (log n)1−1/k ).
O( n log
i=2
s1
si
Nun zum Beweis der Exaktheitsaussage: Sei δi (u, v) der Wert von δ̂(u, v) nach
dem letzten Durchlauf von dijkstra von allen Knoten aus Di aus. Dann gilt
die Behauptung: Für u ∈ Di und v ∈ V ist δ(u, v) ≤ δi (u, v) ≤ δ(u, v) + 2(i −
5
1). Diese Aussage, die mit Induktion nach i bewiesen werden soll, liefert mit
Dk = V : Für alle u, v ∈ V ist δ̂(u, v) = δk (u, v) ≤ δ(u, v) + 2(k − 1).
Sei Gi (u) := (V, Ei (u)) := (V, Ei ∪ E ∗ ∪ ({u} × V )) der Graf für dijkstra von
u ∈ Di aus. Im Fall i = 1 ist E1 (u) ⊇ E, und somit gilt δ1 (u, v) = δ(u, v).
Sei deshalb i > 1 und u ∈ Di , v ∈ V . Sei weiterhin p ein kürzester Pfad von u
nach v. Wir unterscheiden zwei Fälle: Falls alle Kanten von p in Ei enthalten
sind, so auch in Ei (u), und es gilt: δi (u, v) = δ(u, v).
Im anderen Fall, d. h. falls es eine Kante auf p nicht aus Ei gibt, existiert ein
Knoten aus Vi−1 auf p; w sei der letzte solche Knoten auf p. Mit p0 sei der
Teilpfad von p zwischen w und v bezeichnet. Da alle Knoten auf p0 (außer
w) nicht in Vi−1 sind, sind alle Kanten auf p0 aus Ei . Sei w0 ∈ Di−1 so, dass
(w, w0 ) ∈ E ∗ . Gi (u) enthält (w, w0 ) und eine gewichtete Kante (u, w0 ) mit
δi−1 (u, w0 ) = δi−1 (w0 , u) ≤ δ(w0 , u) + 2((i − 1) − 1) ≤ δ(u, w) + (2i − 3). Damit
ergibt sich
δi (u, v) ≤ δi−1 (u, w0 ) + δ(w, w0 ) + δ(w, v)
≤ δ(u, w) + (2i − 3) + 1 + δ(w, v)
≤ δ(u, v) + (2i − 1). ¤
Ohne Beweis sei noch das folgende Resultat vermerkt:
Satz. Für alle 2 ≤ k = O(log n) ist für u, v ∈ V δ̂(u, v) ≤ min{δ(u, v) +
2(k−1), 3δ(u, v)−2}, d. h. der Streckfaktor zwischen exakten und geschätzten
Distanzen ist max. 3.
5
Die Algorithmen apaspk und APASPk
Algorithmus apaspk funktioniert analog zu apaspk , mit zwei Unterschieden:
¡ ¢1−1/k
so werden als Knotengrade si = n1−1/k (log n)i/k statt si = m
(log n)i/k
n
verwendet. Weiterhin beinhalten die Ei (u) mehr Kanten:
Ã
!
[
Ei (u) = Ei ∪ E ∗ ∪ ({u} × V ) ∪
Dj1 × Dj2 .
i+j1 +j2 ≤2k+1
Wir geben ohne Beweis den
6
Satz. apaspk (k ≥ 2) läuft in O(k 2 n2+1/k (log n)1−1/k ) = Õ(n2+1/k ) Zeit
und für alle u, v ∈ V gilt: δ(u, v) ≤ δ̂(u, v) ≤ δ(u, v) + 2(b k3 c + 1).
Als schärfere Abschätzung lässt sich zeigen, dass apasp3 — genau wie
apaspk — geschätzte Distanzen mit einem additiven Fehler von höchstens 2
berechnet. Allerdings läuft apaspk aber auf genügend dichten Grafen besser
als apaspk , d. h. wenn m ≥ n5/3 .
Bemerkenswert ist nun: Der momentan schnellste bekannte Algorithmus
für Boolsche Matrixmultiplikation ist in O(n2.376 ), während die Laufzeit von
apasp3 lediglich‘ Õ(n7/3 ) beträgt.
’
APASPk (für gerades k > 2) schließlich ist die Kombination aus apasp k +1
2
und apasp 3k−2 , wo der additive Fehler maximal k beträgt.
2
6
Emulatoren
Wir erinnern zunächst noch einmal an die Definition von Emulatoren: Ein
k-Emulator zu einem ungewichteten Grafen G = (V, E) ist ein gewichteter
Graf G0 = (V, F ) so, dass gilt: δG (u, v) ≤ δG0 (u, v) ≤ δG (u, v) + k für alle
u, v ∈ V .
Der Unterschied zu den Hilfsgrafen Gk (u) ist der, dass bei Emulatoren
ein einziger Graf für eine gute Approximation aller Distanzen gesucht ist.
Die Konstruktion dünner‘ k-Emulatoren ist also schwerer als die Berechnung
’
von Distanzen mit Fehler k. Im Unterschied zu k-Spannern sind die Kanten
aus F gewichtet; außerdem muss G0 nicht notwendig Subgraf von G sein. Es
gilt der folgende
Satz (o. B.). Zu jedem ungewichteten ungerichteten Grafen mit n Kanten
gibt es einen 2-Emulator mit O(n3/2 (log n)1/2 ) Kanten, der in O(n2 log2 n)
Zeit konstruiert werden kann.
Ebenfalls nur stichpunktartig und ohne Beweis notieren wir den
Satz. Graf G3 aus apasp3 ist 4-Emulator zu G. G3 enthält Õ(n4/3 ) Kanten.
Bedauerlicherweise kann letzteres Resultat nicht verallgemeinert werden:
7
so können für k > 4 k-Emulatoren nicht analog durch apaspl gewonnen
werden. Ein noch offenes Problem schließlich ist das folgende: Sei ek das
Infimum so, dass jeder Graf mit n Knoten einen k-Emulator mit Õ(n1+ek )
Kanten hat. Nach Obigem gilt e2 ≤ 21 und e4 ≤ 31 . Die Frage besteht nun
darin, ob ek → 0 für k → ∞.
7
Spanner
Ein k-Spanner eines Grafen G = (V, E) ist ein Subgraf G0 = (V, E 0 ) von G
so, dass gilt: δG0 (u, v) ≤ k · δG (u, v).
Satz. Jeder gewichtete ungerichtete Graf G hat einen 3-Spanner mit O(n3/2
(log n)1/2 ) Kanten, der in Õ(m(n log n)1/2 ) Zeit konstruiert werden kann.
Der Beweis dieses Satzes, der lediglich skizziert werden soll, stützt sich
auf das
Lemma (truncated Dijkstra; o. B.). Sei G ein gewichteter Graf. Die Adjazenzlisten der Knoten von G seien nach dem Kantengewicht geordnet. Sei
v ∈ V und 1 ≤ s ≤ n. Kürzeste Wege von v zu s Knoten, die v am nächsten
sind, können in O(s(s + log n)) Zeit gefunden werden.
Zurück zur Beweisskizze: Für jeden Knoten v ∈ V und mit geeignetem
s ∈ N wird truncated Dijkstra ausgeführt, was jeweils eine Menge N (v) der s
nächsten Knoten zu v liefert. Weiterhin kann eine Menge D der Mächtigkeit
n
O( n log
) derart gefunden werden, dass für jedes v ∈ V ein u ∈ D ∩ N (v)
s
existiert. Für jedes u ∈ D wird der volle Dijkstra ausgefürt. Der 3-Spanner
enthält nun alle Kürzeste-Wege-Bäume aus allen (d. h. den truncated und
den vollen) Dijkstra-Durchläufen.
8
Ausblick
Wir haben gezeigt: Alle Knotendistanzen in ungewichteten ungerichteten
Grafen können mit einem additiven Fehler von max. 2 in Õ(n7/3 ) Zeit berechnet werden, d. h. schneller als der schnellste bekannte MatrixmultiplikationsAlgorithmus.
8
Weitere noch offene Probleme sind: Können Distanzen mit einem additiven Fehler von max. 2 zwischen allen Knotenpaaren eines Grafen in O(n7/3−ε )
Zeit, ε > 0, gefunden werden? Können Distanzen mit einem additiven Fehler
von maximal k, k ≥ 2 fest, zwischen allen Knotenpaaren eines Grafen in
Õ(n2 ) Zeit gefunden werden?
9
Literaturverzeichnis
Dorit Dor, Shay Halperin und Uri Zwick: All-Pairs Almost Shortest
Paths. SIAM Journal on Computing, 29(5):1740–1759, Oktober 2000.
9
Herunterladen