A Berlekamp-Rabin algoritmus (a Berlekamp-féle módszer is ) egy valószínűségi módszer a polinomok gyökereinek megtalálására polinomiális komplexitású mező felett . A módszert Alvin Berlekamp amerikai matematikus írta le 1970-ben [1] , mint a véges mezők feletti polinomok faktorizációs algoritmusának melléktermékét, majd később (1979-ben) Michael Rabin módosította tetszőleges véges mezők esetére [2]. . A Berlekamp által 1967-ben [3] javasolt algoritmus eredeti változata nem volt polinom [4] . Az algoritmus 1970-ben Zassenhaus eredményein alapuló változata nagy értékekkel dolgozott, amelyben a cím módszert használták segédként [1] . A módszer megjelenése idején a szakmai környezetben elterjedt, a szakirodalomban azonban ritkán található [4] .
A módszert Alvin Berlekamp javasolta a polinomok véges mezők feletti faktorizálásáról szóló munkájában [1] . Ebben a polinom egy mező feletti irreducibilis faktorokká alakítása arra redukálódik, hogy megkeressük néhány más polinom gyökerét egy mező felett . Ugyanakkor az eredeti munkában nem volt bizonyíték az algoritmus helyességére [2] . Az algoritmust Michael Rabin véglegesítette és általánosította tetszőleges véges mezők esetére [2] . 1986-ban René Peralta leírt egy hasonló algoritmust [5] , amely megoldja a négyzetgyök keresésének problémáját egy mezőben [6] , 2000-ben pedig Peralta módszerét általánosították a köbegyenletek megoldására [7] .
A Berlekamp -algoritmusban egy polinomot először szorzatként ábrázolunk , ahol a fokszámú polinomok szorzata . Ezután minden ilyen fokú polinom faktorizálását az új fokú polinom gyökeinek megtalálására redukáljuk . A faktorizációs algoritmust bemutató cikk három módszert is javasolt a polinom gyökereinek megtalálására Galois mezőben . Az első kettő levezeti a gyökerek keresését egy mezőben a gyökerek megtalálására egy mezőben . A cikk tárgyát képező harmadik módszer megoldja a mezőben való gyökerek megtalálásának problémáját , amely a másik kettővel együtt megoldja a faktorizációs problémát [1] .
A faktorizációs algoritmus Berlekamp által 1967-ben megjelent első írásában [3] javasolt változata futott be , ahol a polinom irreducibilis tényezőinek száma. Így az algoritmus nem polinomiális, és nem volt praktikus, ha a prímszám elég nagy volt. 1969-ben ezt a problémát Hans Zassenhaus oldotta meg , és megmutatta, hogyan csökkenthető az algoritmus szűk keresztmetszete valamilyen polinom gyökereinek megtalálásának problémájára [4] . 1970-ben Berlekamp cikkét Zassenhaus megoldásait figyelembe véve [1] újra kiadták .
1980-ban Michael Rabin elvégezte az algoritmus szigorú elemzését, általánosította úgy, hogy véges alakú mezőkkel dolgozzon , és bebizonyította, hogy az algoritmus egy iterációjának hibavalószínűsége nem haladja meg a [2] -t, majd 1981-ben Michael Ben- Vagy megerősítette ezt a becslést -ra , ahol - a polinom különböző gyökeinek száma [8] . A polinomiális determinisztikus algoritmus létezésének kérdése egy véges mező feletti polinom gyökereinek megtalálására nyitva marad - a fő polinomfaktorizációs algoritmusok, a Berlekamp-algoritmus és a Cantor-Zassenhaus algoritmus valószínűségi. 1981-ben Paul Camion kimutatta [9] , hogy létezik ilyen algoritmus bármely adott számra , de ez az eredmény pusztán elméleti, és az általa leírt halmazok gyakorlati megalkotásának lehetősége nyitva marad [10] .
A numerikus algoritmusokról szóló "A programozás művészete " második kötetének első kiadásában Donald Knuth azt írja, hogy hasonló faktorizációs eljárások 1960-ban ismertek voltak, de ritkán voltak nyilvánosak [4] . A módszer használatára az egyik első publikált példát Golomb , Welsh és Hales 1959-ből származó, a trinomiálisok faktorizálásáról szóló munkájában találjuk , ahol egy speciális esetet vettek figyelembe [11] .
Legyen páratlan prímszám. Tekintsünk egy polinomot a maradékok mezője felett modulo . Meg kell találni az összes számot úgy, hogy minden lehetséges [2] [12] esetén .
Hadd . Egy ilyen polinom összes gyökerének megtalálása egyenértékű a lineáris tényezőkre való felosztással. Egy ilyen partíció megtalálásához elég megtanulni, hogyan lehet a polinomot két faktorra felosztani, majd rekurzívan belefutni. Ehhez bevezetünk egy polinomot , ahol a -ból származó véletlen szám . Ha egy ilyen polinom szorzatként reprezentálható , akkor az eredeti polinom szempontjából ez azt jelenti, hogy , ami az eredeti polinom faktorizációját adja [1] [12] .
Az Euler-kritérium szerint bármely monom esetében pontosan az alábbi tulajdonságok egyike teljesül [1] :
Így ha nem osztható -vel , ami külön is ellenőrizhető, akkor egyenlő a legnagyobb közös osztók és [12] szorzatával .
A fentiek a következő algoritmushoz vezetnek [1] :
Ha olyan polinomtal is elosztjuk, amelynek nincs gyöke -ben , akkor a és -vel történő számításkor a négyzet nélküli polinom nem triviális tényezőkre való felosztását kapjuk, így az algoritmus lehetővé teszi, hogy megtalálja bármelyik gyökét. feletti polinomok , és nem csak azok, amelyek monomok szorzatára vannak felbontva [12] .
Legyen szükséges olyan összehasonlítást megoldani, amelynek megoldásai az elemek , ill. Megtalálásuk egyenértékű egy polinom mező feletti faktorizálásával . Ebben a konkrét esetben a feladat leegyszerűsödik, mivel a megoldáshoz elég csak számolni . A kapott polinomra pontosan az egyik állítás lesz igaz:
A harmadik esetben a kapott monomnak egyenlőnek kell lennie vagy , vagy . Ez lehetővé teszi, hogy a megoldást [1] -ként írjuk le .
PéldaOldjuk meg az összehasonlítást . Ehhez faktorizálásra van szükség . Nézzük a lehetséges értékeket :
Az ellenőrzés ezt mutatja és érvényes .
Az algoritmus minden esetben megtalálja a nem triviális faktorokra való felosztást , kivéve azokat, amelyekben minden szám egyidejűleg maradék vagy nem maradék. A ciklotómia elmélete [1] szerint egy ilyen esemény valószínűsége arra az esetre, ha maguk is egyidejűleg maradékok vagy nem-maradékok (vagyis amikor az eljárásunkhoz nem alkalmas) a következőképpen becsülhető meg. [8] , ahol a különböző számok száma az [1] között . Így az algoritmus hibájának valószínűsége nem haladja meg a -t .
A véges mezők elméletéből ismert, hogy ha egy irreducibilis polinom foka , akkor az ilyen polinom osztó , és nem osztója -nak .
Így szekvenciálisan figyelembe véve azokat a polinomokat , ahol és -re , feloszthatjuk a polinomot alakú faktorokra , ahol az összes , a polinomot osztó fokszámú irreducibilis polinom szorzata . Fokának ismeretében meg tudjuk határozni az ilyen polinomok számát . Hadd . Ha figyelembe vesszük azt a polinomot , ahol , akkor egy ilyen polinom sorrendjének a mezőben osztania kell a számot . Ha nem osztható -vel , akkor a polinom osztható -vel, de -vel nem .
Ennek alapján Zassenhaus azt javasolta, hogy keressünk egy polinom osztóit az alakban , ahol van valami kellően nagy osztó , például . Egy adott esetben pontosan a Berlekamp-módszert kapjuk a fent leírtak szerint [4] .
Lépésről lépésre az algoritmus egy iterációjának futási ideje a következőképpen becsülhető meg, feltételezve, hogy a polinom foka :
Így az algoritmus egy iterációja végrehajtható elemekkel végzett aritmetikai műveleteknél , és a polinom összes gyökének megtalálásához átlagot kell [8] . A négyzetgyök kinyerésének adott esetben az érték kettő, így a futási időt az algoritmus egy iterációjaként becsüljük [12] .
Számelméleti algoritmusok | |
---|---|
Egyszerűség tesztek | |
Prímszámok keresése | |
Faktorizáció | |
Diszkrét logaritmus | |
GCD keresése | |
Modulo aritmetika | |
Számok szorzása és osztása | |
A négyzetgyök kiszámítása |