Algebraische und arithmetische Algorithmen

Werbung
Kapitel 1
Algebraische und arithmetische
Algorithmen
1.1
Das algebraische Berechnungsmodell
+, −, ∗, (/)
Struktur: Körper (oder Ring) mit den Operationen
Eingabe: endliche Folge von Zahlen
Ausgabe: endliche Folge von Zahlen
Laufzeit: Anzahl der Operationen als Funktion der Eingabelänge.
Verwendet werden Abfragen auf 0, Schleifen, Rekursionen etc.
1.2
Matrizenmultiplikation
Eingabe: Zwei
Ausgabe:
(n × n)-Matrizen über einem Ring



a11 · · · a1n
b11 · · ·
 ..


.
.
..
..
.
A= .
 und B =  ..
.
.
.
an1 · · · ann
bn1 · · ·
b1n
.
.
.



bnn
(n × n)-Matrix


C=
c11
···
c1n
.
.
.
..
.
.
.
.
cn1 · · ·



mit
cij =
n
X
aik · bkj , 1 ≤ i, j ≤ n
k=1
cnn
Der naive Algorithmus nach dieser Formel benutzt drei verschachtelte Schleifen über
i, j
und
k.
Das
3
ergibt eine Laufzeit von Θ(n ):
n2 · n
Multiplikationen
n2 · (n − 1)
Additionen
2n3 − n2
Für n = 2
1.2.1
Operationen
sind es also 8 Multiplikationen und 4 Addidtionen.
Geht es noch schneller ?
Algorithmus von Strassen (1969)
Der deutsche Mathematiker Volker Strassen die fand folgende Formel, um
plizieren:

A·B =C =
c11 c12
c21 c22
1


mit
(2 × 2)-Matrizen
zu multi-
c11 = m1 + m2 − m4 + m6
c12 = m4 + m5
c21 = m6 + m7
c22 = m2 − m3 + m5 − m7
m1 = (a12 − a22 ) · (b21 + b22 )
m2 = (a11 + a22 ) · (b11 + b22 )
m3 = (a11 − a21 ) · (b11 + b12 )
m4 = (a11 + a12 ) · b22
m5 = a11 · (b12 − b22 )
m6 = a22 · (b21 − b11 )
m7 = (a21 + a22 ) · b11
wobei
aij bij
wie zuvor die Elemente der Matrizen
A
und
B
bezeichnen.
Diese Methode nutzt 7 Multiplikationen und 18 Additionen und lässt sich zu einem rekursiven Algorithmus zur Multiplikation quadratischer Matrizen beliebiger Gröÿe erweitern. Dazu führt man die
Matrizenmultiplikation zunächst auf den Fall für
(2 × 2)-Matrizen
zurück.
R: A, B ∈ Rn×n mit n = 2k , k ∈ N+



B11 B12
 und B = 

B21 B22
Gegeben seien zwei Matrizen über einem Ring

A11 A12
A=
Hier sind
n
n
Aij , Bij ∈ R 2 × 2
A21 A22
1 ≤ i, j ≤ 2. Nun gilt


A11 B11 + A12 B21 A11 B12 + A12 B22

