next up previous contents
Next: Ein Algorithmus für die Up: Kürzeste Pfade Previous: Transitive Hülle und DFS

 Ein besserer Algorithmus für das All-pairs-shortest-distance-Problem
Ein besserer Algorithmus für das All-pairs-shortest-distance (bzw. paths)-Problem in ungewichteten Digraphen

$\!\!\!\!\left.
 \begin{array}
{l}
 (d_{ij})_{0\leq i,j < n} \text{ Distanzmatri...
 ...ansitive H\uml {u}lle}
 \end{array} \right\}\text{alle Kantenl\uml {a}ngen = 1}$

$D^{(l)}=(d_{ij}^{(l)})_{o\leq i,j < n} \text{ mit }d_{ij}^{(l)}=
 \left\{
 \beg...
 ... \text{ falls } d_{ij}^{*} \leq l \\  \infty \text{ sonst}
 \end{array} \right.$


algorithm 1 =


$\ulcorner$ co Sei $A=(a_{ij})_{0\leq i,j < n}$ mit $a_{ij}=\left\{
 \begin{array}
{l}
 1 \text{\ falls\ } d_{ij} \leq 1 \\  0 \text{\ sonst}
 \end{array}\right.$ oc co Sei B die Boolsche Einheitsmatrix oc for l:=2 to r+1 do $B := A \cdot B;$ for $0 \leq i,j < n$ do if bij=1 then dij(l):=l else $d_{ij}^{(l)}:=\infty$ fi; if $d_{ij}^{(l-1)}\leq l$ then dij(l):=dij(l-1) fi od od $\llcorner$

Dieser Algorithmus berechnet $D^{(1)}=D,D^{(2)},D^{(3)},\ldots,D^{(r)}$.
Sei $\omega$ eine Zahl $\geq 2$, so daß die Matrixmultiplikation in der Zeit $\mathcal{O}(n^\omega)$ durchgeführt werden kann (Winograd/Coppersmith: $\omega \leq 2,376$).

Zeitaufwand für Algorithmus 1: \fbox {$\mathcal{O}(rn^\omega)$}

algorithm apsd =


$\ulcorner$ Berechne, mit Algorithmus 1, $D^{(l)} \text{ f\uml {u}r } l=1,\ldots,r$; l:=r; for s:=1 to $\left\lceil\log_{\frac{3}{2}}{\frac{n}{r}}\right\rceil$ do for i:=0 to n-1 do finde in der i-ten Zeile von D(l) den Wert d, $\left\lceil\frac{l}{2}\right\rceil \leq d \leq l$, so daß d in der i-ten Zeile am wenigsten oft vorkommt; Si:= Menge der Spaltenindizes, in denen dieses d in der i-ten Zeile von D(l) vorkommt; od $l_1 := \left\lceil\frac{3}{2}l\right\rceil$; for $0 \leq i,j < n$ do if $S_i \neq \emptyset$ then $m_{ij}:=
\underset 
<24517\gt\gt k\in S_i{{\min}\{d_{ik}^{(l)}+d_{kj}^{(l)}\}$ else $m_{ij}:=\infty$ fi; if $d_{ij}^{(l)} \leq l$ then dij(l1):=dij(l) elseif $m_{ij} \leq l_1$ then dij(l1)=mij else $d_{ij}^{(l_1)}:=\infty$ fi od l := l1; od $\llcorner$

apsd berechnet:
Zunächst $D^{(1)}, \ldots, D^{(r)}$, dann D(l) für

\begin{displaymath}
l=r, \left\lceil\frac{3}{2}r\right\rceil,
 \left\lceil\frac{...
 ...{3}{2}r\right\rceil\right\rceil,\ldots,\underbrace{n'}_{\geq n}\end{displaymath}


\begin{picture}
(90,12.5)

 \put(5,2.5){\line(1,0){80}}
 \put(45,7.5){\vector(0,...
 ...ut(5,3){\makebox(40,5)[b]{$\overbrace{\text{\hspace*{39mm}}}^{d}$}}\end{picture}

Da für d $\frac{l}{2}$ Werte zur Auswahl stehen, gilt:

\begin{displaymath}
\vert S_i\vert \leq \frac {2n}{l}\end{displaymath}

Damit ist die Laufzeit:

\begin{displaymath}
\mathcal{O}\left(rn^\omega + \sum_{s=1}^{\left\lceil\log_{\f...
 ...t r}\right) = \mathcal{O}\left(rn^\omega + \frac{n^3}{r}\right)\end{displaymath}

Setze r so, daß die beiden Summanden gleich sind, also $r=n^{\frac{3-\omega}{2}}$, dann ergibt sich damit für apsd die Laufzeit $\mathcal{O}\left(n^{\frac{3+\omega}{2}}\right)$.

\fbox {\parbox[c]{12.45cm}{\textbf{Satz:}
Das All-Pairs-Shortest-Distance-Proble...
 ...pace l\uml {o}sen ($\omega$\space Exponent f\uml {u}r Matrixmultiplikation).
}}

Beweis: $\surd$ $\Diamond$



Bemerkung: apsp: Problem: Ausgabegröße kann $\Omega(n^3)$ sein:


\begin{picture}
(128,22)
 \multiput(35,15)(10,0){3}{\vector(1,0){9.5}}
 \multipu...
 ...t{ Knoten}}$}}
 \put(22,15){\oval(24,8)}
 \put(108,15){\oval(24,8)}\end{picture}

Kürzeste Pfade-Nachfolger-Matrix $N \in [0,\ldots,n-1]^{n\times n}$
nij= Nummer des zweiten Knoten auf ,,dem`` kürzesten Pfad von Knoten i zu Knoten j. So eine Matrixdarstellung für die kürzesten Pfade zwischen allen Knotenpaaren kann in Zeit $\mathcal{O}(n^{\frac{3+\omega}{2}} \cdot \log^c n)$ für ein c > 0 bestimmt werden.

\fbox {\parbox[c]{12.45cm}{\textbf{Satz:}
F\uml {u}r Digraphen mit Kantenl\uml {...
 ...in Zeit
$\mathcal{O}((Mn)^{\frac{3+\omega}{2}})$\space gel\uml {o}st werden.
}}


Idee: Ersetze
\begin{picture}
(25,7)
 \put(5,3){\circle*{1}}
 \put(20,3){\circle*{1}}
 \put(5,...
 ...\makebox(5,1)[t]{$v$}}
 \put(5,3){\makebox(15,5)[b]{$^{M'\leq M}$}}\end{picture}
durch:


\begin{picture}
(56,5)
 \multiput(7,4)(10,0){5}{\circle*{1}}
 \multiput(7,4)(10,...
 ...makebox(5,2)[t]{$u_2$}}
 \put(46.5,1){\makebox(5,2)[t]{$u_{M'}=v$}}\end{picture}


next up previous contents
Next: Ein Algorithmus für die Up: Kürzeste Pfade Previous: Transitive Hülle und DFS
Abbas-Bardia Kabiri-Jarghouyeh
3/3/1999