Invers kongruent metode

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 30. april 2020; checks kræver 3 redigeringer .

Den inverse kongruentielle metode (eller Eichenauer-Lehn-generator , også muligvis Eichenauer-Lehn ) er en pseudo-tilfældig talgenereringsmetode baseret på at bruge det inverse modulo-tal til at generere det næste medlem af sekvensen.

Beskrivelse

Den omvendte kongruentielle metode blev foreslået af Eichenauer og Lehn i 1986 [1] som en erstatning for den ikke-gitter lineære kongruentielle metode [2] .

Denne metode består i at beregne en sekvens af tilfældige tal i ringen af ​​rester modulo et naturligt tal .

Den væsentligste forskel fra den lineære metode er, at når du genererer en sekvens, bruges tallet invers til det forrige element i stedet for selve det forrige element.

Generatorparametrene er [3] :

 - salt
 - multiplikator
 - stigning

I tilfælde af et simpelt n

Værdien af ​​sekvensmedlemmerne er givet som:

  hvis
hvis

I tilfælde af sammensat n

Hvis tallet er sammensat, beregnes elementerne i sekvensen som følger:

 

Parametrene er valgt på en sådan måde, at .

Periode

Sekvensen er periodisk, og perioden overstiger ikke ringens dimension . Den maksimale periode nås, hvis polynomiet er primitivt . En tilstrækkelig betingelse for sekvensens maksimale periode er et sådant valg af konstanter , og at polynomiet er irreducerbart [4] .

I tilfælde af en komposit er den maksimalt mulige periode ( Euler funktion ) [5] .

Eksempel

Den inverse kongruentiale generator med parametre genererer en sekvens i ringen , hvor tallene og , samt og er omvendt til hinanden. I dette eksempel er polynomiet irreducerbart i, og tallene er ikke dets rødder, på grund af hvilket perioden er maksimal og lig med .

Implementeringseksempler

Python