A·B =
A21 B11 + A22 B21 A21 B12 + A22 B22
für
Damit ist die Multiplikation von
(n × n)-Matrizen
auf 7 Multiplikationen und 18 Additionen von
n
2 )-Matrizen zurückgeführt. Als Rekursionsanker wählen wir
( n2
×
R
entspricht).
mit
(1 × 1)-Matrizen (was Elementen aus
Das Verfahren lässt sich auch für quadratische Matrizen beliebiger Gröÿe anwenden, indem man die
Matrix bis zur nächsten Zweierpotenz mit Nullen auüllt. Die Dimension der Matrix kann sich dadurch
höchstens verdoppeln.
Die Laufzeit des Algorithmus ist:
M (1) = 1
M (n) = 7M
=
=
=
=
=
n
2
n
+ 18
n 2
2
9 2
7M
+ n
2
2
n
9 n 2
9
7 · (7M ( ) + ·
) + n2
4
2
2
2
...
n 9
n 2
n 2 k
2
k−1
7 M k + · n +7·
+ ... + 7
· k−1
2
2
2
2
"
log
n
2
7
−1
9
1 log2 n
kürzt
nlog2 7 + n2 · 4 7
2
4
4 −1
= 7nlog2 7 − 6n2
⇒
Θ(nlog2 7 )
2
sich mit n2
#
Durch den kleineren Exponenten von
log2 7 = 2, 807.. < 3
schneller als der naive Algorithmus ist.
1.2.2
ist der Strassen-Algorithmus asymptotisch
Aber geht es (asymptotisch) noch schneller ?
Ausblick
Falls für ein
k∈N
(k × k)-Matrizen mit p Multiplikationen berechenbar
(n × n)-Matrizen in O(nlogk p ) Operationen berechenbar.
das Produkt zweier
allgemein das Produkt zweier
Strassen fand das Paar
k = 2, p = 7.
Seitdem gab es weitere Arbeiten auf diesem Gebiet, die die
Laufzeit noch weiter reduzieren konnten auf
Θ(nx ):
k = 70, p = 143640
x = 2, 795..
Victor Pan
1978
Bini, Capovani, Lotti, Romani
1979
x = 2, 779..
Schönhage
1979
x = 2, 55..
Pan, Winogard
1980
x = 2, 54..
Coppersmith, Winogard
1980
x = 2, 376..
1.3
ist, so ist
Inversion und Determinante von Matrizen
Wir betrachten
−1 , falls
ist A
(n × n)-Matrizen über einem Körper K . Gegeben ist die Matrix A über K
und gesucht
A regulär ist. Die Laufzeit bezeichnet wieder die Anzahl der Körperoperationen +, −, ∗, /.
Mit dem klassischen Gauss-Eliminationsverfahren lässt sich die Inverse berechnen, indem man die
A
Matrix
mit Zeilenoperationen in die Einheitsmatrix überführt und die selben Operationen auch auf
eine Einheitsmatrix anwedet:
A In
⇒
In A−1
Die Elimination eines Elementes der Matrix benötigt eine Zeilenoperation, welche in
O(n)
arbeitet.
3
Insgesamt ergibt sich also eine Laufzeit von Θ(n ).
Rückführung der Inversion auf Matrizenmultiplikation:
A ∈ K n×n
Sei wieder
mit
n = 2k , k ∈ N+ .
Unter der Voraussetzung, dass
A11
regulär ist, gilt folgende
Zerlegung:

I n2
A=
0 n2
I n2
A21 A−1
11
|
{z
X
0 n2

A11 0 n2
0 n2
}|
D


{z
I n2
A−1
11 A12
0 n2
I n2
}|
Y
{z


}
Z
( n2 × n2 )-Blockmatrizen aus A, I n2 die Einheitsmatrix der Gröÿe
n
die Nullmatrix der Gröÿe
2 . Die Matrix D berechnet sich aus
Dabei bezeichnen
n
2 und

Aij , 1 ≤ i, j ≤ 2
die
D = A22 − A21 A−1
11 A12
Die Matrizen
auch
D
X
und
Z
sind regulär, weil ihre Determinante 1 ist (Dreiecksform). Wenn sowohl
regulär sind, dann ist

A−1 = 
|
Y
ebenfalls regulär und es gilt:
I n2
−A−1
11 A12
0 n2
I n2
{z
Z −1


A−1
11
0 n2
}|
0 n2

0 n2



n
D−1
−A21 A−1
I
11
2
{z
}|
{z
}
Y −1
Das liefert einen rekursiven Algorithmus zum Invertieren einer
3
I n2
X −1
(n × n)-Matrix.
A11
als
Die Determinante von
A
lässt sich ebenfalls auf diese Art zurückführen:
det A
=
det X
· det Y · det Z
= 1 · det Y · 1
=
Bisher wird immer vorausgesetzt, dass
zumindest in den Körpern
R
und
Q
A11
det A11
· det D
regulär ist. Falls dies nicht gewährleistet ist, lässt sich
folgender Trick nutzen (A
T = A transponiert):
A−1 = (AT · A)−1 · AT
Die Matrix
AT · A
ist positiv denit und symmetrisch.
to be continued ...
1.4
Multiplikation Boolscher Matrizen (Fortsetzung 18.04.)
Da die Einträge
ĉij ≤ n
sind, können wir statt über
Z
auch über
Zn+1
rechnen.
Zn+1
ist ein Ring, d.h.
die schnelle Matrizen Multiplikation ist anwendbar.
(ĉij sind die Ergebnisse der Multiplikation)
jetzt noch:
Anzahl der Bitoperationen für eine Multiplikation/Addition/Subtraktion auf Zn+1
(Die Zahlen werden binär dargestellt mit
Addition und Subtraktion von zwei
dlog(n + 1)e
Bits.)
k -Bit-Zahlen braucht O(k) Bitoperationen (nach der Schulmethode
und der Implementierung im Schaltkreis).
Für die Multiplikation werden
O(k 2 )
Bitoperationen benötigt.
Beispiel für die Addition:
Beispiel für die Multiplikation:
1 0 1 1
+
1 0 1 1
1 0 0 1
·
1 0 0 1
1 0 1 1
1 0 1 0 0
1 0 1 1
1 1 0 0 0 1 1
Satz 1.
Falls die Matrizenmultiplikation über einem Ring in M (m) arithmetischen Operationen möglich ist
und Multiplikation/Addition/Subtraktion von k-Bitzahlen in m(k) Bitoperationen, so kann man mit
O(M (n) · m(dlog(n + 1)e)) Bitoperationen boolsche n × n-Matrizen multiplizieren.
zum Beispiel:
M (n) =
O(n2,376... )


m(k) =
O(k 2 )

O(n2,376... · log2 (n)) = O(n2,377 )
| {z }
da
log2 (n) O(nε )
(Boolsche Matrizenmultiplikation)
4
für jedes
ε>0
1.4.1
Transitiver Abschluss Boolscher Matrizen
gegeben:
Boolsche
n × n-Matrix A
=
ˆ
gerichteter Graph
=
ˆ
binäre Relation
GA
RA
mit
n
Knoten (o.B.d.A.
auf einer
n-elementigen
V = {1, . . . , n})
Menge
Wir wollen den reexiven und den transitiven Abschluss dieser Relation (Matrix
A∗ := I ∨ A ∨ A2 ∨ A3 ∨ · · · =
∞
_
A∗ )
berechnen.
Ai
i=0
(komponentenweises Oder)
(A∗ )ij = 1 ⇔
in
GA
existiert ein Weg von
(Ak )ij = 1 ⇔
in
GA
existiert ein Weg der Länge
i
j,
nach
k
denn:
von
i
nach
j
nach
r
mit der Länge
Beweis durch Induktion:
(es existiert ein Weg von
∃r : ((Ak−1 )ir = 1) ∧ (arj = 1),
dann
(Ak )ij =
i
n
W
k − 1)
(Ak−1 )ir aij = 1
i=0
Zusammenhang: transitiver Abschluss ↔ Multiplikation:
Satz 2.
Falls die Multiplikation Boolscher Matrizen mit M (n) boolschen Operationen möglich ist, dann ist
der transitiver Abschluss in O(M (n)) möglich.
(Vorraussetzung: 4 · M (n /2 ) ≤ M (n), M (2n) ≤ c für ein c > 0)
a)
b)
transitiver Abschluss in A(n) möglich, dann ist die Multiplikation in A(3n) möglich
Beweis.
(Annahme

a)
wenn
A=
n
ist eine Zweierpotenz)
B C
D E

