Multiplizieren kann mensch seit mindestens 4000 Jahren, wie babylonische Multiplikationstabellen belegen. Aber erst jetzt wurde der schnellstmögliche Algorithmus zur Multiplikation zweier Zahlen gefunden, in einer letzte Woche auf dem französischen Preprintserver HAL angelegten Arbeit „Integer multiplication in time O(n logn)“.
Zur Vorgeschichte: 1971 hatten Arnold Schönhage und Volker Strassen vermutet, dass es für die Multiplikation zweier n-stelliger Zahlen einen Algorithmus mit O(n logn) Rechenoperationen geben sollte und dass dies bestmöglich ist. (Die O-Notation bedeutet, dass die Anzahl der Operationen höchstens Cnlogn ist für eine Konstante C.) In ihrer Arbeit „Schnelle Multiplikation großer Zahlen“ fanden sie immerhin einen Algorithmus mit O(n logn log(logn)) Schritten, was bis 2007 der unverbesserte Rekord blieb. (Der in der Schule verwendete Algorithmus braucht übrigens O(n2) Schritte.)
Die Idee von Schönhage und Strassen war, die Multiplikation ganzer Zahlen auf die Multiplikation von Polynomen zurückzuführen. Für die Multiplikation ganzzahliger Polynome gibt es Algorithmen, die auf schneller Fourier-Transformation beruhen. (Erläuterungen und Beispiele findet man hier.) Wenn man also n-stellige Zahlen in Stücke der Größe log(n) aufspaltet, kann man sie als Polynome vom Grad O(n/logn) kodieren und dann Algorithmen zur Polynommultiplikation anwenden. Die neue Arbeit von Harvey und v.d.Hoefen findet nun die (vermutlich) bestmögliche Kodierung ganzer Zahlen durch Polynome (in mehreren Variablen – der Punkt ist, dass spezielle Quotienten eines Polynomrings in mehreren Variablen besonders schnelle Multiplikationsalgorithmen haben) und damit den (vermutlich) schnellstmöglichen Multiplikationsalgorithmus. (Die Vermutung, dass es keinen Algorithmus in weniger als O(n logn) Schritten geben kann, ist allerdings noch unbewiesen.)
David Harvey, Joris van der Hoeven: Integer multiplication in time O(n logn)
Kommentare (22)