Berlekamp-Rabin-algoritmen (även Berlekamps metod ) är en probabilistisk metod för att hitta rötter till polynom över ett fält med polynomkomplexitet . Metoden beskrevs av den amerikanske matematikern Alvin Berlekamp 1970 [1] som en spin-off till faktoriseringsalgoritmen för polynom över ändliga fält och modifierades senare (1979) av Michael Rabin för fallet med godtyckliga ändliga fält [2] . Den ursprungliga versionen av algoritmen som föreslogs av Berlekamp 1967 [3] var inte polynom [4] . Den version av algoritmen som publicerades 1970 baserad på resultaten från Zassenhaus arbetade med stora värden på , där titelmetoden användes som hjälpmedel [1] . Vid publiceringstillfället var metoden vanlig i den professionella miljön, men återfanns sällan i litteraturen [4] .
Metoden föreslogs av Alvin Berlekamp i hans arbete med faktorisering av polynom över ändliga fält [1] . I den reduceras faktoriseringen av ett polynom till irreducible faktorer över ett fält till att hitta rötterna till några andra polynom över ett fält . Samtidigt fanns det i originalverket inga bevis för algoritmens riktighet [2] . Algoritmen slutfördes och generaliserades till fallet med godtyckliga finita fält av Michael Rabin [2] . 1986 beskrev René Peralta en liknande algoritm [5] som löser problemet med att hitta kvadratroten i ett fält [6] , och 2000 generaliserades Peraltas metod för att lösa kubikekvationer [7] .
I Berlekamps algoritm representeras ett polynom först som en produkt , där är produkten av polynom av grad . Sedan reduceras faktoriseringen av varje sådan gradpolynom till att hitta rötterna till det nya gradpolynomet . Artikeln som introducerar faktoriseringsalgoritmen föreslog också tre metoder för att hitta rötterna till ett polynom i ett Galois-fält . De två första reducerar att hitta rötter i ett fält till att hitta rötter i ett fält . Den tredje metoden, som är föremål för denna artikel, löser problemet med att hitta rötter i fältet , som tillsammans med de andra två löser faktoriseringsproblemet [1] .
Den version av faktoriseringsalgoritmen som föreslogs av Berlekamp i hans första papper 1967 [3] sprang i , där är antalet irreducible faktorer av polynomet. Algoritmen var alltså icke-polynom och var opraktisk när primtalet var tillräckligt stort. 1969 löstes detta problem av Hans Zassenhaus , som visade hur man kan reducera flaskhalsen i algoritmen till problemet att hitta rötterna till något polynom [4] . 1970 återpublicerades Berlekamps artikel, med hänsyn tagen till lösningarna från Zassenhaus [1] .
1980 genomförde Michael Rabin en rigorös analys av algoritmen, generaliserade den till att fungera med ändliga fält av formen och bevisade att felsannolikheten för en iteration av algoritmen inte överstiger [2] och 1981 Michael Ben- Eller stärkte denna uppskattning till , där — antalet olika rötter av polynomet [8] . Frågan om existensen av en polynom deterministisk algoritm för att hitta rötterna till ett polynom över ett ändligt fält förblir öppen - de huvudsakliga polynomfaktoriseringsalgoritmerna , Berlekamp-algoritmen och Cantor-Zassenhaus-algoritmen är sannolikhet. 1981 visade Paul Camion [9] att en sådan algoritm existerar för ett givet antal , men detta resultat är rent teoretiskt och frågan om möjligheten att konstruera de uppsättningar som beskrivits av honom i praktiken förblir öppen [10] .
I den första upplagan av den andra volymen av " Konsten att programmera " om numeriska algoritmer, skriver Donald Knuth att liknande faktoriseringsprocedurer var kända 1960, men att de sällan hittades i det offentliga området [4] . Ett av de första publicerade exemplen på användningen av metoden finns i arbetet av Golomb , Welsh och Hales från 1959 om faktorisering av trinomial över , där ett specialfall övervägdes [11] .
Låta vara ett udda primtal. Betrakta ett polynom över fältet av rester modulo . Det är nödvändigt att hitta alla siffror så att för alla möjliga [2] [12] .
Låt . Att hitta alla rötter till ett sådant polynom motsvarar att dela upp det i linjära faktorer. För att hitta en sådan partition räcker det att lära sig att dela upp polynomet i två valfria faktorer och sedan köra rekursivt in i dem. För att göra detta introducerar vi ett polynom , där är ett slumptal från . Om ett sådant polynom kan representeras som en produkt , då i termer av det ursprungliga polynomet betyder detta att , vilket ger en faktorisering av det ursprungliga polynomet [1] [12] .
Enligt Eulerkriteriet är exakt en av följande egenskaper uppfylld för varje monomial [1] :
Således, om det inte är delbart med , vilket kan kontrolleras separat, då är det lika med produkten av de största gemensamma divisorerna och [12] .
Ovanstående leder till följande algoritm [1] :
Om det också delas med något polynom som inte har rötter i , då när man beräknar med och , erhålls en partition av det kvadratfria polynomet i icke-triviala faktorer, så algoritmen låter dig hitta alla rötter till alla polynom över , och inte bara de som är uppdelade i en produkt av monomial [12] .
Låt det vara nödvändigt att lösa en jämförelse vars lösningar är elementen och resp. Att hitta dem motsvarar att faktorisera ett polynom över ett fält . I det här speciella fallet är problemet förenklat, eftersom det för lösningen räcker att bara beräkna . För det resulterande polynomet kommer exakt ett av påståendena att vara sant:
I det tredje fallet måste den resulterande monomialen vara lika med eller , eller . Detta gör att lösningen kan skrivas som [1] .
ExempelLåt oss lösa jämförelsen . För att göra detta måste du faktorisera . Låt oss överväga de möjliga värdena :
Verifiering visar att och är giltig .
Algoritmen hittar en uppdelning i icke-triviala faktorer i alla fall, förutom de där alla siffror är rester eller icke-rester samtidigt. Enligt teorin om cyklotomi [1] kan sannolikheten för en sådan händelse för fallet när de själva är både rester eller icke-rester samtidigt (det vill säga när det inte är lämpligt för vår procedur) uppskattas som [8] , där är antalet olika nummer bland [1] . Således överstiger sannolikheten för algoritmfel inte .
Det är känt från teorin om finita fält att om graden av ett irreducible polynom är , då ett sådant polynom är en divisor och är inte en divisor för .
Således, sekventiellt med tanke på polynomen där och för , kan vi dela upp polynomet i faktorer av formen , där är produkten av alla irreducerbara polynom av grad som delar polynomet . Genom att veta graden av , kan vi bestämma antalet sådana polynom lika med . Låt . Om vi betraktar polynomet , där , måste ordningen för ett sådant polynom i fältet dela talet . Om det inte är delbart med , då är polynomet delbart med men inte med .
Baserat på detta föreslog Zassenhaus att leta efter divisorer av ett polynom i formen , där är någon tillräckligt stor divisor , till exempel . I ett särskilt fall erhålls exakt Berlekamp-metoden enligt beskrivningen ovan [4] .
Steg för steg kan körtiden för en iteration av algoritmen uppskattas enligt följande, under antagande av att graden av polynomet är :
Således kan en iteration av algoritmen utföras för aritmetiska operationer med element , och att hitta alla rötter till polynomet kräver ett medelvärde [8] . I det speciella fallet att extrahera kvadratroten är värdet två, så körtiden uppskattas som en iteration av algoritmen [12] .
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |