Rychlé umocňovací algoritmy

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 .

Popis

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:

  1. Představte exponent n v binárním tvaru
  2. Je-li = 1, pak se aktuální výsledek odmocní a poté vynásobí x. Je-li = 0, pak se aktuální výsledek jednoduše odmocní [6] . Index i se mění z k -1 na 0 [7] .

Algoritmus rychlého umocňování se tedy redukuje na multiplikativní analog Hornerova schématu [6] :

Zobecnění

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] .

Příklady řešení problémů

Použitím algoritmu vypočítáme 21 13 :

Schéma zprava doleva

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.

  1. Vyjádřete exponent n binárně.
  2. Nastavte pomocnou proměnnou z rovnou číslu x.
    1. Jestliže , pak se aktuální výsledek vynásobí z a samotné číslo z se umocní na druhou. Je-li = 0, pak stačí odmocnit z [6] . V tomto případě se index i , na rozdíl od schématu zleva doprava, pohybuje od 0 do k -1 včetně [7] .

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
  1. 21 194 481 = 4084 101
  2. 4084 101 37 822 859 361 = 154 472 377 739 119 461

Výpočetní složitost

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] .

Optimalizace algoritmu

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.

  1. Pro předem vypočítané x i
  2. Exponent je uveden v následujícím tvaru: , kde
  3. Nechť y  je proměnná, ve které se bude počítat konečný výsledek. Nechte _
  4. Pro všechna i = k/w  - 1, k/w  - 2, ..., 0 proveďte následující:
    1. [8] .

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:

  1. Exponent je reprezentován jako , kde a e i+1  — e i ≥ w .
  2. Pro x se počítá i . Dále označíme x i jako x i .
  3. Nechť y  je proměnná, ve které se bude počítat konečný výsledek. Nechte _
  4. Pro všechna i = l  - 1, l  - 2, ..., 0 proveďte následující:
    1. Pro všechna j od 0 do e i+1  - e i  - 1 y čtverec
  5. Pro všechna j od 0 do e 0  - 1 y čtverec [8] .

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.

  1. 215 = 27 + 5 24 + 7
  2. y=1
  3. y = y x = x
  4. y je odmocněno 3krát, protože v tomto kroku e 2  - e 1 -1 \u003d 7 - 4 - 1 \u003d 2 a odpočítávání je od nuly, to znamená y \u003d y 8 \u003d x 8
  5. y \u003d y x 5 \u003d x 13
  6. y je odmocněno 4krát, protože v tomto kroku e 1  - e 0 -1 \u003d 4 - 0 - 1 \u003d 3, to znamená y \u003d y 16 \u003d x 208
  7. y \u003d y x 7 \u003d x 215

Aplikace

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] .

Viz také

Poznámky

  1. Shvets A.N. Rychlé umocňování . Datum přístupu: 13. listopadu 2015. Archivováno z originálu 17. listopadu 2015.
  2. Pankratova, 2009 , str. 7.
  3. Pankratova, 2009 , str. jedenáct.
  4. Pankratova, 2009 , str. deset.
  5. 1 2 3 4 Ryabko, Fionov, 2004 .
  6. 1 2 3 4 Příručka, 2006 .
  7. 1 2 3 4 Crandall, Pomerance, 2011 .
  8. 1 2 3 4 5 6 Kryptografie, 2005 .
  9. Gabidulin, Kshevetsky, Kolybelnikov, 2011 .
  10. Mahovenko, 2006 .
  11. Aplikovaná kryptografie, 2002 .

Literatura