Ein   schneller   Quadrierungs - Algorithmus:      dezimale Version

Übersicht

Hier wird die dezimale Version des Panflöten-Algorithmus vorgestellt, der die Quadrierung einer Zahl mit dem halben Aufwand leistet wie die Multiplikation von zwei gleich langen Zahlen.

Dezimal ist die Linker-Rest-Version des Algorithmus besser (Gründe unten), nur sie wird hier gezeigt.

Es wird empfohlen, zuerst den Hauptartikel mit dem binären Algorithmus zu lesen, wo der (einfache) Rechenvorgang genau erklärt ist.    Dort gibt's auch die theoretische Herleitung und weitere Themen.





Der Algorithmus dezimal     (kurze Version)

Ein Beispiel:   quadriere   5629:


                   5 6 2 9               Spreize die Zahl (kein Summand!)
                  --------
                    5058                 Summand 562*9    doppelt addieren!
                   112                   Summand 56*2     doppelt addieren!
                  30                     Summand 5*6      doppelt addieren!

                25360481                 Gespreizte Zahl, Ziffern quadriert
                --------
                31685641                 Summe obere 4 Zeilen = Ergebnis

Das Spreizen der Zahl (oberste Zeile) ist nur informatorisch (im Ggs. zum binären Algorithmus), aufsummiert wird die gespreizte Zeile mit quadrierten Ziffern (vorletzte Zeile). Binär sind beide Ausdrücke gleich, deshalb konnte man dort gleich die oberste Zeile summieren.

Beim dezimalen Rechnen ist manches komplizierter, egal bei welchem Algorithmus.
Beim Quadrierungs-Algorithmus sieht das so aus:


- Die Teilstrings der Zahl sind mit der Ziffer rechts zu multiplizieren
  (ähnlich wie beim üblichen dezimalen Multiplikations-Algorithmus)
  Regel:   Falls eine Ziffer ≠ 0,   multipliziere damit den Ziffernstring links von ihr
                und schreibe ihn rechtsbündig unter die linke Nachbarziffer


- Die Ziffernstrings sind nochmal mit 2 zu multiplizieren.
  Bei der kurzen Version des Algorithmus geschieht das, indem man diese Strings zweimal addiert
  (Binär wurde die Multiplikation mit 2 durch Verschieben der Ziffenstrings um 1 nach links erledigt)


- Beim Spreizen der Zahl sind die einzelnen Ziffern zu quadrieren.
  Dabei ergeben sich meist 2-stellige Werte. Man schreibt immer ein Ziffernpaar, ggf. mit führender 0






Der Algorithmus dezimal     (lange Version)

Ein Beispiel:   quadriere   5629:


                   5 6 2 9               Spreize die Zahl (kein Summand!)
                  --------
                    5058                 Summand 562*9
                   112                   Summand 56*2
                  30                     Summand 5*6
                  --------
                  316258                 Summe

                  632516                 2*Summe
                25360481                 Gespreizte Zahl, Ziffern quadriert
                --------
                31685641                 Summe obere 2 Zeilen = Ergebnis

Der einzige Unterschied zur kurzen Version liegt bei der Verdopplung der (bereits mit einer Ziffer multiplizierten) Ziffernstrings. Jetzt werden zunächst alle Ziffernstrings addiert, ihre Summe mit 2 multipliziert und das Ergebnis zur gespreizten Zahl mit quadrierten Ziffern addiert







Vergleich:   Linker-Rest-Version   und   Rechter-Rest-Version

Der dezimale Linker-Rest-Algorithmus hat gegenüber dem (hier nicht gezeigten) dezimalen Rechter-Rest-Algorithmus folgende Vorteile:

- man schreibt die Teilstrings wie beim Multiplizieren üblich v.r.n.l.

- ein Teilstring beginnt rechts immer an einer festen Stelle, auch wenn
  er durch die Multiplikation mit einer Ziffer links um 1 Ziffer länger wird

Deshalb ist dezimal der Linker-Rest-Algorithmus ergonomischer. Aber binär ist m.E. der Rechter-Rest-Algorithmus etwas eingängiger (übliche Schreibrichtung nach rechts) und verbal leichter formulierbar, und die Vereinfachung bei Eineserblocks ist etwas eleganter


Bei allen Algorithmen kann man auch die komprimierte Schreibweise anwenden








Aufwand

Bei einer Quadrierung mit dem üblichen Multiplikations-Algorithmus müssen bei einer Zahl N mit n Ziffern maximal n2 Ziffern addiert und (außer im Binärsystem) vorher diese n2 Ziffern mit einer Ziffer multipliziert werden (jeweils mit Behandlung der Überträge)

Beim hier gezeigten Quadrierungs-Algorithmus ist der Aufwand kleiner, aber je nach Version verschieden:


Binär:
Beim binären Quadrierungs-Algorithmus ist der Aufwand nur halb so groß
(bei Zahlen mit Einserblocks noch viel kleiner)



Dezimale Langversion:
Es müssen die Teilstrings addiert werden (maximal n-1 Zahlen mit durchschnittlich (n-1)/2 Ziffern) sowie die Summe der Strings (ca. 2n Ziffern) und die gespreizte Zahl (max. 2n Ziffern), zusammen also max. (n-1)2/2 + 4n Ziffern, also ( n2 - 2n +1 + 8n ) /2   ~   n2/2 + 3n Ziffern
Diese Ziffern mußten praktisch alle vorher mit 1 Ziffer multipliziert werden (bei der gespreizten Zahl nur n statt 2n Ziffern)

Der Aufwand gegenüber dem üblichen Multiplikations-Algorithmus nimmt also mit der Ziffernzahl ab. Der Unterschied beträgt bei   10 Ziffern 80 : 100 (80%)   ,   bei 100 Ziffern 5300 : 10000 (53%)

Der Algorithmus ist aber geringfügig komplizierter (Summe *2, Spreizen der Zahl)



Dezimale Kurzversion: Es müssen die Teilstrings addiert werden (maximal n-1 Zahlen mit durchschnittlich (n-1)/2 Ziffern), und zwar zweimal, sowie die gespreizte Zahl (max. 2n Ziffern), zusammen also max. (n-1)2 + 2n Ziffern, also n2 - 2n + 1 + 2n = n2 + 1 Ziffern
Davon mußten vorher (n-1)2/2 + n Ziffern mit 1 Ziffer multipliziert werden.

Im Vergleich zum üblichen Multiplikations-Algorithmus müssen also genauso viele Ziffern addiert, aber nur gut halb so viele, nämlich (n-1)2/2 + n statt n2 Ziffern mit 1 Ziffer multipliziert werden.
Gewichtet man Addition und Multiplikation von Ziffern gleich dann liegt der Aufwand bei über 75% (gering abhängig von der Ziffernzahl). Gewichtet man die Multiplikation stärker (schwieriger, höhere Überträge), ist er entsprechend geringer



Wertung:
Der dezimale Algorithmus ist nur für das Rechnen "von Hand" interessant - Computer rechnen binär. Deshalb ist die einfachere Kurzversion des Quadrierungs-Algorithmus vorzuziehen, die bei Zahlen bis 10 und mehr Ziffern genauso schnell ist wie die Langversion. Letztere erreicht aber bei hoher Stellenzahl (z.B. 100) die Geschwindigkeit des binären Algorithmus ohne Vereinfachung bei Einserblocks



Homepage  Leonhard Heinzmann                          veröffentlicht:  25. 3. 2013                   Stand:  22. 5. 2013