Algoritmus Berlekamp-Rabin

Algoritmus Berlekamp-Rabin (také Berlekampova metoda ) je pravděpodobnostní metoda pro nalezení kořenů polynomů na poli s polynomiální složitostí. Metoda byla popsána americkým matematikem Alvinem Berlekampem v roce 1970 [1] jako vedlejší produkt faktorizačního algoritmu pro polynomy nad konečnými tělesy a později (v roce 1979) byla upravena Michaelem Rabinem pro případ libovolných konečných těles [2]. . Původní verze algoritmu navržená Berlekampem v roce 1967 [3] nebyla polynomická [4] . Verze algoritmu publikovaná v roce 1970 na základě výsledků Zassenhaus pracovala s velkými hodnotami , ve které byla jako pomocník použita metoda title [1] . V době publikace byla metoda běžná v odborném prostředí, v literatuře se však nacházela jen zřídka [4] .

Historie

Metodu navrhl Alvin Berlekamp ve své práci na faktorizaci polynomů nad konečnými tělesy [1] . V tom je faktorizace polynomu na ireducibilní faktory nad polem redukována na nalezení kořenů některých dalších polynomů nad polem . Přitom v původní práci nebyl žádný důkaz o správnosti algoritmu [2] . Algoritmus dokončil a zobecnil na případ libovolných konečných polí Michael Rabin [2] . V roce 1986 popsal René Peralta podobný algoritmus [5] , který řeší problém hledání druhé odmocniny v poli [6] , a v roce 2000 byla Peraltova metoda zobecněna pro řešení kubických rovnic [7] .

V Berlekampově algoritmu je polynom nejprve reprezentován jako součin , kde  je součin polynomů stupně . Potom faktorizace každého takového polynomu stupně je redukována na nalezení kořenů nového polynomu stupně . Článek představující faktorizační algoritmus také navrhl tři metody pro nalezení kořenů polynomu v Galoisově poli . První dva redukují hledání kořenů v poli na hledání kořenů v poli . Třetí metoda, která je předmětem tohoto článku, řeší problém hledání kořenů v poli , který spolu s dalšími dvěma řeší problém faktorizace [1] .

Verze faktorizačního algoritmu navržená Berlekampem ve svém prvním článku v roce 1967 [3] běžela v roce , kde  je počet ireducibilních faktorů polynomu. Algoritmus byl tedy nepolynomiální a byl nepraktický, když bylo prvočíslo dostatečně velké. V roce 1969 tento problém vyřešil Hans Zassenhaus , který ukázal, jak redukovat úzké hrdlo algoritmu na problém hledání kořenů nějakého polynomu [4] . V roce 1970 byl znovu publikován Berlekampův článek s přihlédnutím k řešením Zassenhause [1] .

V roce 1980 provedl Michael Rabin rigorózní analýzu algoritmu, zobecnil jej pro práci s konečnými poli tvaru a dokázal, že pravděpodobnost chyby jedné iterace algoritmu nepřesahuje [2] a v roce 1981 Michael Ben- Nebo posílil tento odhad na , kde  — počet různých kořenů polynomu [8] . Otázka existence polynomiálního deterministického algoritmu pro hledání kořenů polynomu nad konečným polem zůstává otevřená - hlavní algoritmy rozkladu polynomů, Berlekampův algoritmus a Cantor-Zassenhausův algoritmus jsou pravděpodobnostní. V roce 1981 Paul Camion ukázal [9] , že takový algoritmus existuje pro jakékoli dané číslo , ale tento výsledek je čistě teoretický a otázka možnosti sestrojení jím popisovaných množin v praxi zůstává otevřená [10] .

V prvním vydání druhého svazku „ Umění programování “ o numerických algoritmech Donald Knuth píše, že podobné faktorizační postupy byly známy již v roce 1960, ale jen zřídka se nacházely ve veřejné doméně [4] . Jeden z prvních publikovaných příkladů použití metody lze nalézt v práci Golomba , Welshe a Halese z roku 1959 o faktorizaci trinomů nad , kde byl zvažován zvláštní případ [11] .

Algoritmus

Prohlášení o problému

Nechť  je liché prvočíslo. Uvažujme polynom nad polem zbytků modulo . Je potřeba najít všechna čísla taková, aby pro všechny možné [2] [12] .

Randomizace

Nechte _ Nalezení všech kořenů takového polynomu je ekvivalentní jeho rozdělení na lineární faktory. K nalezení takového rozdělení se stačí naučit, jak rozdělit polynom na libovolné dva faktory, a pak na ně rekurzivně spustit. K tomu zavedeme polynom , kde  je náhodné číslo z . Pokud lze takový polynom reprezentovat jako součin , pak v podmínkách původního polynomu to znamená, že , což dává rozklad původního polynomu [1] [12] .

