Nopeat eksponentioalgoritmit ( dikotominen eksponentioalgoritmi, binäärinen eksponentioalgoritmi) ovat algoritmeja , jotka on suunniteltu nostamaan luku luonnolliseen potenssiin harvemmalla kertolaskulla kuin asteen määrittämisessä vaaditaan [1] . Algoritmit perustuvat siihen, että luvun nostamiseksi potenssiin , lukua ei tarvitse kertoa itsellään kerran, vaan jo lasketut potenssit voidaan kertoa. Erityisesti, jos potenssi on kaksi, niin potenssiin nostamiseen riittää lukukertojen neliöinti, samalla kun kulutetaan kertolaskuja . Esimerkiksi, jos haluat nostaa luvun kahdeksanteen potenssiin seitsemän kertokertoimen suorittamisen sijaan , voit neliöttää luvun ( ), sitten neliöidä tuloksen uudelleen saadaksesi neljännen potenssin ( ) ja lopuksi neliöimällä tuloksen uudelleen ja saat vastauksen ( ).
Lisäksi jotkin algoritmit lisäoptimointiin käyttävät sitä tosiasiaa, että neliöintioperaatio on nopeampi kuin kertolasku, koska kertoimen numerot toistuvat neliöitäessä [2] .
Persialainen matemaatikko Al-Kashi [3] ehdotti ensimmäisen kerran binaarista eksponentiointialgoritmia 1400-luvulla .
Nämä algoritmit eivät aina ole optimaalisia. Esimerkiksi käytettäessä vasemmalta oikealle -mallia n = 15:n nopea eksponentio vaatii kolme kertolaskua ja kolme neliöintioperaatiota, vaikka korotus 15. potenssiin voidaan suorittaa kolmella kertolaskulla ja kahdella neliöinnillä [4] . Optimaalinen eksponentio vastaa lyhimmän lisäaineketjun rakennetta .
Pääalgoritmi nopealle eksponentiolle on "vasemmalta oikealle" -malli. Se on saanut nimensä siitä, että eksponentin bittejä tarkastellaan vasemmalta oikealle, eli korkeasta matalaan [5] .
Päästää
on asteen n binääriesitys , elimissä . Sitten
[5] .Toimintojen järjestys tätä järjestelmää käytettäessä voidaan kuvata seuraavasti:
Siten nopea eksponentioalgoritmi pelkistyy Hornerin kaavion [6] multiplikatiiviseksi analogiksi :
Olkoon pari ( S , *) puoliryhmä , jolloin voidaan kutsua operaatiota * kertolasku ja määritellä nostooperaatio luonnolliseen potenssiin:
Sitten n:n arvojen laskemiseksi missä tahansa puoliryhmässä ( erityisesti Abelin ryhmässä ) voidaan käyttää algoritmeja nopeaan eksponentioon [8] .
Algoritmia soveltaen laskemme 21 13 :
Tässä mallissa, toisin kuin "vasemmalta oikealle" -mallissa, eksponentin bittejä tarkastellaan alimmasta korkeimpaan [5] .
Toimintojen järjestys tämän algoritmin toteutuksessa.
Tämä piiri sisältää yhtä monta kertolaskua ja neliöintiä kuin "vasemmalta oikealle" -piiri. Tästä huolimatta vasemmalta oikealle -kaavio on kuitenkin kannattavampi kuin oikealta vasemmalle -malli, varsinkin jos eksponentti sisältää useita yksiköitä. Asia on siinä, että kaaviossa vasemmalta oikealle operaation tulos = tulos · x sisältää vakiokertoimen x . Ja pienelle x :lle (joka usein tapahtuu primaliteettitesteissä) kertominen on nopeaa. Esimerkiksi, kun x = 2, voimme korvata kertolaskuoperaation summausoperaatiolla [7] .
Tämän algoritmin toiminnan matemaattinen perustelu voidaan esittää seuraavalla kaavalla:
[9] .Esimerkki . Lasketaan arvo 21 13 käyttäen eksponentiokaaviota oikealta vasemmalle .
i | 0 | yksi | 2 | 3 |
---|---|---|---|---|
21 | 441 | 194 481 | 37 822 859 361 | |
yksi | 0 | yksi | yksi |
Sekä vasemmalta oikealle että oikealta vasemmalle -mallissa neliöintioperaatioiden lukumäärä on sama ja yhtä suuri kuin k, missä k on eksponentin n pituus bitteinä, . Vaadittujen kertolaskuoperaatioiden määrä on yhtä suuri kuin Hamming -paino , eli nollasta poikkeavien alkioiden lukumäärä luvun n binääriesityksessä . Keskimäärin kertolaskuja tarvitaan [6] .
Esimerkiksi luvun nostamiseksi sadasosaan tämä algoritmi vaatii vain 8 kerto- ja neliöintioperaatiota [5] .
Vertailun vuoksi standardin eksponentiomenetelmän kanssa tarvitaan kertolasku, eli operaatioiden lukumäärä voidaan arvioida [10] .
Yleensä neliöintioperaatio on nopeampi kuin kertolasku. Ikkunamenetelmän avulla voit vähentää kertolaskujen määrää ja tehdä siten eksponentioalgoritmista optimaalisemmaksi [8] .
Ikkuna on itse asiassa numerojärjestelmän perusta [7] . Olkoon w ikkunan leveys, eli indikaattorin w merkkiä otetaan huomioon kerrallaan.
Harkitse ikkunamenetelmää.
Tämä algoritmi vaatii k -neliöinnin, mutta kertolaskujen lukumäärä pienenee keskimäärin k/w :iin [8] .
Vielä tehokkaampi on liukuikkunamenetelmä. Se johtuu siitä, että ikkunan leveys voi muuttua prosessin aikana:
Eksponenttioperaatioiden määrä tässä algoritmissa on sama kuin ikkunamenetelmässä, mutta kertolaskuoperaatioiden määrä on vähennetty l :ään eli keskiarvoon [8] .
Nostetaan esimerkiksi luku x potenssiin 215 liukuvalla ikkunamenetelmällä . Ikkunan leveys on w = 3.
Nopea eksponentioalgoritmi on yleistynyt julkisen avaimen salausjärjestelmissä . Algoritmia käytetään erityisesti RSA -protokollassa , ElGamal-skeemassa ja muissa salausalgoritmeissa [11] .