Exponentiation durch das Quadrieren

Exponentiating durch das Quadrieren ist eine allgemeine Methode für die schnelle Berechnung von großen Mächten der ganzen Zahl einer Zahl. Einige Varianten werden allgemein square-multiply Algorithmen oder binären exponentiation genannt. In der zusätzlichen Notation ist der passende Begriff verdoppeln-und-hinzufügen. Diese können von ziemlich allgemeinem Nutzen sein: zum Beispiel in der Modularithmetik oder dem Antreiben von matrices.

Das Unterliegen Idee

Mit der folgenden Beobachtung kann man einen rekursiven Algorithmus schaffen, der x für eine ganze Zahl n das Verwenden des Quadrierens und der Multiplikation schätzt:

x^n =

\begin {Fälle }\

1, & \mbox {wenn} n = 0 \\

\frac {1} {x} ^ {-n}, & \mbox {wenn} n

Eine kurze Analyse zeigt, dass solch ein Algorithmus logn squarings und bei den meisten logn Multiplikationen verwendet. Für n> ungefähr 4 ist das rechenbetont effizienter als das naive Multiplizieren der Basis mit sich wiederholt.

2-ary Methode

Dieser Algorithmus berechnet den Wert von x nach der Erweiterung der Hochzahl in der Basis 2. Es wurde zuerst von Brauer 1939 vorgeschlagen. Im Algorithmus unten machen wir von der folgenden Funktion f (0) = (k, 0) und f (m) = (s, u) wo M = u Gebrauch · 2

mit dem seltsamen u.

Algorithmus:

Eingang: Ein Element x G, ein Parameter k> 0, eine natürliche Zahl n = (n, n..., n) und die vorgeschätzten Werte x, x....

Produktion: Das Element x in G

1. y: = 1 und ich: = l-1

2. Während i> =0 tun

3. (s, u): = f (n)

4. für j: = 1 zu k-s tun

5. y: = y

6. y: = y*x

7. für j: = 1 zu s tun

8. y: = y

9. ich: = i-1

10. geben Sie y zurück

Für die optimale Leistungsfähigkeit sollte k die kleinste ganze Zahl sein, die befriedigt

Das Schieben der Fenstermethode

Diese Methode ist eine effiziente Variante der 2-ary Methode. Zum Beispiel, um die Hochzahl 398 zu berechnen, der Binärentwicklung (110 001 110) hat, nehmen wir ein Fenster der Länge das 3 Verwenden des 2-ary Methode-Algorithmus, den wir 1, x, x, x, x, x, x, x, x, x, x, x. berechnen

Aber wir können auch 1, x, x, x, x, x, x, x, x, rechnen

x, der eine Multiplikation spart und sich auf das Auswerten (110 001 110) n beläuft

Hier ist der allgemeine Algorithmus:

Algorithmus:

Input:An Element 'x' 'G', eine nicht negative ganze Zahl n = (n, n..., n), ein Parameter k> 0 und die vorgeschätzten Werte x, x....

Produktion: Das Element x in GAlgorithmus:

1. y: = 1 und ich: = l-1

2. während i>-1 tun

3. wenn n=0 dann y: = y und ich: = i-1

4. sonst

5. s: = max {i-k+1,0 }\

6. während n=0 s tun: = s+1

7. für h: = 1, um i-s+1 y zu tun: = y

8. u: = (n, n...., n)

9. y: = y*x

10. ich: = s-1

11. geben Sie y zurück

Zeichen:

  1. In der Linie 6 findet die Schleife die längste Schnur der Länge weniger als oder gleich 'k', der in einem nicht Nullwert endet. Auch nicht alle sonderbaren Mächte 2 bis zum Bedürfnis geschätzt werden und müssen nur diejenigen, die spezifisch an der Berechnung beteiligt sind, betrachtet werden.

Die Leiter-Technik von Montgomery

Viele Algorithmen für exponentiation stellen Verteidigung gegen Seitenkanal-Angriffe nicht zur Verfügung. Nämlich kann ein Angreifer, der die Folge von squarings und Multiplikationen beobachtet, die an der Berechnung beteiligte Hochzahl (teilweise) wieder erlangen. Das ist ein Problem, wenn die Hochzahl heimlich, als mit vielen öffentlicher Schlüssel cryptosystems bleiben sollte. Eine Technik hat die Leiter-Adressen von Montgomery diese Sorge genannt.

In Anbetracht der Binärentwicklung einer positiven ganzen Nichtnullzahl n = (n... n) mit n=1 können wir x wie folgt schätzen:

x=x; x=x

für i=k-2 zu 0 tun

Wenn n=0 dann

x=x*x; x=x

sonst

x=x*x; x=x

geben Sie x zurück

Der Algorithmus führt eine feste Folge von Operationen (bis zum Klotz n) durch: Eine Multiplikation und Quadrieren finden für jedes Bit in der Hochzahl unabhängig vom spezifischen Wert des Bit statt.

Feste Grundhochzahl

Es gibt mehrere Methoden, die verwendet werden können, um x zu berechnen, wenn die Basis befestigt wird und sich die Hochzahl ändert. Wie man sehen kann, spielt Vorberechnung eine Schlüsselrolle in diesen Algorithmen.

Die Methode von Yao

Die Methode von Yao ist zur 2-ary Methode orthogonal, wo die Hochzahl in der Basis b=2 ausgebreitet wird und die Berechnung als im Algorithmus oben durchgeführt wird. Lassen Sie "n", "n", "b" und "b" ganze Zahlen sein.

Lassen Sie die Hochzahl "n" als geschrieben werden

: wo

Lassen Sie x = x. Dann verwendet der Algorithmus die Gleichheit

:

In Anbetracht des Elements hat 'x' G und der Hochzahl 'n' geschrieben in der obengenannten Form, zusammen mit dem pre Werte x.... x geschätzt das Element wird x mit dem Algorithmus unter berechnet

  1. y=1, u=1 und j=h-1
  2. während j> 0 tun
  3. weil i=0 zu l-1 tun
  4. wenn n=j dann u=u*x
  5. y=y*u
  6. j=j-1
  7. geben Sie y zurück

Wenn wir h=2 und b = h dann setzen, sind die n 's einfach die Ziffern von n in der Basis h. Die Methode von Yao sammelt in u zuerst jene x, die zur höchsten Macht h-1 erscheinen; in der nächsten Runde werden diejenigen mit der Macht h-2 in u ebenso usw. gesammelt. Die Variable y wird h-1 Zeiten mit der Initiale u, h-2 Zeiten mit den folgenden höchsten Mächten usw. multipliziert.

Der Algorithmus-Gebrauch l+h-2 müssen Multiplikationen und l+1 Elemente versorgt werden, um zu rechnen, x (sehen).

Euklidische Methode

Die Euklidische Methode wurde zuerst in 'Effizientem exponentiation das Verwenden der Vorberechnung und Vektor-Hinzufügungsketten' durch P.D Rooij eingeführt. Der Algorithmus schätzt unten x das Verwenden der folgenden Gleichheit rekursiv

:

wo q=

In Anbetracht des Elements hat x in G und der Hochzahl 'n' schriftlich als in der Methode von Yao mit dem pre Werte x.... x geschätzt das Element wird x mit dem Algorithmus unter berechnet

  1. tun Sie während wahr
,
  1. Finden Sie solche M dass n  n für alles ich in [0, l-1]
  2. Finden Sie N  solche M dass n  n für alles ich in [0, l-1], ich  M
  3. wenn n  0 dann
  4. q = (n/n), x=x · x und n=n mod n
  5. sonst Brechung
  6. geben Sie x zurück

Der Algorithmus findet zuerst den größten Wert unter dem n und dann dem Supremum innerhalb des Satzes {n: ich  M\. Es erhebt x zur Macht q, multipliziert diesen Wert mit x, und teilt dann x das Ergebnis dieser Berechnung und n der Wert n modulo n zu.

Weitere Anwendungen

Dieselbe Idee erlaubt schnelle Berechnung von großen Hochzahlen modulo eine Zahl. Besonders in der Geheimschrift ist es nützlich, Mächte in einem Ring von ganzen Zahlen modulo q zu schätzen. Es kann auch verwendet werden, um Mächte der ganzen Zahl in einer Gruppe, mit der Regel zu schätzen

:Power (x, n) = (Macht (x, n)).

Die Methode arbeitet in jeder Halbgruppe und wird häufig verwendet, um Mächte von matrices, zu schätzen

Zum Beispiel, die Einschätzung von

:13789 (mod 2345)

würde sehr und viel Abstellraum viel Zeit in Anspruch nehmen, wenn die naive Methode verwendet würde: Rechnen Sie 13789 dann nehmen den Rest, wenn geteilt, durch 2345. Sogar das Verwenden einer wirksameren Methode wird viel Zeit in Anspruch nehmen: Quadratische 13789, nehmen Sie den Rest, wenn geteilt, durch 2345, multiplizieren Sie das Ergebnis mit 13789, und so weiter. Das wird 722340 Modulmultiplikationen nehmen. Der square-multiply Algorithmus basiert auf der Beobachtung dass 13789 = 13789 (13789). Also, wenn wir 13789 rechnen würden, dann würde die volle Berechnung nur 361170 Modulmultiplikationen nehmen. Das ist ein Gewinn eines Faktors zwei. Aber da das neue Problem desselben Typs ist, können wir dieselbe Beobachtung wieder anwenden, noch einmal ungefähr die Größe halbierend.

Die wiederholte Anwendung dieses Algorithmus ist zum Zerlegen der Hochzahl (durch eine Grundkonvertierung zur Dualzahl) in eine Folge von Quadraten und Produkten gleichwertig: zum Beispiel

:x = x

: = x

: = x · x · x · x

: = x · x · 1 · x

: = x · x · x

: = (x) · (x) · x

: = (x · x) · x

: = ((x) · x) · x

: = ((x · x)) · x  Algorithmus braucht nur 5 Multiplikationen statt 12 (131)

Noch einige Beispiele:

  • x = ((x) · x) weil 10 = (1,010) = 2+2, Algorithmus braucht 4 Multiplikationen statt 9
  • x = (((((x · x))) · x)) weil 100 = (1,100,100) = 2+2+2, Algorithmus braucht 8 Multiplikationen statt 99
  • x = ((((((((x · x) · x) · x) · x)) · x))), weil 10 = (1,111,101,000) Algorithmus 14 Multiplikationen statt 999 braucht
  • Bearbeitetes Beispiel (mit modulo) für den RSA Algorithmus.

Beispiel-Durchführungen

Berechnung durch Mächte 2

Das ist eine nichtrekursive Durchführung des obengenannten Algorithmus in Ruby.

Auf am statischsten getippten Sprachen, muss durch den Code ersetzt werden, der eine Identitätsmatrix derselben Größe zuteilt betreffs, eine Matrix exponentiating Algorithmus zu bekommen. Im Rubin, dank des Zwangs, wird zum passenden Typ, so diese Funktion Arbeiten mit matrices sowie mit ganzen Zahlen und Hin- und Herbewegungen automatisch befördert. Bemerken Sie, dass n=n1 überflüssig ist, wenn n=n/2 implizit Runden zur Null, wie Sprachen der niedrigeren Ebene tun würden.

n [0] ist das niedrigstwertige Bit der binären Darstellung von n so, wenn es 1 ist, ist die Zahl seltsam, wenn es Null ist, ist die Zahl gleich.

Def-Macht (x, n)

resultieren Sie = 1

während n.nonzero?

wenn n [0].nonzero?

resultieren Sie * = x

n - = 1

Ende

x * = x

n/= 2

Ende

geben Sie Ergebnis zurück

Ende</Quelle>

Laufzeitbeispiel: Rechnen Sie 3

Parameter x = 3

Parameter n = 10

Ergebnis: = 1

Wiederholung 1

n = 10 -&gt; n ist sogar

x: = x = 3 = 9

n: = n / 2 = 5

Wiederholung 2

n = 5 -&gt; n ist sonderbarer

-&gt; Ergebnis: = resultieren * x = 1 * x = 1 * 3 = 9

n: = n - 1 = 4

x: = x = 9 = 3 = 81

n: = n / 2 = 2

Wiederholung 3

n = 2 -&gt; n ist sogar

x: = x = 81 = 3 = 6561

n: = n / 2 = 1

Wiederholung 4

n = 1 -&gt; n ist sonderbarer

-&gt; Ergebnis: = resultieren * x = 3 * 3 = 3 = 9 * 6561 = 59049

n: = n - 1 = 0

geben Sie Ergebnis zurück

Laufzeitbeispiel: Rechnen Sie 3

Ergebnis: = 3

Behälter: = "1010"

Wiederholung für die Ziffer 2:

Ergebnis: = resultieren = 3 = 9

1010 - Ziffer ist "0" gleich

Wiederholung für die Ziffer 3:

Ergebnis: = resultieren = (3) = 3 = 81

1010 - Ziffer ist "1" --&gt gleich; Ergebnis: = result*3 = (3) *3 = 3 = 243

Wiederholung für die Ziffer 4:

Ergebnis: = resultieren = ((3) *3) = 3 = 59049

1010 - Ziffer ist "0" gleich geben Sie Ergebnis zurück

JavaScript-Demonstration:

http://home.mnet-online.de/wzwz.de/temp/ebs/en.htm

Berechnung von Produkten von Mächten

Exponentiation durch das Quadrieren kann auch verwendet werden, um das Produkt von 2 oder mehr Mächten zu berechnen.

Wenn die zu Grunde liegende Gruppe oder Halbgruppe dann auswechselbar sind, ist es häufig möglich, den zu reduzieren

Zahl der Multiplikation durch die Computerwissenschaft des Produktes gleichzeitig.

Beispiel

Die Formel a×b kann innerhalb von 3 Schritten berechnet werden:

: ((a) a) (vier Multiplikationen, für zu rechnen)

,

: ((b)) b (drei Multiplikationen, um b zu berechnen)

,

: (a) (b) (eine Multiplikation, um das Produkt der zwei zu berechnen)

,

so bekommt man acht Multiplikationen insgesamt.

Eine schnellere Lösung ist, beide Mächte gleichzeitig zu berechnen:

: ((ab) a) ab

der nur 6 Multiplikationen insgesamt braucht. Bemerken Sie, dass a×b zweimal berechnet wird, konnte das Ergebnis nach der ersten Berechnung versorgt werden, die die Zählung der Multiplikation zu 5 reduziert.

Beispiel mit Zahlen:

:2×3 = ((2×3) ×2) ×2×3 = (6×2) ×6 = 72×6 = 31,104

Das Rechnen der Mächte gleichzeitig, anstatt sie zu berechnen, reduziert getrennt immer den

die Zählung von Multiplikationen, wenn mindestens zwei der Hochzahlen größer sind als 1.

Das Verwenden der Transformation

Das Beispiel über a×b kann auch mit nur 5 berechnet werden

Multiplikationen, wenn der Ausdruck vor der Berechnung umgestaltet wird:

a×b = a× (ab) mit ab: = a×b

</dl>

Die Generalisation der Transformation zeigt das folgende Schema:

Um a×b× zu berechnen... ×m×n

1.: Definieren Sie ab: = a×b, Alphabet = ab×c...

2.: Berechnen Sie den umgestalteten Ausdruck a×ab×... ×abc.. m×abc.. mn

Die Transformation vor der Berechnung reduziert häufig die Zählung von Multiplikationen

aber in einigen Fällen vergrößert es auch die Zählung (sieh das letzte der Beispiele unten),

so kann es eine gute Idee sein, die Zählung von Multiplikationen vor dem Verwenden des umgestalteten Ausdrucks für die Berechnung zu überprüfen.

Beispiele

Für die folgenden Ausdrücke wird um die Zählung von Multiplikationen gezeigt, jede Macht getrennt, zu berechnen

das Rechnen von ihnen gleichzeitig ohne Transformation und das Rechnen von ihnen gleichzeitig nach der Transformation.

Beispiel: a×b×c

getrennt: [((a) a)] [((b)) b] [(c) c] (11 Multiplikationen)

gleichzeitig: ((ab) ac) Alphabet (8 Multiplikationen)

Transformation: a: = 2 ab: = ab Alphabet: = Alphabet (2 Multiplikationen)

Berechnung danach: (aababc) Alphabet (4 Multiplikationen  6 insgesamt)

Beispiel: a×b×c

getrennt: [((a))] [((b)) b] [(c) c] (10 Multiplikationen)

gleichzeitig: ((ab) c) Alphabet (7 Multiplikationen)

Transformation: a: = 2 ab: = ab Alphabet: = Alphabet (2 Multiplikationen)

Berechnung danach: (ababc) Alphabet (3 Multiplikationen  5 insgesamt)

Beispiel: a×b×c

getrennt: [((a) a)] [((b))] [c] (8 Multiplikationen)

gleichzeitig: ((ab) a) ac (6 Multiplikationen)

Transformation: a: = 2 ab: = ab Alphabet: = Alphabet (2 Multiplikationen)

Berechnung danach: (aab) aababc (5 Multiplikationen  7 insgesamt)

Das unterzeichnete stellige Wiedercodieren

In der bestimmten Berechnung kann es effizienter sein, negative Koeffizienten zu erlauben und folglich das Gegenteil der Basis zu verwenden, vorausgesetzt dass die Inversion in G 'schnell' ist oder vorgeschätzt worden ist. Zum Beispiel, wenn die Computerwissenschaft x die binäre Methode k1 Multiplikationen und k1 squarings verlangt. Jedoch konnte man k squarings durchführen, um x zu bekommen und dann durch x zu multiplizieren, um x zu erhalten.

Zu diesem Ende definieren wir die unterzeichnete stellige Darstellung einer ganzen Zahl in der Basis als

:

'Unterzeichnete Binäre Darstellung' entspricht der besonderen Wahl und. Es wird dadurch angezeigt. Es gibt mehrere Methoden, um diese Darstellung zu schätzen. Die Darstellung ist nicht einzigartig, nehmen Sie zum Beispiel. Zwei verschiedene haben unterzeichnet - durch binäre Darstellungen wird gegeben und, wo verwendet wird, um anzuzeigen. Da die binäre Methode eine Multiplikation für jeden Nichtnullzugang in der Basis 2 Darstellung dessen schätzt, interessieren wir uns für die Entdeckung des unterzeichneten - binäre Darstellung mit der kleinsten Zahl von Nichtnulleinträgen, d. h. demjenigen mit dem minimalen Gewicht von Hamming. Eine Methode, das zu tun, ist, die Darstellung in der nichtangrenzenden Form oder NAF für den kurzen zu schätzen, der derjenige ist, der befriedigt und angezeigt dadurch. Zum Beispiel ist die NAF Darstellung 478 dem gleich. Diese Darstellung hat immer minimales Gewicht von Hamming. Ein einfacher Algorithmus, um die NAF Darstellung einer gegebenen ganzen Zahl damit zu schätzen, ist der folgende:

  1. weil man tut
  2. geben Sie zurück

Ein anderer Algorithmus durch Koyama und Tsuruoka verlangt die Bedingung das nicht; es minimiert noch das Gewicht von Hamming.

Alternativen und Generalisationen

Exponentiation durch das Quadrieren kann als eine suboptimale Hinzufügungskette exponentiation Algorithmus angesehen werden: Es schätzt die Hochzahl über eine Hinzufügungskette, die aus der wiederholten Hochzahl doublings (squarings) besteht und/oder Hochzahlen durch eine (das Multiplizieren mit x) nur erhöht. Mehr allgemein, wenn man irgendwelchen vorher geschätzten Hochzahlen erlaubt, summiert zu werden (durch das Multiplizieren jener Mächte von x), kann man manchmal den exponentiation durchführen, der weniger Multiplikationen verwendet (aber normalerweise mehr Gedächtnis verwendet). Die kleinste Macht, wo das vorkommt, ist für n=15:

: (Quadrieren, 6 multipliziert)

: (optimale Hinzufügungskette, 5 multipliziert, wenn x wiederverwendet wird)

Im Allgemeinen ist die Entdeckung der optimalen Hinzufügungskette für eine gegebene Hochzahl ein hartes Problem, für das keine effizienten Algorithmen bekannt sind, so werden optimale Ketten normalerweise nur für kleine Hochzahlen verwendet (z.B in Bearbeitern, wo die Ketten für kleine Mächte vortabellarisiert worden sind). Jedoch gibt es mehrere heuristische Algorithmen, die, nicht optimal seiend, weniger Multiplikationen haben als exponentiation durch das Quadrieren auf Kosten der zusätzlichen Buchhaltungsarbeit und des Speichergebrauchs. Trotzdem wächst die Zahl von Multiplikationen nie langsamer als &Theta; (loggen Sie n), so verbessern sich diese Algorithmen nur asymptotisch auf exponentiation durch das Quadrieren durch einen unveränderlichen Faktor an am besten.

Siehe auch

  • Modularer exponentiation
  • Vektorhinzufügungskette
  • Die Verminderung von Montgomery
  • Nichtangrenzende Form
  • Hinzufügungskette

Referenzen


Wirkung von ELIZA / Exon
Impressum & Datenschutz