Perangkat lunak penghasil angka acak yang sempurna secara statistik
Masalah pembuatan program semacam itu dibahas secara luas dalam literatur matematika tahun 1965-1975, pada saat yang sama kompleksitas masalah ini dicatat.
Matematika modern telah membuat kemajuan yang signifikan dalam hal ini.
Mereka dapat diakses oleh spesialis yang sempit, tetapi sulit untuk dipahami, dan telah dihapus dari diskusi luas.
Di sini saya menawarkan solusi sederhana untuk masalah ini, mungkin tidak layak untuk diperhatikan ahli matematika hebat, tetapi cukup mudah diakses oleh pemula.
Saya dapat membuat program yang menghasilkan urutan karakter '0' dan '1' dengan properti statistik yang sangat baik.
Desain programnya sederhana dan mudah dimengerti.
Urutan acak dari nol dan satu harus memiliki properti berikut:
- jumlah nol dan satu di semua fragmen urutan ini kira-kira sama;
- jumlah kemunculan fragmen 00, 01, 10 dan 11 selalu kurang lebih sama;
- hal yang sama berlaku untuk semua jenis fragmen dengan panjang 3, 4, 5, dan seterusnya.
Jelas bahwa program dapat menghitung jumlah kemunculan fragmen tersebut dalam urutan yang sudah terbentuk dan menghasilkan simbol berikutnya untuk mendukung persamaan yang terdaftar.
Jika Anda menganalisis persamaan ini dalam urutan menaik dari panjang fragmen, program akan melakukan looping dengan cepat.
, , .
?
'0' '1' ( ), , .
, .
, ( lenmask).
, lenmask .
.
s0 s1, .
s0 s1 , s0>s1 1, 0 .
s0 s1 , , 0 1 .
, , .
, , , .
JAVA .
.
.
.
.
Jumlah kemunculan topeng ini dalam urutan yang dihasilkan dihitung.
Seperti yang diharapkan, hasil kontrol menunjukkan bahwa jumlah kejadian tersebut bergantung pada panjang sungkup dan hampir tidak bergantung pada pengisiannya.
Mengejutkan bahwa program yang sepenuhnya mendasar memungkinkan seseorang memperoleh hasil yang tampaknya tidak dapat dicapai dengan cara sederhana.
aplikasi
Teks program JAVA
//gerase = generator random sequence // // package ikojar; public class gerase { public static void main(String[] args) { // //, // beg // int beg=5, // lenrez=2048, //maxpower // // // // // // // // maxpower=10; // //rs random symbol, , // // , // , byte rs=0; // result // byte[] result=new byte[lenrez]; // mask , // , // // , // byte[] mask=new byte[lenrez]; // // beg // beg // result int p=beg,bp=0; for(;;) {//cir raspak result[bp]=(byte)(p%2); bp++; if(p<2)break; p/=2; }//cir raspak // String so=" "; for(int i=0;i<bp;i++)so+=String.valueOf(result[i]); System.out.println(so); // System.out.println(" "); // for(int pos=bp;pos<lenrez;pos++) {//circlepos // hs(hard symbol) // , // // , // rs int hs=0; // //lenmask for(int lenmask=pos-2;lenmask>=0;lenmask--) {//lenmask // // for(int i=0;i<lenmask;i++)mask[i]=result[pos+i-lenmask]; //s0 s1 // // // // int s0=0,s1=0; // // for(int i=lenmask;i<pos;i++) {//calcS01 //eqm // int eqm=1; // eqm for(int i1=0;i1<lenmask;i1++)if(mask[i1]!=result[i+i1-lenmask]){eqm=0;break;} // , // if(eqm==1)if(result[i]==0)s0++;else s1++; }//calcS01 // // s0 s1 // hs 1, // if(s0<s1){result[pos]=0;hs=1;break;} if(s1<s0){result[pos]=1;hs=1;break;} }//lenmask if(hs==1)continue; // , // rs result[pos]=rs;rs=(byte)(1-rs); }//circlepos // // so=""; for(int i=0,c=0;i<lenrez;i++) {//out rez so+=String.valueOf(result[i]); c++; if(c==64){c=0;System.out.println(so);so="";} }//out rez System.out.println(so); // System.out.println (" "); // //pw , // for(int pw=1;pw<maxpower;pw++) {//pw // // // // // // 0 pm-1 // pm int pm=1;for(int i=0;i<pw;i++)pm*=2; // , // System.out.println(" "+String.valueOf(pw)); int mincount=lenrez,maxcount=0; // 0 pm-1, // for(int im=0;im<pm;im++) {//im // im p=im; for(int i=pw-1;i>=0;i--) {mask[i]=(byte)(p%2);p/=2;} // // // s // int s=0; for(int i0=pw;i0<=lenrez;i0++) {//i0 // int eqm=1; for(int i1=0;i1<pw;i1++)if(result[i0+i1-pw]!=mask[i1]){eqm=0;break;} if(eqm==1)s++; }//i0 // // // //System.out.println(String.valueOf(s)); // if(s<mincount)mincount=s; if(s>maxcount)maxcount=s; }//im System.out.println(" ="+String.valueOf(mincount)); System.out.println(" ="+String.valueOf(maxcount)); }//pw return; }//main }//class