Koden def egcd ( a , b ): hvis a == 0 : return ( b , 0 , 1 ) ellers : g , y , x = egcd ( b % a , a ) return ( g , x - ( b // a ) * å , å ) def modinv ( a , m ): gcd , x , y = egcd ( a , m ) hvis gcd != 1 : return Ingen # modulær invers eksisterer ikke andet : return x % m def ICG ( n , a , c , frø ): hvis ( frø == 0 ): returner c return ( a * modinv ( frø , n ) + c ) % n frø = 1 n = 5 a = 2 c = 3 antal = 10 for i i området ( antal ): udskriv ( frø ) frø = ICG ( n , a , c , frø )

C++

Koden #include <iostream> bruger navneområde std ; int mod_inv ( int a , int n ) { int b0 = n , t , q ; int x0 = 0 , x1 = 1 ; hvis ( n == 1 ) returner 1 ; mens ( a > 1 ) { q = a / n ; t = n , n = a % n , a = t ; t = x0 , x0 = xl - q * x0 , xl = t ; } if ( x1 < 0 ) x1 += b0 ; returnere x1 ; } int ICG ( int n , int a , int c , int frø ) { hvis ( frø == 0 ) returnere c ; return ( a * mod_inv ( frø , n ) + c ) % n ; } int main ( void ) { int frø = 1 ; int n = 5 ; int a = 2 ; int c = 3 ; int count = 10 ; for ( int i = 0 ; i < tælle ; i ++ ) { cout << frø << endl ; frø = ICG ( n , a , c , frø ); } returnere 0 ; }

Sammensatte inverse generatorer

Den største ulempe ved inverse kongruentielle generatorer er stigningen i beregningskompleksitet med stigende periode. Denne mangel korrigeres i sammensatte inverse kongruentiale generatorer.

Konstruktionen af ​​sammensatte inverse generatorer er en kombination af to eller flere invers kongruente generatorer.

Lade være  forskellige primtal, hver . For hvert indeks indenfor , lad være  en sekvens af elementer med periode . Med andre ord .

Lade være  en sekvens af tilfældige tal inden for , hvor .

Den resulterende sekvens er defineret som summen af: .

Perioden for den resulterende sekvens [6] .

En af fordelene ved denne tilgang er evnen til at bruge inverse kongruentiale generatorer, der kører parallelt.

Et eksempel på en sammensat invers generator

Lad og . For nemheds skyld, lad os sætte og . For hver vi beregner .

Så . Det vil sige, at vi fik en sekvens med et punktum .

For at slippe af med brøktal kan vi gange hvert element i den resulterende sekvens med og få en sekvens af heltal:

Fordele ved inverse kongruentiale generatorer

Inverse kongruentiale generatorer bruges til praktiske formål af en række årsager.

For det første har inverse kongruente generatorer ret god ensartethed [7] , derudover er de resulterende sekvenser fuldstændig blottet for den gitterstruktur, der er karakteristisk for lineære kongruente generatorer [1] [8] [9] .

For det andet har de binære sekvenser opnået ved hjælp af ICG ikke uønskede statistiske afvigelser. Sekvenserne opnået ved denne metode er blevet verificeret ved en række statistiske test og forbliver stabile med skiftende parametre [7] [8] [10] [11] .

For det tredje har sammensatte oscillatorer de samme egenskaber som enkelte lineære inverse oscillatorer [12] , men samtidig har de en periode, der væsentligt overstiger perioden for enkeltoscillatorer [13] . Derudover giver enheden af ​​sammensatte generatorer mulighed for at opnå en høj ydeevneforøgelse, når den bruges på multiprocessorsystemer [14] .

Der er en algoritme, der tillader udvikling af sammensatte generatorer med forudsigelig periodelængde og kompleksitet, samt gode statistiske egenskaber for outputsekvenserne [15] .

Ulemper ved inverse kongruentiale generatorer

Den største ulempe ved inverse kongruentiale generatorer er den langsomme hastighed for at generere elementer i sekvensen: beregningen af ​​et element i sekvensen kræver multiplikationsoperationer [16] .

Noter

  1. 1 2 Knut, 2013 , s. 45.
  2. Eichenauer, Lehn, 1986 .
  3. Hellekalek, 1995 , s. 255: "Vi skal vælge modulet p, en multiplikator a, en additiv led b."
  4. Amy Glen: On the Period Length of Pseudorandom Number Sequences, 2002 , 5.3, s. 67: "Hvis x2-bx-a er et primitivt polynomium over Fp, så har Xi fuld periodelængde p".
  5. Amy Glen: On the Period Length of Pseudorandom Number Sequences, 2002 , 5.4, s. 69: "Sekvensen Xi er rent periodisk med periodelængde d ≤ φ(m)".
  6. Hellekalek, 1995 , s. 256: "Det er elementært at se, at perioden for sekvensen (Xn)n er lig med M := p1*p2*...* pr".
  7. 1 2 Eichenauer-Herrmann, Niederreiter, 1992 .
  8. 1 2 Eichenauer-Herrmann, 1991 .
  9. Eichenauer-Herrmann, Grothe, Niederreiter et al., 1990 , s. 81: "Disse generatorer viser ikke den simple gitterstruktur af de meget anvendte lineære kongruentiale generatorer."
  10. Eichenauer-Herrmann, 1993 .
  11. Hellekalek, 1995 , s. 261: "De fremragende teoretiske og empiriske egenskaber ved inversive metoder forbliver stabile under variationen af ​​parametre, forudsat at vi har maksimal periodelængde".
  12. Bubicz, Stoklosa, 2006 , s. 2: "Sammensat tilgang giver de samme fremragende egenskaber ved producerede sekvenser som enkelte inversive generatorer".
  13. Bubicz, Stoklosa, 2006 , s. 2: "Sammensatte inversive generatorer gør det muligt at opnå periodelængde betydeligt større end opnået med en enkelt ICG".
  14. Bubicz, Stoklosa, 2006 , s. 2: "De ser ud til at være designet til anvendelse med multiprocessor parallelle hardwareplatforme."
  15. Bubicz, Stoklosa, 2006 , s. 2: "Der findes en stabil og enkel måde at vælge parameter på, baseret på Chou-algoritmen. Det garanterer maksimal længde".
  16. Anne Gille-Genest: Pseudo-Random Numbers Generators, 2012 , s. 12: "Den største ulempe ved de begge inverse generatorer er, at en beregning af et tilfældigt tal tager O(log m ) multiplikation i F m , så algoritmen er ikke hurtig."

Litteratur

Bøger
  • Knut D. E. The Art of Programming : Bind 2. Opnåede algoritmer - 3 - M . : Williams , 2013. - 828 s. — ISBN 978-5-8459-0081-4
Artikler