next up previous contents
Next: Transitive Hülle und DFS Up: Transitive Hülle Previous: Boolesche Matrixmuliplikation und Transitive

Der 4-Russen-Algorithmus für Boolesche Matrixmultiplikation


Autoren:
V.L. Avlazarov, E.A. Dinic, M.A. Kronod, I.A. Faradzev : ``On economical construction of the transitive closure of a directed graph'', Soviet Math. Doklady 11 (1970), p. 1209-1210.

Gegeben zwei Boolesche $n \times n$ Matrizen A, B; gesucht: $C=A\cdot B$.
Sei $l:=\lfloor \log n \rfloor$, o.B.d.A. gelte l|n (l ist Teiler von n).


\begin{picture}
(80,22)
 \put(0,0){
\framebox 
(20,20){}}
 \put(30,0){
\framebox...
 ...(62.5,12.5){\makebox(5,5){$B$}}
 \put(2.5,12.5){\makebox(5,5){$C$}}\end{picture}

Teile A auf (setze $m := \frac{n}{l}$):


\begin{picture}
(60,25)
 \put(5,0){
\framebox 
(20,20){}}
 \multiput(10,0)(5,0){...
 ...t(35,10){\makebox(20,5){$B_2$}}
 \put(35,15){\makebox(20,5){$B_1$}}\end{picture}

Sei $A=A'_1 \vee A'_2 \vee \cdots \vee A'_m ,C_i:=A_i \cdot B_i$ für $i=1,\ldots,m$. Dann gilt

\begin{displaymath}
\begin{split}
 C=&\bigvee_{i=1}^{m}C_i, \text{ da }\\  C=& A...
 ...q j \leq m$}}} A'_iB'_j =
\bigvee_{i=1}^{m}A_iB_i, \end{split} \end{displaymath}

da AiBj=0 für $i \neq j$ (fasse Ai und Bj als $n \times n$Matrizen auf mit 0 außerhalb des jeweiligen Streifens). Gegeben die Ci's, benötigen wir Zeit $\mathcal{O}(mn^2)$.

Betrachte eine Zeile von Ci:


\begin{picture}
(100,20)(0,5)
 \put(10,5){
\framebox 
(20,20){}}
 \put(10,10){\l...
 ...$}}
 \put(75,5){\makebox(20,5){n}}
 \put(95,12.5){\makebox(5,5){l}}\end{picture}

\begin{displaymath}
c_k^{(i)}=\bigvee_{j=1}^l a_k^{(i)} \cdot b_j^{(i)}\end{displaymath}

Der Algorithmus berechnet einfach zunächst alle Booleschen Linearkombinationen der Zeilen von Bi (Prozedur bcomb) und damit ck(i) für jedes mögliche ak(i).
Betrachte A, B und C als Matrizen von Zeilenvektoren:

\begin{displaymath}
A=\begin{pmatrix}
a_1\\ \vdots\\ a_n\end{pmatrix}, \quad
 B=...
 ...rix}, \quad
 C=\begin{pmatrix}
c_1\\ \vdots\\ c_n\end{pmatrix} \end{displaymath}


proc bcomb(int i) =


$\ulcorner$comb$[0]:=[0,\ldots,0]$;for j:=1 to $2^{\lfloor \log n \rfloor} -
 1$ do $p:=\lfloor \log j \rfloor$;   co p Index der vordersten 1 von j oc comb[j]:=comb$[j-2^p] \vee b_{(i-1) \lfloor \log n \rfloor + p
 + 1}$od $\llcorner$


Zeitbedarf:
(a)
sequentiell: \fbox {$\mathcal{O}(n^2)$}
(b)
Vektoroperationen der Breite n: \fbox {$\mathcal{O}(n)$}

algorithm four-russians(array a,b,c) =


$\ulcorner$co die Matrizen a,b,c sind als Vektor von n Zeilenvektoren organisiert oc const $l = \lfloor \log n \rfloor$ co wir nehmen l|n an oc; array comb[0..2l-1] of boolean-vector;   for i:=1 to n do $c[i]:=[0,\ldots,0]$ od   for i:=1 to $\frac{n}{l}$ do   co Berechne die Ci's oc bcomb(i); for j:=1 to n do co Bitmuster in der j-ten Zeile von Ai in Binärzahl wandeln oc nc:=0; for $k:=i\cdot l$ downto $(i-1) \cdot l + 1$ do if a[j,k] then nc:=nc+nc+1 else nc:=nc+nc fi od $c[j]:=c[j] \vee $comb[nc]; od od $\llcorner$

Beispiel:


\begin{picture}
(86,28)
 \put(56,18){\makebox(4,10){0}} 
 \put(56,15){\makebox(4...
 ...(45,9){\vector(0,1){2.5}}
 \put(60,6.5){
\framebox 
(25,17){$B_i$}}\end{picture}

Zeitbedarf:
(a)
sequentiell:
$\mathcal{O}\left( \frac{n}{l} \cdot \left( n^2 + n(l+n)\right)\right)=
 \mathcal{O}\left(\frac{n^3}{l}\right)=$ \fbox {$\mathcal{O}\left(\frac{n^3}{\log n}\right)$}
(b)
Vektorrechner der Breite n (Interpretation eines Bitintervalls als Zahl in $\mathcal{O}(1)$ Zeit):
$\mathcal{O}\left(\frac{n}{l} \cdot (n + n(1+1)) \right) =$ \fbox {$\mathcal{O}\left(\frac{n^2}{\log n}\right)$\space (Vektoroperationen)}


\fbox {\parbox[c]{12.45cm}{\textbf{Satz:}
Der 4-Russen Algorithmus berechnet das...
 ...w. mit $\mathcal{O}\left(\frac{n^2}{\log n}\right)$\space Vektoroperationen.
}}


Beweis: $\surd$ (s.o.) $\Diamond$


next up previous contents
Next: Transitive Hülle und DFS Up: Transitive Hülle Previous: Boolesche Matrixmuliplikation und Transitive
Abbas-Bardia Kabiri-Jarghouyeh
3/3/1999