Die transitive Hülle von
und
F)


dann ist
n × n-Matrix
∗
∗
F CE ∗

(B ∨ CE D)
 |

{z
}

A∗ = 
:=F


∗
∗
∗
∗
E DF
E ∨ E DF CE
kann auf 2 transitive Hüllen von
und 6 Multiplikation und 2 Additionen zurückgeführt werden.
5
n/
2
× n /2
-Matrizen (E
∗
A(n) = 2A(n /2 ) + 6M (n /2 ) + O(n2 )
A(1) = 0
also gilt:
für
n≥2
A(n) = 2A(n /2 ) + O(M (n))
(wie bei Inversion auösen)
⇒ A(n) = O(M (n))
Beispiel für die Graphendarstellung von
GA :
n/
2
1 . . . n /2
+ 1...n
B repräsentiert.
E repräsentiert.
Einträge in C repräsentiert.
Einträge in D repräsentiert.
Pfade innerhalb der linken Seite werden durch die Einträge in
Pfade innerhalb der rechten Seite werden durch die Einträge in
Pfade von der linken zur rechten Seite werden durch die
Pfade von der rechten zur linken Seite werden durch die
Bisherige Methode: Für jeden Knoten in
GA
wird eine Breitensuche durchgeführt.
O(n(n + m))
(Alternativ kann bei dünn besetzten Matrizen Multiplikation ezient durchgeführt werden.)
b)
Übung
Was kann man noch auf Matrizenmultiplikation reduzieren?
Analyse kontextfreier Sprachen geht in
O(M (n)).
(Dazu wird ein angepasster CYK-Algorithmus ver-
wendet.)
M (n) =
1.5
Komplexität der Multiplikation zweier
n × n-Matrizen
Polynommultiplikation, diskrete Fourier-Transformation
Gegeben:
Körper
K,
Polynome über
K
in
x: K[x]
P (x) = a0 + a1 · x + a2 · x2 + · · · + an · xn mit n ≥ 0, a0 , . . . , an K
n+1 repräsentiert.
der Koezienten (a0 , . . . , an ) K
Ausdrücke der Form
durch einen Vektor
6
werden
Die Addition von Polynomen wird komponentenweise durchgeführt.
Für die Multiplikation von Polynomen gilt:
(a0 + a1 · x + · · · + an · xn ) · (b0 + b1 · x + · · · + bn · xn ) = c0 + c1 · x + · · · + c2n · x2n
mit

i
P


aj bi−j
 ci =
für
i≤n


 ci =
für
i>n
(c0 , . . . , c2n )
j=0
n
P
aj bi−j
i = 0, . . . , 2n
j=i−n
heiÿt Faltung (Konvolution) von
Wie viele Operationen (über
K)
Direkt aus der Denition folgt:
2(n − i) + 1
n
P
i=0
2i + 1 +
für
(a0 , . . . , an ) · (b0 , . . . , bn ).
sind nötig, um Faltung (d.h. Polynommultiplikation) zu berechnen?
2i + 1
für
i≤n
i = n + 1, . . . , 2n
2n
P
2(i − n) + 1 = O(n2 )
i=n+1
7
Herunterladen