Rychlé umocňovací algoritmy ( algoritmus dichotomického umocňování, binární umocňovací algoritmus) jsou algoritmy navržené tak, aby zvýšily číslo na přirozenou mocninu v menším počtu násobení , než je požadováno při určování stupně [1] . Algoritmy jsou založeny na tom, že pro umocnění čísla na mocninu není nutné násobit číslo samo o sobě jednou, ale můžete násobit již vypočítané mocniny. Konkrétně, pokud je mocnina dvou, pak pro zvýšení na mocninu stačí umocnit číslo krát a utrácet násobení místo . Chcete-li například zvýšit číslo na osmou mocninu, můžete místo sedmi násobení odmocnit číslo ( ), pak výsledek znovu odmocnit, abyste získali čtvrtou mocninu ( ), a nakonec výsledek znovu odmocnit a získat odpověď ( ).
Některé algoritmy pro další optimalizaci navíc využívají toho, že operace kvadratury je rychlejší než operace násobení díky tomu, že se cifry ve faktoru při kvadratuře opakují [2] .
Binární umocňovací algoritmus byl poprvé navržen v 15. století perským matematikem Al-Kashi [3] .
Tyto algoritmy nejsou vždy optimální. Například při použití schématu zleva doprava bude rychlé umocňování n = 15 vyžadovat tři násobení a tři operace umocnění, ačkoli zvýšení na 15. mocninu lze provést ve 3 násobení a 2 umocnění [4] . Optimální umocnění odpovídá konstrukci nejkratšího aditivního řetězce .
Hlavním algoritmem pro rychlé umocňování je schéma „zleva doprava“. Svůj název získal podle toho, že bity exponentu jsou nahlíženy zleva doprava, tedy od vysokého k nízkému [5] .
Nechat
je binární reprezentace stupně n , tj.kde . Pak
[5] .Posloupnost akcí při použití tohoto schématu lze popsat takto:
Algoritmus rychlého umocňování se tedy redukuje na multiplikativní analog Hornerova schématu [6] :
Nechť je pár ( S , *) pologrupa , pak můžeme operaci nazvat * násobení a definovat operaci zvýšení na přirozenou mocninu:
Poté, pro výpočet hodnot a n v jakékoli pologrupě ( zejména v Abelovské grupě ), lze použít algoritmy pro rychlé umocňování [8] .
Použitím algoritmu vypočítáme 21 13 :
V tomto schématu, na rozdíl od schématu „zleva doprava“, jsou bity exponentu prohlíženy od nejnižšího k nejvyššímu [5] .
Posloupnost akcí při implementaci tohoto algoritmu.
Tento obvod obsahuje tolik násobení a umocnění jako obvod „zleva doprava“. Navzdory tomu je však schéma zleva doprava výnosnější než schéma zprava doleva, zvláště pokud exponent obsahuje mnoho jednotek. Jde o to, že ve schématu zleva doprava operace výsledek = výsledek · x obsahuje konstantní násobitel x . A pro malé x (což je často případ testů primality) bude násobení rychlé. Například pro x = 2 můžeme operaci násobení nahradit operací sčítání [7] .
Matematické zdůvodnění fungování tohoto algoritmu může být reprezentováno následujícím vzorcem:
[9] .Příklad . Vypočítejme hodnotu 21 13 pomocí schématu umocňování zprava doleva .
i | 0 | jeden | 2 | 3 |
---|---|---|---|---|
21 | 441 | 194 481 | 37 822 859 361 | |
jeden | 0 | jeden | jeden |
Pro schéma zleva doprava i zprava doleva je počet operací umocnění stejný a rovná se k, kde k je délka exponentu n v bitech, . Počet požadovaných operací násobení se rovná Hammingově váze , tedy počtu nenulových prvků v binární reprezentaci čísla n . V průměru jsou vyžadovány operace násobení [6] .
Například pro zvýšení čísla na setinu bude tento algoritmus vyžadovat pouze 8 operací násobení a kvadratury [5] .
Pro srovnání u standardní metody umocňování je nutná operace násobení, to znamená, že počet operací lze odhadnout jako [10] .
Obecně je operace kvadratury rychlejší než operace násobení. Metoda okna umožňuje snížit počet operací násobení a tím optimalizovat umocňovací algoritmus [8] .
Okno je vlastně základem číselné soustavy [7] . Nechť w je šířka okna, to znamená, že se najednou bere v úvahu w znaků indikátoru.
Zvažte metodu okna.
Tento algoritmus vyžaduje k kvadraturu, ale počet násobení je v průměru redukován na k/w [8] .
Ještě efektivnější je metoda posuvného okna. Spočívá ve skutečnosti, že šířka okna se během provádění procesu může změnit:
Počet operací umocňování v tomto algoritmu je stejný jako u metody okna, ale počet operací násobení byl snížen na l , tedy na průměr [8] .
Například pomocí metody posuvného okna zvětšíme číslo x na 215. Šířka okna je w = 3.
Rychlý umocňovací algoritmus se rozšířil v kryptosystémech s veřejným klíčem . Algoritmus se používá zejména v protokolu RSA , schématu ElGamal a dalších kryptografických algoritmech [11] .