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 .
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 , azazahol . Akkor
[5] .A séma használatakor a műveletek sorrendje a következőképpen írható le:
Így a gyors hatványozási algoritmus a Horner-séma [6] multiplikatív analógjává redukálódik :
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] .
Az algoritmus alkalmazásával 21 13 kiszámítjuk :
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.
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 |
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ő .
Á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.
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:
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.
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] .