Matrizenmultiplikation
Matrizenmultiplikation Standardalgorithmus:
Wozu?
A = (aij ),
• Geometrie:
Matrix = lineare Abbildung Matrixprodukt = Hintereinanderausführung
• Graphen:
Matrix = Adjazenzmatrix Multiplikation z.B. für transitive Hülle
• Signale:
Filter, Diskrete Fourier Transformation
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
B = (bij ),
C = AB = (cij )
n
wobei: cij = ∑ aik bkj k =1
n Multiplikationen je Matrixelement und n-1 Additionen je Element Gesamtaufwand ist n 3 Multiplikationen und n 2 (n − 1) Additionen, also O (n 3 ) Universität Karlsruhe (TH)
Folie 12.1
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.2
Multiplikation nach Winograd j
Multiplikation nach Winograd
Π Π Π
n
ci , j = ∑ ai , k bk , j
i
k =1
n/2
ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j )
+
k =1
n/2
ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j k =1
–
+ ai , 2 k −1ai , 2 k + b2 k , j b2 k −1, j − ai , 2 k −1ai , 2 k − b2 k , j b2 k −1, j )
k =1
k =1
k =1
n/2
∑ (a
ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − ∑ ai , 2 k −1ai , 2 k − ∑ b2 k , j b2 k −1, j
=
k =1 n/2
ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − k =1
Universität Karlsruhe (TH)
Ai
−
Bj
k =1 n/2
Ai = ∑ ai , 2 k −1ai , 2 k k =1
+ b2 k , j ) ⋅ (ai , 2 k + b2 k −1, j ) a
i , 2 k −1 i , 2 k
Ai
) + (ai , 2 k −1b2 k −1 ) + (b2 k , j ai , 2 k ) + (b2 k , j b2 k −1, j ) Bj
= ci , j + Ai + B j
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Universität Karlsruhe (TH)
Folie 12.3
Multiplikation nach Winograd
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.4
Matrixmultiplikation nach Strassen Entwurf eines Teile-und-herrsche-Algorithmus:
Aufwandsabschätzung für Winograds Algorithmus: n/2
i , 2 k −1
∑ (a k =1
n/2
B j = ∑ b2 k −1, j b2 k , j
k =1
k =1
n/2
Σ
ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j )
ci , j = ∑ ((ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − ai , 2 k −1ai , 2 k − b2 k , j b2 k −1, j ) n/2
Π Π Π
k =1
n/2
n/2
n/2
n
ci , j = ∑ ai ,k bk , j
Σ
n/2
1 benötigt n Multiplikationen. 2
Berechnung eines Ai = ∑ ai , 2 k −1ai , 2 k k =1 Ebenso B j . Ai und B j müssen nur einmal berechnet werden => Aufwand für alle Ai und B j ist n 2 Multiplikationen.
A11 A12 . A21 A22 A11
+
B11 B12 B21 B22
A12 + A 21
=
C11 C12 C21 C22
+
B11 ⋅ A22
+
+
A12 B22 + A B 21 11
+
B12 + B 21
+
B22
n/2
ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − Ai − B j
A11 B11
k =1
2 n benötigt n ⋅ Multiplikationen, insgesamt also 2
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
3
n + n2 2 Folie 12.5
+
A11B12 A12 B21 +
C11 Universität Karlsruhe (TH)
+
C12 + C 21
+
+ A21B12 A22 B21
+
A22 B22
C22
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.6
1
Multiplikation nach Strassen
Multiplikation nach Strassen Aufwandsabschätzung:
Teile-und-herrsche-Algorithmus macht also aus 1 Multiplikation von n×n Matrizen 8 Multiplikationen von n/2×n/2 Matrizen
T (n) = 8T (n / 2) + O(n 2 ) = O( n 3 )
(wir lösen die Problematik für ungerade n ähnlich wie beim Potenzieren)
Basisfall: Multiplikation zweier 2×2 Matrizen: a11 a 21
a12 b11 b12 a11b11 + a12b21 ⋅ = a22 b21 b22 a21b11 + a22b21
= O( n 3 ) Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.7
Unter welchen Umständen Fehler) • schlechtere Parallelisierbarkeit • erhöhter Programmieraufwand (Verschwendung von Informatikerzeit)
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.16
Matrixmultiplikation nach Strassen a b e g r s ae + bf ag + bh c d ⋅ f h = t u = ce + df cg + dh Standardalgorithmus:
e f g h
a b c d
ae+bf=r
ae+bf=r
Informatik II Sommersemester 2001, Dr. Ivica Rogina
e f g h
a b c d
e f g h
ag+bh=s
a b c d
e f g h
ce+df=t
a b c d
e f g h
cg+dh=u
4 mal 2 = 8 Multiplikationen Folie 12.17
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.18
3
Matrixmultiplikation nach Strassen Andere Terme (mit je einer Multiplikation) könnten z.B. sein:
Matrixmultiplikation nach Strassen Term
Multiplikationen
P1 = ag − ah = a ( g − h) a b c d
e f g h
a b c d
(a+b)h
e f g h
a b c d
1
e
e f g h
Informatik II Sommersemester 2001, Dr. Ivica Rogina
P2 = ah + bh = (a + b)h
Folie 12.19
Darstellung
e
1
f
g
d
Multiplikationen
e 0
c
d
d
Multiplikationen
Darstellung
f
g
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Term
Multiplikationen
h
Folie 12.22
Darstellung
h
e
f
g
h
a
b
− P3 = −ce − de
0
b
c
c
d
d
Informatik II Sommersemester 2001, Dr. Ivica Rogina
g
Matrixmultiplikation nach Strassen
a 1
f
a
c
Folie 12.21
Folie 12.20
Darstellung
b
e
Universität Karlsruhe (TH)
Term
b
Informatik II Sommersemester 2001, Dr. Ivica Rogina
P3 = ce + de = (c + d )e
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Matrixmultiplikation nach Strassen
− P2 = − ah − bh
Matrixmultiplikation nach Strassen Term
Universität Karlsruhe (TH)
h
a
Universität Karlsruhe (TH)
h
c
d(f-e)
Multiplikationen
g
b
a(g-h)
Matrixmultiplikation nach Strassen Term
f
a
Fragestellung: Ist es möglich, Terme zu finden, die alle benötigten Produkte abdecken, aber zusammen weniger als 8 Multiplikationen benötigen? Universität Karlsruhe (TH)
Darstellung
Folie 12.23
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.24
4
Matrixmultiplikation nach Strassen Term
Multiplikationen
Darstellung e
P4 = df − de = d ( f − e)
f
g
e
b
b
c
1
Folie 12.25
Darstellung e
f
g
Universität Karlsruhe (TH)
g
h
d
Term
Multiplikationen
Darstellung
h
e a
b
b
c
c
d
d
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.27
Multiplikationen
Folie 12.26
Matrixmultiplikation nach Strassen
a
Matrixmultiplikation nach Strassen Term
1
Informatik II Sommersemester 2001, Dr. Ivica Rogina
P7 = ae + ag − ce − cg = (a − c )(e + g ) Universität Karlsruhe (TH)
f
c
P5 = ae + ah + de + dh = (a + d )(e + h)
Multiplikationen
1
Darstellung
a
Informatik II Sommersemester 2001, Dr. Ivica Rogina
P6 = bf + bh − df − dh = (b − d )( f + h)
Multiplikationen
a
Matrixmultiplikation nach Strassen Term
Term
h
d
Universität Karlsruhe (TH)
Matrixmultiplikation nach Strassen
Universität Karlsruhe (TH)
f
g
h
1
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.28
Matrixmultiplikation nach Strassen
Darstellung
r = ae + bf = P5 + P4 − P2 + P6 e
f
g
h
a b c d
− P7 = − ae − ag + ce + cg Universität Karlsruhe (TH)
0
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.29
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.30
5
Matrixmultiplikation nach Strassen
Matrixmultiplikation nach Strassen
s = ag + bh = P1 + P2
t = ce + df = P3 + P4
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.31
Matrixmultiplikation nach Strassen u = cg + dh = P5 + P1 − P3 − P7
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.32
Rechnen mit Booleschen Matrizen Boolesche Matrizen sind z.B: xor
• Schalttafeln für elektronische Gatter • Adjazenzmatrizen für Graphen • schwarz-weiße Pixelbilder • Definitionen beliebiger Relationen • etc.
0 1 0 0 1 1 1 0
1
2 3
4
0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0
Multiplikation von Booleschen Matrizen entspricht Hintereinanderausführung der durch sie definierten Relation. Erinnern: Berechnung der transitiven Hülle eines Graphen. Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.33
Rechnen mit Booleschen Matrizen Boolesche Operatoren und Grundrechenarten: AND entspricht Multiplikation
⋅
OR entspricht Addition
0 0 0
0 0 1
1 0 1
1 1 1
Was aber ist mit Subtraktion?
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.34
Multiplikation Boolescher Matrizen bei transitiver Hülle hatten wir:
+ 0 1
0 1
Universität Karlsruhe (TH)
(i, j ) ∈ H ⇔ Aijn ≠ 0
Kante (i,j) ist in Hülle, wenn die n-te Potenz der Adjazenzmatrix (mit Elementen aus N) an der stelle i,j nicht 0 ist. D.h. wir können die Booleschen Werte 0 und 1 wie natürliche Zahlen behandeln, aber interpretieren am Ende =0 ist falsch ≠0 ist wahr
0+1=1 und 1+1=1
Leichte Modifikation für Strassen-Algorithmus: Rechne im Ring Modulo (n+1), d.h. kein Überlauf, Subtraktion geht. Also obere Schranke ist O(n 2.81 ) . Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.35
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.36
6
Multiplikation Boolescher Matrizen
Multiplikation Boolescher Matrizen j n
Gesehen:
Fragen:
Boolesche Matrizenmultiplikation kann mit Strassen-Algorithmus in O (n 2.81 ) berechnet werden.
Multiplikationsschema: cij = ∑ aik bkj
Aber Rechnen mit Natürlichen Zahlen statt Bits ist Overkill.
D.h. cij ist das Skalarprodukt zweier Vektoren
Kann man irgendwie ausnutzen, daß die Operationen mit Bits und Bitvektoren einfacher zu machen sind?
k =1
i
Ai = (ai1 ,..., ain ) und B j = (b1 j ,..., bnj ) Τ auch genannt inneres Produkt (inner product, dot product). In Booleschen Operationen ausgedrückt:
Kann man ausnutzen, daß fast alle CPUs mehrere Bits auf einmal manipulieren können?
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Multiplikation Boolescher Matrizen Angenommen, die Wortbreite (Anzahl gleichzeitig verarbeitbarer Bits) unserer CPU sei mindestens n, dann können wir 0 falls ∀k : pk = 0 cij = 1 falls ∃k : pk = 1
pk = aik bkj durch ein AND berechnen also
0 falls P = 0 cij = 1 falls P ≠ 0
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Wenn CPU-Wortlänge = k, dann inneres Produkt der Länge n in O(n/k) berechenbar. =>
Aufwand für n×n Matrixmultiplikation (d.h. n 2 innere Produkte) ist n 3 / k .
Wenn k=logn (nicht untypisch, mit 8-Bit Wortlänge wären so 256×256 Matrizen machbar), dann ist der Aufwand für eine Boolsche n×n Matrixmultiplikation O(n3/logn).
Informatik II Sommersemester 2001, Dr. Ivica Rogina
a1
a2 ... an
•
b1 b2 ... bn
=
a1
a2 ... ak
•
b1 b2 ... bk
⊕
ak +1
•
bk +1 bk + 2 ... b2 k
•
bn − k +1 bn − k + 2 ... bn
ak + 2 ... a2 k an − k + 2 ... an
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.40
Multiplikation Boolescher Matrizen Vorberechnen aller inneren Produkte, und Ablegen in einer Tabelle: k=2 00 01 10 11
0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1
Speicheraufwand: O(2 2 k ) = O(n) für k = (log n) / 2 Rechenaufwand: O(k 2 2 k ) = O(n log n) für k = (log n) / 2
D.h.: wenn wir innere produkte der Länge n berechnen wollen, legen wir uns in O(nlogn) Zeit eine Tabelle mit O(n) Einträgen für innere Produkte der gewählten Länge k=(logn)/2 an. (Im obigen Beispiel wäre n=16.)
Frage: Was aber wenn wir uns nicht auf die Fähigkeit der CPU, k Bits gleichzeitig mit AND zu verknüpfen verlassen können? Universität Karlsruhe (TH)
Es ist zu erwarten, daß die Wortlänge k der CPU < n ist. Was dann?
=> Aufwand ist O(n/k) Folie 12.39
Multiplikation Boolescher Matrizen gesehen:
Folie 12.38
Wir zerlegen ein inneres Produkt der Länge n in n/k innere Produkte der Länge k.
d.h. ein inneres Produkt wäre in O(1) berechenbar. Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Multiplikation Boolescher Matrizen
⊕ ... ⊕ an − k +1
durch einen Vergleich mit 0 berechnen
P = Ai AND B j
Universität Karlsruhe (TH)
Folie 12.37
00 01 10 11
Universität Karlsruhe (TH)
0 falls ∀k : pk = 0 cij = 1 falls ∃k : pk = 1
pk = aik bkj
Alternativ: wähle k=logn, dann steigt Speicheraufwand auf O(n 2 ) , aber k doppelt so groß => 2×weniger Operationen später. Frage: kann man O(n 2 ) Speicher effizienter nutzen? Folie 12.41
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.42
7
Multiplikation Boolescher Matrizen
Multiplikation Boolescher Matrizen
Andere Schreibweise für Matrixmultiplikation:
n
A ⋅ B = ∑ AC (r ) ⋅ BR (r )
funktioniert nicht nur für einzelne Spalten (Zeilen), sondern auch für Gruppen von diesen:
r =1
.
=
Matrixprodukt zweier Vektoren
BR (r )
Spaltenvektor
Zeilenvektor
.
( AC (r ) ⋅ BR (r )) ij = ( AC (r )) i ⋅ ( BR (r )) j = air ⋅ brj
leicht zu sehen:
BR (r..s )
AC (r..s )
AC (r ) ⋅ BR (r )
AC (r )
=
A1.... An / k Leicht zu sehen:
n
n/k
A ⋅ B = ∑ AC (r ) ⋅ BR (r )
A ⋅ B = ∑ Ai Bi
r =1
i =1
mit A = [ A1 A2 ... An / k ], B = [ B1 B2 ...Bn / k ]
also Ai = AC (k (i − 1) + 1..ki), Bi = BR (k (i − 1) + 1..ki) Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Universität Karlsruhe (TH)
Folie 12.43
Multiplikation Boolescher Matrizen
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.44
Multiplikation Boolescher Matrizen
A ⋅ B = ∑ Ai Bi = ∑ Ci
Feststellung: Es gibt maximal 2 k verschiedene Kombinationen (Potenzmenge) von Reihen aus Bi .
Frage: wie berechnet man Ci am schnellsten?
Frage: Lohnt es sich, die Summe jeder Kombination vorzuberechnen?
n/k
n/k
i =1
i =1
Beispiel:
Ai
0 0 1 1 1 1 1 0
0 1 0 0 1 1 0 0
1 1 0 1 0 1 0 1
Bi
1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0
= Ci
erste Zeile von C=letzte von B, weil erste von A=001
=
0 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1
1 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
0 1 0 0 1 1 0 0
0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0
0 1 0 0 1 1 0 0
Bi
=
letzte Zeile von C=erste von C, weil letzte von A=erste von A
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.45
Multiplikation Boolescher Matrizen Rechenaufwand für Vorberechnung aller Kombinationssummen: Beginne mit Kombination 00...0 (Summe ist trivialerweise 00...0), Induktion: 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
Aufwand:
Berechne Kombination, die der Dualdarstellung von i entspricht. Es gibt eine Zahl kleiner i, die sich von i nur durch ein Bit unterscheidet (z.B. die ohne die erste 1 in i). Nimm diese und addiere die der ersten 1 entsprechende Reihe von Bi . Addition von n Bits für jede der 2k Kombinationen => O(n ⋅ 2k )
Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.47
1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0
Speicheraufwand:
k
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
0 0 1 1 1 1 1 1
0 1 0 1 1 1 1 1
0 1 0 1 0 1 0 1
0 1 1 1 1 1 1 1
0 0 1 1 0 0 1 1
0 0 1 1 1 1 1 1
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
2k
O(2 k ⋅ 2 k ) = O(n 2 ) für k = log n Rechenaufwand: ? Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.46
Multiplikation Boolescher Matrizen Algorithmus der vier Russen gegeben: Boolesche n×n Matrizen A und B, Wortlänge k (teilt n) gesucht: C=AB A = [ A1 A2 ... An / k ], B = [ B1 B2 ...Bn / k ] initialisiere C=0 für alle i=1..n/k k berechne alle 2 Summen von Kombinationen aus Reihen von Bi für alle j=1..n addiere zu C die Summe der Kombination, die der j-ten Zeile von Ai entspricht Aufwand: n/k Multiplikationen für Ai ⋅ Bi mit jeweiligem Aufwand von O(n 2 ) und O(n ⋅ 2 k ) fürs Erstellen der Kombinationentabelle, gesamt also: O(n 3 / k + 2 k ⋅ n 2 / k ) = O(n 3 / log n) für k = log n Universität Karlsruhe (TH)
Informatik II Sommersemester 2001, Dr. Ivica Rogina
Folie 12.48
8