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