Berlekamp-Rabin algoritmen (også Berlekamps metode ) er en sandsynlighedsmetode til at finde rødderne af polynomier over et felt med polynomisk kompleksitet. Metoden blev beskrevet af den amerikanske matematiker Alvin Berlekamp i 1970 [1] som et spin-off til faktoriseringsalgoritmen for polynomier over endelige felter og blev senere (i 1979) modificeret af Michael Rabin til tilfældet med vilkårlige endelige felter [2] . Den originale version af algoritmen foreslået af Berlekamp i 1967 [3] var ikke polynomium [4] . Den version af algoritmen, der blev offentliggjort i 1970 baseret på resultaterne af Zassenhaus arbejdede med store værdier af , hvor titelmetoden blev brugt som en hjælper [1] . På udgivelsestidspunktet var metoden almindelig i det faglige miljø, men sjældent fundet i litteraturen [4] .
Metoden blev foreslået af Alvin Berlekamp i hans arbejde med faktorisering af polynomier over endelige felter [1] . I den reduceres faktoriseringen af et polynomium til irreducerbare faktorer over et felt til at finde rødderne af nogle andre polynomier over et felt . Samtidig var der i det originale arbejde intet bevis for rigtigheden af algoritmen [2] . Algoritmen blev færdiggjort og generaliseret til tilfældet med vilkårlige endelige felter af Michael Rabin [2] . I 1986 beskrev René Peralta en lignende algoritme [5] der løser problemet med at finde kvadratroden i et felt [6] , og i 2000 blev Peraltas metode generaliseret til at løse kubiske ligninger [7] .
I Berlekamps algoritme er et polynomium først repræsenteret som et produkt , hvor er produktet af polynomier af grad . Derefter reduceres faktoriseringen af hvert sådant gradspolynomium til at finde rødderne af det nye gradspolynomium . Artiklen, der introducerer faktoriseringsalgoritmen, foreslog også tre metoder til at finde rødderne til et polynomium i et Galois-felt . De to første reducerer det at finde rødder i en mark til at finde rødder i en mark . Den tredje metode, som er emnet for denne artikel, løser problemet med at finde rødder i feltet , som sammen med de to andre løser faktoriseringsproblemet [1] .
Den version af faktoriseringsalgoritmen foreslået af Berlekamp i hans første papir i 1967 [3] løb i , hvor er antallet af irreducerbare faktorer i polynomiet. Algoritmen var således ikke-polynomiel og var upraktisk, når primtallet var stort nok. I 1969 blev dette problem løst af Hans Zassenhaus , som viste, hvordan man kan reducere flaskehalsen i algoritmen til problemet med at finde rødderne til et eller andet polynomium [4] . I 1970 blev Berlekamps artikel genudgivet under hensyntagen til løsningerne fra Zassenhaus [1] .
I 1980 udførte Michael Rabin en grundig analyse af algoritmen, generaliserede den til at arbejde med endelige felter af formen og beviste, at fejlsandsynligheden for én iteration af algoritmen ikke overstiger [2] , og i 1981 Michael Ben- Eller styrket dette skøn til , hvor — antallet af forskellige rødder af polynomiet [8] . Spørgsmålet om eksistensen af en polynomiel deterministisk algoritme til at finde rødderne af et polynomium over et endeligt felt forbliver åbent - de vigtigste polynomielle faktoriseringsalgoritmer , Berlekamp-algoritmen og Cantor-Zassenhaus-algoritmen er sandsynlige. I 1981 viste Paul Camion [9] , at en sådan algoritme eksisterer for ethvert givet tal , men dette resultat er rent teoretisk, og spørgsmålet om muligheden for at konstruere de mængder, som er beskrevet af ham i praksis, forbliver åbent [10] .
I den første udgave af andet bind af "The Art of Programming " om numeriske algoritmer, skriver Donald Knuth , at lignende faktoriseringsprocedurer var kendt i 1960, men sjældent blev fundet i det offentlige domæne [4] . Et af de første offentliggjorte eksempler på brugen af metoden kan findes i arbejdet af Golomb , Welsh og Hales fra 1959 om faktorisering af trinomialer over , hvor et særligt tilfælde blev overvejet [11] .
Lad være et ulige primtal. Overvej et polynomium over feltet af rester modulo . Det er nødvendigt at finde alle tal således, at for alle mulige [2] [12] .
Lad . At finde alle rødderne af et sådant polynomium svarer til at opdele det i lineære faktorer. For at finde en sådan partition er det nok at lære at opdele polynomiet i to vilkårlige faktorer og derefter køre rekursivt ind i dem. For at gøre dette introducerer vi et polynomium , hvor er et tilfældigt tal fra . Hvis et sådant polynomium kan repræsenteres som et produkt , så betyder det i form af det oprindelige polynomium at , hvilket giver en faktorisering af det oprindelige polynomium [1] [12] .
Ifølge Euler-kriteriet er nøjagtigt en af følgende egenskaber opfyldt for ethvert monomer [1] :
Således, hvis det ikke er deleligt med , som kan kontrolleres separat, så er det lig med produktet af de største fælles divisorer og [12] .
Ovenstående fører til følgende algoritme [1] :
Hvis det også divideres med et eller andet polynomium , der ikke har rødder i , så vil der ved beregning med og fås en opdeling af det kvadratfrie polynomium i ikke-trivielle faktorer, så algoritmen giver dig mulighed for at finde alle rødderne af evt. polynomier over , og ikke kun dem, der er opdelt i et produkt af monomer [12] .
Lad det være nødvendigt at løse en sammenligning , hvis løsninger er elementerne og hhv. At finde dem svarer til at faktorisere et polynomium over et felt . I dette særlige tilfælde er problemet forenklet, da det for løsningen er nok kun at beregne . For det resulterende polynomium vil præcis et af udsagn være sandt:
I det tredje tilfælde skal den resulterende monomial være lig med eller , eller . Dette gør det muligt at skrive løsningen som [1] .
EksempelLad os løse sammenligningen . For at gøre dette skal du faktorisere . Lad os overveje de mulige værdier :
Verifikation viser det og er gyldigt .
Algoritmen finder en opdeling i ikke-trivielle faktorer i alle tilfælde, bortset fra dem, hvor alle tal er rester eller ikke-rester på samme tid. Ifølge teorien om cyklotomi [1] kan sandsynligheden for en sådan hændelse for det tilfælde, hvor de selv er både rester eller ikke-rester på samme tid (det vil sige, når det ikke er egnet til vores procedure) estimeres som [8] , hvor er antallet af forskellige tal blandt [1] . Således overstiger sandsynligheden for algoritmefejl ikke .
Det er kendt fra teorien om endelige felter , at hvis graden af et irreducerbart polynomium er , så er et sådant polynomium en divisor og er ikke en divisor for .
Således sekventielt overvejer polynomier hvor og for , Vi kan opdele polynomiet i faktorer af formen , hvor er produktet af alle irreducible polynomier af grad , der deler polynomiet . Ved at kende graden af , kan vi bestemme antallet af sådanne polynomier lig med . Lad . Hvis vi betragter polynomiet , hvor , så skal rækkefølgen af et sådant polynomium i feltet dividere tallet . Hvis ikke deleligt med , Så er polynomiet deleligt med men ikke med .
Baseret på dette foreslog Zassenhaus at lede efter divisorer af et polynomium på formen , hvor er en tilstrækkelig stor divisor , for eksempel . I et bestemt tilfælde opnås præcis Berlekamp-metoden som beskrevet ovenfor [4] .
Trin for trin kan køretiden for en iteration af algoritmen estimeres som følger, idet det antages, at graden af polynomiet er :
Der kan således udføres én iteration af algoritmen for aritmetiske operationer med elementer , og at finde alle polynomiets rødder kræver et gennemsnit [8] . I det særlige tilfælde med at udtrække kvadratroden er værdien to, så køretiden estimeres som én iteration af algoritmen [12] .
Talteoretiske algoritmer | |
---|---|
Enkelthedstest | |
At finde primtal | |
Faktorisering |
|
Diskret logaritme | |
Finder GCD | |
Modulo aritmetik | |
Multiplikation og division af tal | |
Beregning af kvadratroden |