Gyors hatványozási algoritmusok

A gyors hatványozási algoritmusok ( dichotóm hatványozási algoritmus, bináris hatványozási algoritmus) olyan algoritmusok , amelyeket arra terveztek, hogy egy számot természetes hatványra emeljenek a fok meghatározásához szükségesnél kevesebb szorzásban [1] . Az algoritmusok azon a tényen alapulnak, hogy egy szám hatványra emeléséhez nem szükséges a számot egyszer megszorozni önmagával , hanem meg lehet szorozni a már kiszámított hatványokat. Különösen, ha kettő hatványa, akkor hatványra emeléshez elegendő a számszorok négyzetre emelése, miközben szorzásokat költünk helyette . Például egy szám nyolcadik hatványra emeléséhez hét szorzás elvégzése helyett négyzetezheti a számot ( ), majd ismét négyzetre emelheti az eredményt, hogy megkapja a negyedik hatványt ( ), végül ismét négyzetre emelje az eredményt, és megkapja a választ ( ).

Ezen túlmenően egyes további optimalizálás algoritmusok azt a tényt használják fel, hogy a négyzetesítési művelet gyorsabb, mint a szorzás, mivel a faktor számjegyei négyzetre emeléskor ismétlődnek [2] .

A bináris hatványozási algoritmust először a 15. században Al-Kashi perzsa matematikus javasolta [3] .

Ezek az algoritmusok nem mindig optimálisak. Például a balról jobbra haladó séma használatakor n = 15 gyors hatványozása három szorzást és három négyzetesítési műveletet igényel, bár a 15. hatványra emelés 3 szorzással és 2 négyzetesítéssel is végrehajtható [4] . Az optimális hatványozás a legrövidebb adaléklánc felépítésének felel meg .

Leírás

A gyors hatványozás fő algoritmusa a „balról jobbra” séma. Nevét onnan kapta, hogy a kitevő bitjeit balról jobbra, azaz magasról alacsonyra nézzük [5] .

Hadd

 az n fok bináris reprezentációja , azaz

ahol . Akkor

[5] .

A séma használatakor a műveletek sorrendje a következőképpen írható le:

  1. Az n kitevőt bináris formában ábrázolja
  2. Ha = 1, akkor az aktuális eredményt négyzetre emeljük, majd megszorozzuk x-szel. Ha = 0, akkor az aktuális eredményt egyszerűen négyzetre emeljük [6] . Az i index k -1-ről 0 -ra változik [7] .

Így a gyors hatványozási algoritmus a Horner-séma [6] multiplikatív analógjává redukálódik :

Általánosítások

Legyen az ( S , *) pár félcsoport , akkor a * műveletet hívhatjuk szorzásnak és definiálhatjuk a természetes hatványra emelés műveletét:

Ezután egy n értékének kiszámításához bármely félcsoportban ( különösen egy Abel-csoportban ) használhatunk algoritmusokat a gyors hatványozáshoz [8] .

Példák problémamegoldásra

Az algoritmus alkalmazásával 21 13 kiszámítjuk :

Jobbról balra haladó séma

Ebben a sémában a "balról jobbra" sémától eltérően a kitevő bitjeit a legalacsonyabbtól a legmagasabbig tekintjük [5] .

A műveletek sorrendje ennek az algoritmusnak a megvalósításában.

  1. Fejezd ki az n kitevőt binárisan!
  2. Állítsa a z segédváltozót egyenlőnek az x számmal.
    1. Ha , akkor az aktuális eredményt megszorozzuk z -vel , és magát a z számot négyzetre emeljük. Ha = 0, akkor csak z négyzetre kell emelni [6] . Ebben az esetben az i index a balról jobbra haladó sémától eltérően 0 és k -1 között változik [7] .

Ez az áramkör annyi szorzást és négyzetesítést tartalmaz, mint a "balról jobbra" áramkör. Ennek ellenére azonban a balról jobbra haladó séma jövedelmezőbb, mint a jobbról balra haladó séma, különösen, ha a kitevő sok egységet tartalmaz. A lényeg az, hogy a sémában balról jobbra az eredmény = eredmény · x egy x konstans szorzót tartalmaz . És kis x esetén (ami gyakran előfordul az elsődlegességi tesztekben) a szorzás gyors lesz. Például x = 2 esetén a szorzási műveletet helyettesíthetjük az összeadás művelettel [7] .

Az algoritmus működésének matematikai indoklása a következő képlettel ábrázolható:

[9] .

Példa . Számítsuk ki a 21 13 értéket a jobbról balra haladó hatványozási séma segítségével .

én 0 egy 2 3
21 441 194 481 37 822 859 361
egy 0 egy egy
  1. 21 194 481 = 4084 101
  2. 4084 101 37 822 859 361 = 154 472 377 739 119 461

Számítási összetettség

Mind a balról jobbra, mind a jobbról balra sémában a négyzetre emelési műveletek száma azonos és egyenlő k-val, ahol k az n  kitevő hossza bitekben, . A szükséges szorzási műveletek száma megegyezik a Hamming -súllyal, vagyis az n szám bináris reprezentációjában szereplő nem nulla elemek számával . Átlagosan szorzási műveletekre van szükség [6] .

Például egy szám századik hatványra emeléséhez ehhez az algoritmushoz mindössze 8 szorzási és négyzetes műveletre lesz szükség [5] .

Összehasonlításképpen a szabványos hatványozási módszerrel szorzási művelet szükséges, vagyis a műveletek száma [10] -re becsülhető .

Algoritmus optimalizálás

Általában a négyzetesítési művelet gyorsabb, mint a szorzás. Az ablak módszer lehetővé teszi a szorzási műveletek számának csökkentését, és ezáltal a hatványozási algoritmus optimálisabbá tételét [8] .

Az ablak tulajdonképpen a számrendszer alapja [7] . Legyen w  az ablak szélessége, azaz a mutató w karakterét veszik figyelembe egyszerre.

Fontolja meg az ablak módszerét.

  1. Az előre kiszámított x i -hez
  2. A kitevő a következő formában jelenik meg: , ahol
  3. Legyen y  az a változó, amelyben a végeredményt kiszámítjuk. Hadd .
  4. Minden i = k/w  - 1, k/w  - 2, ..., 0 esetén tegye a következőket:
    1. [8] .

Ez az algoritmus k négyzetesítést igényel, de a szorzások száma átlagosan k/w -ra csökken [8] .

Még hatékonyabb a tolóablak módszer. Ez abban rejlik, hogy az ablak szélessége a folyamat végrehajtása során változhat:

  1. A kitevőt a következőképpen ábrázoljuk: , ahol , és e i+1  — e i ≥ w .
  2. x -re i számítódik ki . A továbbiakban x i -t x i -ként jelöljük .
  3. Legyen y  az a változó, amelyben a végeredményt kiszámítjuk. Hadd .
  4. Minden i = l  - 1, l  - 2, ..., 0 esetén tegye a következőket:
    1. Minden j-re 0-tól e -ig i+1  - e i  - 1 y négyzet
  5. Minden j -re 0-tól  e - ig 0-1 y négyzet [8] .

A hatványozási műveletek száma ebben az algoritmusban megegyezik az ablakos módszerrel, de a szorzási műveletek száma l -re , azaz átlagosra csökkent [8] .

Például emeljük az x számot 215 hatványára a csúszóablak módszerrel Az ablak szélessége w = 3.

  1. 215 = 27 + 5 24 + 7
  2. y=1
  3. y = y x = x
  4. y 3-szoros négyzet, mivel ebben a lépésben e 2  - e 1 -1 \u003d 7 - 4 - 1 \u003d 2, és a visszaszámlálás nullától történik, azaz y \u003d y 8 \u003d x 8
  5. y \u003d y x 5 \u003d x 13
  6. y négyszeres négyzet, mivel ebben a lépésben e 1  - e 0 -1 \u003d 4 - 0 - 1 \u003d 3, azaz y \u003d y 16 \u003d x 208
  7. y \u003d y x 7 \u003d x 215

Alkalmazás

A gyors hatványozási algoritmus széles körben elterjedt a nyilvános kulcsú kriptorendszerekben . Az algoritmust különösen az RSA protokollban , az ElGamal sémában és más kriptográfiai algoritmusokban használják [11] .

Lásd még

Jegyzetek

  1. Shvets A.N. Gyors hatványozás . Hozzáférés időpontja: 2015. november 13. Az eredetiből archiválva : 2015. november 17.
  2. Pankratova, 2009 , p. 7.
  3. Pankratova, 2009 , p. tizenegy.
  4. Pankratova, 2009 , p. tíz.
  5. 1 2 3 4 Ryabko, Fionov, 2004 .
  6. 1 2 3 4 Kézikönyv, 2006 .
  7. 1 2 3 4 Crandall, Pomerance, 2011 .
  8. 1 2 3 4 5 6 Kriptográfia, 2005 .
  9. Gabidulin, Ksevetszkij, Kolybelnikov, 2011 .
  10. Mahovenko, 2006 .
  11. Alkalmazott kriptográfia, 2002 .

Irodalom