Klasifikace prvků

Podle Eulerova kritéria je pro jakýkoli monomiál splněna právě jedna z následujících vlastností [1] :

  1. Monomial je roven jestliže ,
  2. Monomial dělí jestliže  je kvadratický zbytek modulo ,
  3. Monomial dělí if  je kvadratický nezbytkový modulo this.

Pokud tedy není dělitelné , což lze zkontrolovat samostatně, pak se rovná součinu největších společných dělitelů a [12] .

Berlekampova metoda

Výše uvedené vede k následujícímu algoritmu [1] :

  1. Koeficienty polynomu jsou explicitně vypočteny ,
  2. Vypočítejte zbytek dělení postupným umocněním a odebráním zbytku ,
  3. Binární umocnění vypočítá zbytek dělení pomocí polynomů vypočítaných v posledním kroku,
  4. Jestliže , pak výše uvedené dává netriviální faktorizaci,
  5. Jinak jsou všechny kořeny zároveň zbytky i nezbytky a vyplatí se vyzkoušet jinou hodnotu .

Pokud je také rozdělen nějakým polynomem , který nemá kořeny v , pak při výpočtu s a získáme rozdělení polynomu bez čtverců na netriviální faktory, takže algoritmus vám umožní najít všechny kořeny libovolného polynomy přes , a nejen ty, které jsou rozděleny do součinu monočlenů [12] .

Extrahování druhé odmocniny

Nechť je třeba řešit srovnání, jehož řešením jsou prvky a resp. Jejich nalezení je ekvivalentní rozkladu polynomu nad polem . V tomto konkrétním případě je úloha zjednodušena, protože pro řešení stačí vypočítat pouze . Pro výsledný polynom bude pravdivý právě jeden z výroků:

  1. GCD je , což znamená, že a jsou zároveň kvadratickými nezbytky,
  2. GCD je , což znamená, že obě čísla jsou kvadratické zbytky,
  3. GCD se rovná monomiálu , což znamená, že přesně jedno číslo ze dvou je kvadratický zbytek.

Ve třetím případě musí být výsledný monomiál roven nebo , nebo . To umožňuje zapsat řešení jako [1] .

Příklad

Pojďme vyřešit srovnání . Chcete-li to provést, musíte faktorizovat . Zvažme možné hodnoty :

  1. Nechte _ Odkud pak . Obě čísla jsou nezbytky a je třeba vzít další .
  1. Nechte _ Odkud pak . Proto , proto .

Ověření to ukazuje a je platné .

Odůvodnění metody

Algoritmus najde rozdělení na netriviální faktory ve všech případech, kromě těch, ve kterých jsou všechna čísla současně zbytky nebo nezbytky. Podle teorie cyklotomie [1] , lze pravděpodobnost takové události pro případ, kdy samy jsou zároveň zbytky i nezbytky (tedy kdy se to pro náš postup nehodí), odhadnout jako [8] , kde  je počet různých čísel mezi [1] . Pravděpodobnost chyby algoritmu tedy nepřesahuje .

Aplikace na faktorizaci polynomů

Z teorie konečných těles je známo , že je-li stupeň ireducibilního polynomu , pak takový polynom je dělitel a není dělitelem pro .

Postupně tedy zvažujeme polynomy kde a pro , můžeme rozdělit polynom na faktory tvaru , kde  je součin všech ireducibilních polynomů stupně , které dělí polynom . Když známe stupeň , můžeme určit počet takových polynomů rovný . Nechte _ Pokud vezmeme v úvahu polynom , kde , pak pořadí takového polynomu v oboru musí dělit číslo . Pokud není dělitelný , pak je polynom dělitelný , ale ne .

Na základě toho Zassenhaus navrhl hledat dělitele polynomu ve tvaru , kde  je nějaký dostatečně velký dělitel , například . V konkrétním případě se přesně získá Berlekampova metoda, jak je popsáno výše [4] .

Otevírací doba

Krok za krokem lze dobu trvání jedné iterace algoritmu odhadnout následovně, za předpokladu, že stupeň polynomu je :

  1. Vzhledem k tomu, že podle Newtonova binomického vzorce je přechod z do proveden v ,
  2. Součin polynomů a odebrání zbytku jednoho polynomu modulo jiného se provádí v , takže výpočet se provádí v ,
  3. Podobně jako v předchozím bodě se binární umocňování provádí v ,
  4. Přebírání ze dvou polynomů podle Euklidova algoritmu se provádí v .

