1 Divide-and-Conquer-Algorithmen

Ähnliche Dokumente
SS16 Algorithmen und Datenstrukturen 8. Kapitel Divide-and-Conquer-Algorithmen

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Algebraische und arithmetische Algorithmen

2. Effizienz von Algorithmen

16. All Pairs Shortest Path (ASPS)

Effiziente Algorithmen

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: (evtl. fallen Zeilen weg, wenn das zugehörige Bit des Multiplikators 0 ist).

3.3 Laufzeit von Programmen

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Effiziente Algorithmen

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

16. Algorithmus der Woche Multiplikation langer Zahlen... schneller als in der Schule

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Komplexität von Algorithmen:

5. Übungsblatt zu Algorithmen I im SoSe 2016

Schnelle Multiplikation

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

Abschnitt: Algorithmendesign und Laufzeitanalyse

2. Entsprechende Listen P i von Vorgängern von i 3. for i := 1 to n do. (ii) S i = Knoten 2 + 1}

Algorithmische Methoden zur Netzwerkanalyse

Übung Algorithmen und Datenstrukturen

Multiplikation langer Zahlen

Grundlagen: Algorithmen und Datenstrukturen

1.2 Rechnen mit Termen II

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

5 Zwei spieltheoretische Aspekte

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Blockmatrizen. Arthur Wettschereck. 11. April 2012, Bonn

Grundlagen der Mathematik

Beispiele 1. Gegeben ist das lineare System. x+4y +3z = 1 2x+5y +9z = 14 x 3y 2z = 5. Die erweiterte Matrix ist

Datenstrukturen & Algorithmen

Übung zur Vorlesung Berechenbarkeit und Komplexität

a 11 a 12 a 1(m 1) a 1m a n1 a n2 a n(m 1) a nm Matrizen Betrachten wir das nachfolgende Rechteckschema:

Lineare Algebra und Numerische Mathematik für D-BAUG. Serie 6

Teile und Herrsche Teil 2

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

8.2 Invertierbare Matrizen

WS 2009/10. Diskrete Strukturen

Serie 5. Lineare Algebra D-MATH, HS Prof. Richard Pink. 1. [Aufgabe] Invertieren Sie folgende Matrizen über Q:

Modul Algorithmik, T-Katalog

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

In diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N. Wenn (mit einem n > 1)

Beispiele 1. Gegeben sei das lineare Gleichungssystem mit erweiterter Matrix (A

Definition 77 Sei n N. Der Median (das mittlere Element) einer total geordneten Menge von n Elementen ist deren i-kleinstes Element, wobei n i =.

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

6. Vorlesung. Rechnen mit Matrizen.

LR Zerlegung. Michael Sagraloff

Grundlagen der Mathematik

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/45

Blockmatrizen. Beispiel 1 Wir berechnen das Produkt von A R 4 6 mit B R 6 4 :

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

15ab 21bc 9b = 3b 5a 7c 3

Grundlagen: Algorithmen und Datenstrukturen

Kapitel III Ringe und Körper

9.2 Invertierbare Matrizen

2 Wachstumsverhalten von Funktionen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Blockmatrizen und -Algorithmen

Komplexität von Algorithmen OOPM, Ralf Lämmel

Mathematik für Naturwissenschaftler II SS 2010

Komplexität von Algorithmen

,...) ist eine Folge, deren Glieder der Null beliebig nahe kommen. (iii) Die Folge a n = ( 1) n + 1 n oder (a n) = (0, 3 2, 2 3, 5 4, 4 5

5 Lineare Gleichungssysteme und Determinanten

Das Problem des Handlungsreisenden

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

6. Transitive Hülle. 6.1 Min-Plus-Matrix-Produkt und Min-Plus-Transitive Hülle Ring Z(+, ) Semiring N(+, )

10. Teilbarkeit in Ringen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Schleifeninvarianten. Dezimal zu Binär

Fortgeschrittene Netzwerk- und Graph-Algorithmen

x x y x y Informatik II Schaltkreise Schaltkreise Schaltkreise Rainer Schrader 3. November 2008

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Die Größe A(n, d) und optimale Codes

7 Matrizen über R und C

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

1 Zahlentheorie. 1.1 Kongruenzen

Terme und Gleichungen

Interim. Kapitel Einige formale Definitionen

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Algorithmen und Datenstrukturen

bekannt: Eliminationsverfahren von Gauß Verfahren führt zu einer Zerlegung der Koeffizientenmatrix: A = LR A = LR

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Beispiel-Prüfungsfragen für Effiziente Algorithmen M. Dietzfelbinger, 15. Juli 2011, leicht korrigiert 27. Juli 2011

Wirtschafts- und Finanzmathematik

4 Matrizenrechnung. Beide Operationen geschehen also koeffizientenweise. Daher übertragen sich die Rechenregeln von K(m n, k).

Notation für das asymptotische Verhalten von Funktionen

Übung zur Vorlesung Algorithmische Geometrie

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

2 Rechentechniken. 2.1 Potenzen und Wurzeln. Übersicht

Einstieg in die Informatik mit Java

3.9 Elementarmatrizen

Dem Anschein nach werden diese Zahlen kleiner und kleiner und streben gegen Null. Was sollen sie sonst auch tun? Aber der Begriff

1. Asymptotische Notationen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. String Matching 5. Ausgewählte Datenstrukturen

Transkript:

1 Divide-and-Conquer-Algorithmen 1.1 Multiplikation ganzer Zahlen Wir multiplizieren zwei ganze Zahlen x und y, die in Binärdarstellung gegeben sind. Der Einfachheit halber nehmen wir an, die beiden Zahlen hätten genau n Bits, wobei n eine Zweierpotenz ist: (1 x = (x n 1...x 0 2,y = (y n 1...y 0 2. Wie viele Bitoperationen sind für die Multiplikation notwendig/ausreichend? Die erste Methode, die einem einfällt, ist die Schulmethode, die so vorgeht: Algorithmus 1 (Schulmethode der Multiplikation Für j = 0,...,n 1: Berechne x i y j = x i y j, 0 i < n; Arrangiere die Bits x i y j in einem System mit n Zeilen und 2n 1 Spalten; Addiere spaltenweise von rechts nach links, unter korrekter Verarbeitung der Überträge. Beispiel: Multiplikation von x = 0110 mit y = 1011. 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Wieviele Bitoperationen sind hierfür nötig? Allein das Bilden der Bitprodukte x i y j kostet n 2 Operationen; die Addition kann nicht mehr als O(n 2 Operationen kosten. Insgesamt erhalten wir Θ(n 2 Bitoperationen. Diese Methode erscheint sehr natürlich. 1

Frage: Können wir mit weniger als Θ(n 2 Bitoperationen auskommen? Ansatz: Divide-and-Conquer (lat.: divide et impera deutsch: teile und herrsche 1. Falls x (Größe des Inputs kleiner als eine Trivialitätsschranke s 0, löse das Problem für x direkt. 2. Falls x > s 0, zerlege den Input x (geschickt in mehrere Teile y 1,...,y b ( Teile 3. Löse die Aufgabe für jeden der Teile separat rekursiv; Ergebnisse: r 1,...,r b 4. Setze aus r 1,...,r b eine Lösung r für die Eingabe x zusammen. ( Kombiniere Konkret: 1. Falls n = 1: Multipliziere Bits x und y. (Falls n n 0 : Benutze Hardware-Multiplikation, oder benutze Schulmethode 2. Sonst: Setze k = n/2. 3. Zerlege Zahldarstellung x in 2 Teile A, B mit x = A 2 k + B und zerlege Zahldarstellung y in 2 Teile C, D mit y = C 2 k + D 4. Berechne A C, A D, B C, B D rekursiv 5. Setze zusammen: (2 x y = (A C 2 2k + (A D + B C 2 k + (B D. Wieviele Bitoperationen ( Kosten, cost insgesamt? { (3 C(n 1 falls n = 1 4 C(n/2 + c n, 2

für eine Konstante c > 0 (diese linearen Kosten decken die Bitoperationen für die Additionen ab. Mit c = 10 (nur ein Beispiel bekommen wir: n Schranke für C(n 1 1 2 4 1 + 10 2 = 24 4 4 24 + 10 4 = 136 8 4 136 + 10 8 = 624. n = 2 h??? Die Ungleichung (3 ist eine sogenannte Rekurrenzungleichung, aus der wir folgern können: C(n = O(n 2. (Später: Das Master-Theorem ermöglicht es oft, einfach eine Lösung abzulesen. Dies ist nicht besser als die Schulmethode. Zu einfach gedacht! Wir müssen auf jeden Fall A C und B D berechnen. Mit E := A B und F := C D beobachten wir (4 (A D + B C = (A C + B D E F, also (5 x y = (A C 2 2k + ((A C + B D E F 2 k + (B D. Es genügt, 3 Produkte von Zahlen der halben Länge zu berechnen! Bemerkung: Eigenlich wird die Instanz (x, y nicht in drei (disjunkte Teile zerlegt, sondern die Lösung für (x,y wird auf die Lösung dreier halb so großer Instanzen reduziert ähnliches gilt für viele D-a-C-Algorithmen. Bemerkung: E und F lassen sich mit n/2 Bits darstellen, können aber negativ sein. Das Vorzeichen müssen gesondert behandeln. Dazu wird die Signumsfunktion benutzt: 1 falls x < 0 sign(x = 0 falls x = 0 1 falls x > 0. 3

Algorithmus 2 (Multiplikation nach Karatsuba und Ofman (1 Eingabe: Natürliche Zahlen x und y, jede mit n Bits geschrieben, n = 2 h. (2 Falls n = 1, return x y; ( sonst: (3 Zerlege x = A 2 k + B, y = C 2 k + D, A,B,C,D mit n/2 Bits; (4 E := A B; F := C D; (5 G := A C; H := B D; I := E F ; ( rekursiv! (6 return G 2 2k + ((G + H sign(esign(f I 2 k + H. Wie viele Bitoperationen? Zunächst: Additionen ignorieren. Wenn n = 1: M(1 = 1 -Operation. Wenn n = 2 h, h 1: M(n = 3M(n/2 -Operationen. n M(n 1 1 2 3 1 = 3 4 3 3 = 9 8 3 3 2 = 3 3. n = 2 h 3 h. Also ist M(n = M(2 h = 3 h = 2 (log 2 3h = n log 2 3. Dabei: log 2 3 = ln 3 ln 2 1.585. Besser als quadratisch! Nun wollen wir auch die Kosten der Additionen berücksichtigen. Die Zerlegung von x und y in zwei Teile ist (fast umsonst, da hier nur Bitsegmente abzuschneiden sind. Eine Addition bzw. Subtraktion von Zahlen der Länge O(n kostet O(n. Es fallen in einer Rekursionsstufe nur konstant viele solche Operationen an, also kosten diese alle zusammen cn Bitoperationen. Rekurrenzungleichung: { (6 C(n für eine Konstante c > 0. 1 falls n = 1 3 C(n/2 + c n, 4

Wir rechnen: C(n = #(Operationen bei Karatsuba-Ofman für n Ziffern. = 3 C(n/2 + cn = 3 C(2 h 1 + c 2 h = 3 (3 C(2 h 2 + c 2 h 1 + c 2 h = 3 2 C(2 h 2 + 3c 2 h 1 + c 2 h = 3 3 C(2 h 3 + 3 2 c 2 h 2 + 3c 2 h 1 + c 2 h = 3 h C(2 h h + 3 h 1 c 2 1 + 3 h 2 c 2 2 + + 3 1 c 2 h 1 + c 3 0 2 h = 3 h + 3 h c (( 2 3 1 + ( 2 3 2 + + ( 2 3 h < 3 h + 3 h c 2 3 < 3 h + 3 h c 2 1 1 2 3 = (1 + 2c 3 h = O(n log 2 3. Satz 3 Beim Karasuba-Ofman-Multiplikationsalgorithmus beträgt die Anzahl der Bitoperationen und die Rechenzeit O(n log 2 3 = O(n 1.585. Es sei bemerkt, dass es andere Multiplikationsalgorithmen mit (asymptotisch noch geringerer Operationsanzahl gibt. Genannt sei der Algorithmus von Schönhage und Strassen (1971, der O(n(log n log log n Zeit/Bitoperationen benötigt, sowie der Algorithmus von Fürer (Martin Fürer: Faster integer multiplication, STOC 2007 Proceedings, S. 57-66, der mit O(n(log n 2 log n Bitoperationen 1 auskommt. Diese Algorithmen sind allerdings nur von theoretischem Wert; theoretisch interessant und sehr schwierig ist auch die Frage, ob O(n log n Bitoperationen genügen. Bei der praktischen Verwendung des Karasuba-Ofman-Multiplikationsalgorithmus sollte man die sogennante gemischte Methode verwenden, die auf 1 log n ist die kleinste Höhe eines Zweierpotenzturms 2 22...2, dessen Wert n erreicht. Dies ist eine extrem kleine Zahl, viel kleiner als log n. 5

kleine Instanzen (weniger als n 0 Bits, auch in der Rekursion, die Schulmethode anwendet, die ihrerseits wieder für Zahlen mit 32 oder mit 64 Bits die Hardware benutzt. Auf diese Weise lassen sich schon bei Zahlen mit wenig mehr als 1000 Bits Einsparungen gegenüber der Schulmethode erzielen. Was das richtige n 0 ist, kann eventuell von der Hardware abhängen. 1.2 Die Mergesort-Rekurrenz Der Algorithmus Mergesort sortiert (bekanntlich n Zahlen folgendermaßen: 1. Wenn n = 1, ist nichts zu tun; wenn n = 2, sortiere mit 1 Vergleich. Sonst: 2. Teile die Zahlenmenge in zwei Teile der Größe n/2 und n/2. Sortiere diese rekursiv. 3. Füge die beiden sortierten Folgen aus 2. zu einer sortierten Folge zusammen, mit einem Reißverschlussverfahren, das man Merge oder Mischen nennt. Kosten: Maximal n 1 Vergleiche. Vergleichszahlen im schlechtesten Fall: n 1 2 3 4 5 6 7 8 9 10 11 12 13 14... C(n 0 1 3 5 8 11 14 17 21 25 29 33 37 41... Rekurrenzungleichung: { 0 falls n = 1 (7 C(n C( n/2 + C( n/2 + n 1, sonst. Lösung: C(n n log n (2 log n 1. Dies kann man durch Induktion beweisen. (Bemerkung: Die Induktion geht über k = log n, und man muss die Induktionsbehauptung für n = 2 k s sorgfältig formulieren. Im nächsten Abschnitt lernen wir eine Methode kennen, mit der man viele Rekurrenzungleichungen rasch und durch Nachsehen lösen kann, ohne eigene Rechnungen oder Induktionsbeweise durchzuführen. 6

1.3 Das Master-Theorem für D-a-C-Rekurrenzen Wir betrachten Rekurrenzen der folgenden Form: { g falls n = 1 (8 B(n a B(n/b + f(n, sonst. Dabei ist a 1 eine ganze Zahl, b > 1 ist eine Konstante, f(n ist eine monoton wachsende Funktion. Falls n/b keine ganze Zahl ist, sollte man sich an dieser Stelle B( n/b denken. Eine solche Rekurrenz ergibt sich bei der Analyse eines D-a-C-Algorithmus, der für einen trivialen Basisfall (Größe 1 höchstens Kosten g hat und aus einer Instanz der Größe n > 1 genau a Teilinstanzen der Größe n/b (passend gerundet bildet, dann den Algorithmus rekursiv aufruft und die Lösungen wieder kombiniert. O.B.d.A. können wir annehmen, dass B(n monoton wachsend ist. Andernfalls definieren wir einfach ˆB(n = max{b(i 1 i n}. Dann ist ˆB(n monoton und erfüllt ebenfalls die Rekurrenzungleichung (weil f(n als monoton wachsend angenommen wurde. Um die Überlegungen zu vereinfachen und anschaulicher zu gestalten, nehmen wir an, dass b > 1 ganzzahlig ist. Die resultierenden Formeln gelten aber auch für nicht ganzzahlige b. Ebenso nehmen wir an, dass n eine Potenz von b ist. Dies lässt sich mit der Monotonie von f(n und von B(n rechtfertigen. Sei also n = b l. Um B(n abzuschätzen, bilden wir einen Rekursionsbaum, wie folgt: Die Wurzel sitzt auf Level 0, sie hat den Eintrag f(n und hat a Kinder auf Level 1. Wenn v ein Knoten auf Level i 1 < l ist, hat v genau a Kinder auf Level i. Falls i < l, haben diese Kinder den Eintrag f(n/b i ; Knoten auf Level l haben den Eintrag g. (Skizze: siehe Vorlesung Lemma 4 Wenn v Knoten auf Level i ist, dann gilt: B(n/b i Summe der Einträge des Unterbaums, der v als Wurzel hat. Also: B(n Summe der Einträge im gesamten Baum. 7

Dieses Lemma beweist man leicht durch Induktion über i = l,l 1,...,0 (bottom-up. Wenn man bemerkt, dass es auf Level i genau a i Knoten gibt, die alle denselben Eintrag f(n/b i bzw. g haben, ergibt sich folgende Abschätzung: (9 B(n a i f(n/b i + a l g =: B 1 (n + B 2 (n. Wir formen zunächst den zweiten Term um: (10 B 2 (n = a l g = (b log b a l g = (b l log b a g = n log b a g. Dieser Term beschreibt den Beitrag zu den Gesamtkosten, der von den Blättern herrührt algorithmisch gesehen sind das die Kosten für die Bearbeitung der a l Basisfälle. Nun wenden wir uns dem ersten Term zu. Hier gibt es mehrere Fälle. 1.3.1 Erster Fall: Untere Baumebene f(m = O(m α mit α < log b a. In diesem Fall wächst f relativ langsam mit n. Die Beiträge aus den unteren Ebenen des Rekursionsbaums (kleine n dominieren die Laufzeit durch ihre Vielzahl, nicht die Größe der einzelnen Einträge. 8

B 1 (n = a i f(n/b i = O = O ( ( ( = O n α = O = O(a l. n α ( n α a i b i ( n α a l ( a b α i (a/b α l (a/b α 1 1 (b l α In diesem Fall ist also (11 B(n B 1 (n + B 2 (n = O(a l + O(a l = O(a l = O(n log b a. Man sieht auch an der Rechnung, dass der Beitrag B 2 (n (direkt von den Blättern den Beitrag B 1 (n von den inneren Knoten dominiert. Die Karatsuba-Ofman-Rekurrenz ist von diesem Typ! 1.3.2 Zweiter Fall: Balancierte Baumebenen f(m = O(m log b a. In diesem Fall wächst f mit n (höchstens mit einer Rate, die das Wachsen der Baumebenen gerade ausgleicht. Die Beiträge aus jeder Ebene des Rekursionsbaums zur Abschätzung sind in etwa gleich. 9

B 1 (n = a i f(n/b i = O = O ( ( a i = O ( l n log b a. ( n logb a b i a i nlog b a a i In diesem Fall ist also (12 B(n B 1 (n+b 2 (n = O(l n log b a +O(n log b a = O(a l = O((log n n log b a. Der Beitrag zur Summe in jeder Ebene des Rekursionsbaums ist gleich, und ist gleich dem Beitrag von den Blättern. Der Mergesort-Algorithmus ist das typische Beispiel für einen Algorithmus, der eine Rekurrenz dieser Art liefert. 1.3.3 Dritter Fall: Übergewicht der Wurzel f(m = Ω(m α, mit α > log b a. (Regularitätsbedingung: f wächst stets mit der entsprechenden Rate Es gibt ein c < 1 mit: c f(n a f(n/b. Wenn man die Größe des Inputs von n/b auf n erhöht, wachsen die Kosten im Knoten von f(n/b auf f(n mindestens um den Faktor a/c > a. Wir rechnen: f(n/b c a f(n ( c 2 f(n/b 2 f(n a. ( c i f(n/b i f(n. a 10

Dies benutzen wir, um B 1 (n abzuschätzen: weil ci = 1 cl 1 c = O(1. In diesem Fall ist also B 1 (n = = = a i f(n/b i ( c i a i f(n a c i f(n = f(n = O(f(n, (13 B(n B 1 (n + B 2 (n = O((log n n log b a + O(f(n = O(f(n. Die Summe wird vom Beitrag der Wurzel dominiert: die Kosten für den divide - und den combine -Schritt der Eingabe dominieren die Kosten sämtlicher rekursiver Aufrufe. (Algorithmen mit dieser Eigenschaft sind eher selten. Das Master-Theorem (Einfache Form Es gelte { g falls n = 1 (14 B(n a B(n/b + f(n, sonst, wobei b > 1 und a ganzzahlige Konstante sind. Dann gilt für n = b l : 1. Falls f(m = O(m α mit α < log b a, dann ist B(n = O(n log b a. 2. Falls f(m = O(m log b a, dann ist B(n = O(n log b a log n. c i 3. Falls f(m = Ω(m α mit α > log b a und f(m a c konstant, dann ist B(n = O(f(n. f(m, für c < 1 11

Das Master-Theorem kann auf beliebige n erweitert werden. Man nimmt dann an, dass f(n und B(n monoton wachsend sind, und dass man in der Voraussetzung anstelle von B(n/b einen Ausdruck B( n/b + d stehen hat, für eine Konstante d. Der Beweis ist nur technisch etwas aufwendiger, die Grundgedanken bleiben aber dieselben wie in unserem einfachen Fall. Weiterhin kann man analoge untere Schranken beweisen, wenn eine Rekurrenzungleichung nach unten gegeben ist, d. h. { g falls n = 1 (15 B(n a B(n/b + f(n, sonst, Die Beweise laufen völlig analog. (Eine volle Version dieser Beweise findet man im Buch von Cormen, Leiserson, Rivest und Stein. 1.4 Matrixmultiplikation nach Strassen Wir wollen zwei n n-matrizen über einem Körper (z. B. Q oder einem Ring (z. B. Z multiplizieren: A B = C. Wenn A = (a ij 1 i,j n und B = (b j,k 1 j,k n, so ist bekanntermaßen C = (c ik 1 i,k n mit (16 c ik = 1 j n a ij b jk, für 1 i,k n. Man sieht sofort, dass bei direkter Implementierung dieser Methode n 3 Multiplikationen und n 2 (n 1 Additionen anfallen. Es handelt sich um eine O(n 3 -Methode, was nicht ganz so schlimm ist wie es aussieht, da ja die Eingabe Umfang n 2 hat. Dennoch kann man sich fragen, ob man Matrizen mit weniger als kubisch vielen Operationen multiplizieren kann. Die etwas überraschende Antwort: dies ist möglich, wenn die Operation Subtraktion einsetzt, die bei der Definition des Matrixprodukts gar nicht vorkommt. Der Einfachheit halber nehmen wir an, dass n = 2 h für eine natürliche Zahl h ist. Wenn die Matrizen A und B weniger als n 0 Zeilen/Spalten haben, multiplizieren wir mit der naiven Formel (16. 12

Wenn die Zeilen/Spaltenzahl größer oder gleich n 0 ist, zerlegen wir die beiden Matrizen in 4 Quadranten, also in 4 Teilmatrizen mit Umfang (n/2 Zeilen und Spalten: (17 ( a b c d und ( A B C D. Wenn wir nun die Produktmatrix naiv aus 4 Teilen zusammensetzen: ( ( ( a b A B aa + bc ab + bd (18 =, c d C D ca + dc cb + dd so sind in der Rekursion 8 Teilprobleme der Größe n/2 zu lösen; wieder lässt sich relativ leicht feststellen, dass dies zu einem Gesamtaufwand von O(n 3 führt. Damit wird also kein Gewinn gegenüber der naiven Methode erzielt. Der Trick (von Strassen, 1969 ist der, eine Folge von Hilfsmatrizen zu definieren, aus denen man das Produkt zusammensetzen kann, wobei man mit 7 (statt 8 Multiplikationen kleinerer Matrizen auskommt. Hinzu kommen cn 2 Additionen/Subtraktionen. Strassen hatte einfache Formeln vorgeschlagen, die 18 Additionen von (n/2 (n/2-matrizen benötigt, siehe Folien. Die folgende Formel geht auf Shmuel Winograd zurück. Sie verringert die Zahl der Additionen auf 15. Es wird nicht verlangt, dass man selber darauf kommt oder sie auswendig weiß... Setze w = aa (a c d(a C + D; dann sieht die Matrix insgesamt so aus: (19 ( aa + bc w + (c + d(c A + (a + b c dd w + (a c(d C d(a B C + D w + (a c(d C + (c + d(c A Es ist kein großes Problem, durch Ausmultiplizieren zu verifizieren, dass dies tatsächlich die gewünschte Produktmatrix liefert. Die folgenden Definitionen erlauben es, die Einträge in (19 mit 7 Multipli- 13

kationen und 15 Additionen zu berechnen. f := aa g := bc h := f + g i := a c j := i d k := A C l := k + D m := j l = aa + bc = a c d = A C + D w := f m = aa (a c d(a C + D n := c + d o := k n = (c + d(c A p := j + b q := p D r := w o s := r + q t := D C = a + b c d u := i t = (a c(d C v := l B x := w + u y := x o z := x d v = A B C + D Für diese Berechnung werden 7 Multiplikationen und 15 Additionen von (n/2 (n/2-matrizen benötigt (letzteres entspricht 15n Elementaradditionen. Die Produktmatrix ist 4 dann: (20 ( a b c d ( A B C D = ( aa + bc ab + bd ca + dc cb + dd wie man durch sorgfältiges Nachrechnen verifiziert. = ( h s z y Für die Anzahl der Elementarmultiplikationen erhalten wir die Rekurrenzungleichung 14,

{ (21 M(n = 1 falls n = 1 7 M(n/2 falls n = 2 h > 1 Dies löst sich wie bei der Ganzzahl-Multiplikation leicht zu M(n = 7 h = 2 log 2 7 h = n log 2 7. Dabei ist 2,80 < log 2 7 < 2,81. Für die Anzahl der Elementaroperationen (Multiplikationen und Additionen ergibt sich { (22 T(n = 0 falls n = 1 7 T(n/2 + O(n 2, sonst. Wir wenden das Master-Theorem an. Hier ist a = 7, b = 2, und f(n = O(n 2 mit 2 < log 2 7. Daraus folgt (1. Fall im Master-Theorem: T(n = O(n log 2 7 = O(n 2,81. Bemerkung: Der asymptotisch schnellste bekannte Algorithmus zur Multiplikation von Matrizen ist der von Coppersmith und Winograd 2, der eine Laufzeitschranke von O(n 2.376 aufweist. Eine Laufzeit von n 2 kann nicht unterschritten werden, da jeder Algorithmus jede der 2n 2 Inputkomponenten ansehen muss. Manche Forscher vermuten, dass eine Laufzeit von O(n 2 log n erreicht werden kann, hiervon ist man aber noch weit entfernt. 2 Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic progressions. Journal of Symbolic Computation, 9:251 280, 1990. 15