Matrix Multiplikation

Werbung
Divide & Conquer
Teile & Herrsche:
• Problem in Teilprobleme aufteilen
• Teilprobleme rekursiv lösen
• Lösung aus Teillösungen zusammensetzen
Probleme:
• Wie setzt man zusammen?
[erfordert algorithmisches Geschick und Übung]
• Laufzeitanalyse (Auflösen der Rekursion)
[ist normalerweise nach Standardschema; erfordert
ebenfalls Übung]
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
1
Divide & Conquer
Teile & Herrsche:
• Problem in Teilprobleme aufteilen
• Teilprobleme rekursiv lösen
• Lösung aus Teillösungen zusammensetzen
Algorithmen:
• Merge Sort
• Quick Sort
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
2
Matrix Multiplikation
3 7
5
4
2
1
1
0
0 3
10 2
1 0
2
1
1
4
0
0
0
3
2
0
1
3
1
1
2
3
0
2
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
=
3
Matrix Multiplikation
3 7
5
4
2
1
1
0
29 20 23 29
0 3
10 2
1 0
2
1
1
4
0
0
0
3
2
0
1
3
1
1
2
3
0
2
14 14 …
…
…
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
=
4
Matrix Multiplikation
Teile & Herrsche:
• Problem: Berechne das Produkt zweier n×n Matrizen
• Eingabe: Matrizen X,Y
• Ausgabe: Matrix Z = X⋅Y
 x1,1

 x 2,1
X=
x 3,1

x
 4,1
SS 2008
x1,2
x 2,2
x 3,2
x 4,2
x1,3
x 2,3
x 3,3
x 4,3
x1,4 
 y1,1


x 2,4 
 y 2,1
, Y=

y 3,1
x 3,4


y
x 4,4 
 4,1
Datenstrukturen und Algorithmen
17. Divide & Conquer
y1,2
y 2,2
y 3,2
y 4,2
y1,3
y 2,3
y 3,3
y 4,3
y1,4 

y 2,4 
y 3,4 

y 4,4 
5
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
6
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
7
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
8
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
9
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
Θ(n²)
10
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
Θ(n²)
Θ(n³)
11
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
Θ(n²)
Θ(n³)
Θ(n 3 )
12
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
Θ(n²)
Θ(n³)
Θ(n 3 )
Θ(1)
13
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n)
1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3.
for j ← 1 to n do
4.
Z[i][j] ← 0
5.
for k ←1 to n do
6.
Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
Laufzeit:
Θ(n²)
Θ(n)
Θ(n²)
Θ(n²)
Θ(n³)
Θ(n 3 )
Θ(1)
Θ(n³)
14
Matrix Multiplikation
Teile und Herrsche:
 A B   E F   AE + BG AF + BH 

 × 
 = 

 C D   G H   CE + DG CF + DH 
Aufwand:
• 8 Multiplikationen von n/2×n/2 Matrizen
• 4 Additionen von n/2×n/2 Matrizen
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
15
Matrix Multiplikation
Teile und Herrsche:
 A B   E F   AE + BG AF + BH 

 × 
 = 

 C D   G H   CE + DG CF + DH 
Aufwand:
• 8 Multiplikationen von n/2×n/2 Matrizen
• 4 Additionen von n/2×n/2 Matrizen
Laufzeit:
• T(n) = 8⋅T(n/2) + Θ(n²)
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
16
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
17
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
• Fall 1: Laufzeit Θ(n
SS 2008
log a
b
) = Θ(n³)
Datenstrukturen und Algorithmen
17. Divide & Conquer
18
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
log a
b
• Fall 1: Laufzeit Θ(n
) = Θ(n³)
• Formaler Beweis durch Induktion!!
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
19
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
log a
b
• Fall 1: Laufzeit Θ(n
) = Θ(n³)
• Formaler Beweis durch Induktion!!
• Nicht besser als einfacher Algorithmus
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
20
Matrix Multiplikation
Teile und Herrsche (Algorithmus von Strassen):
 A B   E F   AE + BG AF + BH 

 × 
 = 

 C D   G H   CE + DG CF + DH
Trick:
P1 = A⋅(F-H)
P2 = (A+B)⋅H
P3 = (C+D)⋅E
P4 = D⋅(G-E)
SS 2008
P5 = (A+D)⋅(E+H)
P6 = (B-D)⋅(G+H)
P7 = (A-C)⋅(E+F)
Datenstrukturen und Algorithmen
17. Divide & Conquer
21
Matrix Multiplikation
Teile und Herrsche (Algorithmus von Strassen):
 A B   E F   AE + BG AF + BH 

 × 
 = 

 C D   G H   CE + DG CF + DH
Trick:
P1 = A⋅(F-H)
P2 = (A+B)⋅H
P3 = (C+D)⋅E
P4 = D⋅(G-E)
SS 2008
P5 = (A+D)⋅(E+H) AE+BG = P5 + P4 - P2 + P6
P6 = (B-D)⋅(G+H) AF+BH = P1 + P2
P7 = (A-C)⋅(E+F) CE+DG = P3 + P4
CF+DH = P5+ P1 - P3 - P7
Datenstrukturen und Algorithmen
17. Divide & Conquer
22
Matrix Multiplikation
Teile und Herrsche:
 A B   E F   AE + BG AF + BH 

 × 
 = 

 C D   G H   CE + DG CF + DH
Trick:
P1 = A⋅(F-H)
P2 = (A+B)⋅H
P3 = (C+D)⋅E
P4 = D⋅(G-E)
SS 2008
P5 = (A+D)⋅(E+H) AE+BG = P5 + P4 - P2 + P6
P6 = (B-D)⋅(G+H) AF+BH = P1 + P2
P7 = (A-C)⋅(E+F) CE+DG = P3 + P4
CF+DH = P5+ P1 - P3 - P7
7 Multiplikationen!!!
23
Datenstrukturen und Algorithmen
17. Divide & Conquer
23
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
24
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
• Fall 1: Laufzeit Θ(n
SS 2008
log a
b
)
Datenstrukturen und Algorithmen
17. Divide & Conquer
25
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
• Fall 1: Laufzeit Θ(n
SS 2008
log a
b
)=Θ(n
log 7
2
)
Datenstrukturen und Algorithmen
17. Divide & Conquer
26
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
a
f(n)
b
Master Theorem:
• f(n) = k ⋅ n²
log a
b
log 7
2
2,81
• Fall 1: Laufzeit Θ(n
)=Θ(n
) = Θ(n
)
• Verbesserter Algorithmus!
(Erheblicher Unterschied für große Eingaben)
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
27
Matrix Multiplikation
Satz 17.1
Das Produkt zweier n×n Matrizen kann in Θ(n
berechnet werden.
SS 2008
Datenstrukturen und Algorithmen
17. Divide & Conquer
2,81
) Laufzeit
28
Herunterladen