Pro aritmetické operace s prvky lze tedy provést jednu iteraci algoritmu a nalezení všech kořenů polynomu vyžaduje průměr [8] . V konkrétním případě extrahování druhé odmocniny je hodnota dvě, takže doba běhu se odhaduje jako jedna iterace algoritmu [12] .

Poznámky

  1. ↑ 1 2 3 4 5 6 7 8 9 10 11 Berlekamp ER Rozdělení polynomů na velká konečná tělesa  //  Matematika počítání. - 1970. - Sv. 24 , iss. 111 . - str. 730-732 . — ISSN 0025-5718 . - doi : 10.1090/S0025-5718-1970-0276200-X .
  2. ↑ 1 2 3 4 5 Rabin M. Probabilistic Algorithms in Finite Fields  //  SIAM Journal on Computing. - 1980. - 1. května ( díl 9 , č . 2 ). - str. 273-280 . — ISSN 0097-5397 . - doi : 10.1137/0209024 . Archivováno z originálu 23. června 2019.
  3. ↑ 1 2 Berlekamp ER Faktorizace polynomů nad konečnými tělesy  //  The Bell System Technical Journal. - 1967. - říjen ( roč. 46 , 8. vydání ). - S. 1853-1859 . — ISSN 0005-8580 . - doi : 10.1002/j.1538-7305.1967.tb03174.x . Archivováno z originálu 17. února 2019.
  4. ↑ 1 2 3 4 5 Knuth DE Umění počítačového programování  . - Reading, Massachusetts: Addison-Wesley Publishing Company, 1968. - Sv. 2. - S. 381-390. — 624 s. - ISBN 0-201-03802-1 . Archivováno 3. srpna 2019 na Wayback Machine
  5. Sze TW O odmocnění bez kvadratických nezbytků nad konečnými tělesy  //  Matematika počítání. - 2011. - 3. ledna ( díl 80 , výr. 275 ). - S. 1797-1811 . — ISSN 0025-5718 . - doi : 10.1090/s0025-5718-2011-02419-1 .
  6. Peralta R. Jednoduchý a rychlý pravděpodobnostní algoritmus pro výpočet druhých odmocnin modulo a prvočíslo (správně  )  // IEEE Transactions on Information Theory. - 1986. - Listopad ( vol. 32 , es. 6 ). - S. 846-847 . — ISSN 0018-9448 . - doi : 10.1109/TIT.1986.1057236 . Archivováno z originálu 30. června 2019.
  7. Padró C., Sáez G. Odmocniny krychle v Zm  //  Applied Mathematics Letters. - 2002. - srpen ( vol. 15 , es. 6 ). - str. 703-708 . — ISSN 0893-9659 . - doi : 10.1016/s0893-9659(02)00031-9 .
  8. ↑ 1 2 3 Ben-Or M. Pravděpodobnostní algoritmy v konečných polích  //  22. výroční sympozium o základech informatiky (sfcs 1981). - 1981. - Říjen. - str. 394-398 . - doi : 10.1109/SFCS.1981.37 . Archivováno z originálu 29. července 2019.
  9. Camion P. A Deterministic Algorithm for Factorizing Polynomials of Fq [X]  //  Kombinatorická matematika, sborník z Mezinárodního kolokvia o teorii grafů a kombinatorice. - Elsevier, 1983. - S. 149-157 . — ISBN 9780444865120 .
  10. Grenet B., van der Hoeven J., Lecerf G. Deterministické hledání kořenů nad konečnými poli pomocí Graeffeovy transformace  //  Použitelná algebra v inženýrství, komunikaci a počítačích. - 2015. - Sv. 27 , iss. 3 . — S. 239 . — ISSN 0938-1279 . - doi : 10.1007/s00200-015-0280-5 .
  11. Golomb SW, Hales A., Welch LR O rozkladu trinomů přes GF(2  )  // Sekvence posuvných registrů. - World Scientific, 2017. - Březen. - S. 90-108. - ISBN 978-981-4632-00-3 . - doi : 10.1142/9789814632010_0005 .
  12. ↑ 1 2 3 4 5 Menezes AJ, Blake IF, Gao XH, Mullin RC, Vanstone SA Aplikace konečných  polí . - Springer USA, 1993. - S. 22-26. — 218p. - (The Springer International Series in Engineering and Computer Science). — ISBN 9780792392828 . Archivováno 30. června 2019 na Wayback Machine