當前位置:首頁 » 操作系統 » 梅森旋轉演算法

梅森旋轉演算法

發布時間: 2022-05-18 18:09:03

『壹』 我想知道各種產生隨機數的演算法循環周期一次是多長。謝謝大家。

盡管是偽隨機數,但也是沒有規律的,唯一的規律是n=無窮的情況下,近似服從正態分布。

電腦所產生的隨機數規律與程序編程演算法有關,可以根據演算法讓隨機數有規律,也可以是無規律,如何找規律都要取決於演算法和隨機數范圍數據,一個比較大較難的隨機數是無任何規律的。

稱為是隨機數,所以也不存在循環問題,而是在一定數據范圍內數字隨機出現,而不是按排序出現。按排序出現的不能稱為隨機數。

選取足夠大的正整數M和任意自然數n0,a,b,由遞推公式:

ni+1=(af(ni)+b)mod M i=0,1,…,M-1

生成的數值序列稱為是同餘序列。當函數f(n)為線性函數時,即得到線性同餘序列:

ni+1=(a*ni+b)mod M i=0,1,…,M-1

以下是線性同餘法生成偽隨機數的偽代碼:

Random(n,m,seed,a,b)

{

r0 = seed;

for (i = 1;i<=n;i++)

ri = (a*ri-1 + b) mod m

}

其中種子參數seed可以任意選擇,常常將它設為計算機當前的日期或者時間;m是一個較大數,可以把它取為2w,w是計算機的字長;a可以是0.01w和0.99w之間的任何整數。

應用遞推公式產生均勻分布隨機數時,式中參數n0,a,b,M的選取十分重要。

(1)梅森旋轉演算法擴展閱讀:

隨機數在密碼學中非常重要,保密通信中大量運用的會話密鑰的生成即需要真隨機數的參與。如果一個隨機數生成演算法是有缺陷的,那麼會話密鑰可以直接被推算出來。若果真發生這種事故,那麼任何加密演算法都失去了意義。

密碼學中大量利用偽隨機數生成器的應用還有流密碼。流密碼的著名例子是RC4。流密碼的原理是利用一個密碼學安全的偽隨機數生成器根據密鑰產生一串密碼學安全的偽隨機比特列,再將消息與上述隨機比特列按位異或運算。

『貳』 python中,哪個選項是random庫中用於生成隨機小數的函數

python中,「random()」是random庫中用於生成隨機小數的函數。

python中用於生成偽隨機數的函數庫是random,因為是標准庫,使用時候只需要import random;random庫包含兩類函數,常用的共8個:

基本隨機函數:seed(),random()

擴展隨機函數:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()

(2)梅森旋轉演算法擴展閱讀:

random庫採用梅森旋轉演算法(Mersennne Twister)生成偽隨機數序列,可用於除隨機性要求更高的加解密演算法外的大多數工程應用。

使用random庫的主要目的是生成隨機數;該庫提供了不同類型的隨機數函數,所有函數都是基於最基本的random.random()函數擴展實現。

『叄』 我的世界村莊種子是多少

我的世界村莊種子為:37826。

相關介紹:

37826屬於超大型村莊種子,裡面中會有三個村莊,有鐵匠鋪、豐富的煤礦等。

一個世界生成後,其種子便已經確定。默認情況下游戲會自動選擇種子(使用系統時間)。但玩家也可以手動設置。使用相同的種子可以重復玩相同的世界,種子也可以用於與其他玩家分享世界。種子的設置可以用數字(包括負數)、字元等,非純數字種子會被自動轉換成純數字。

(3)梅森旋轉演算法擴展閱讀

游戲特點:

在我的世界游戲中,玩家們可以在游戲中自由選擇模式(生存、創造、冒險等模式),在各種模式中體驗不一樣的有趣玩法,在生存模式中享受打怪、冒險等多種樂趣,在創造模式下享受當創世神的樂趣。

基岩版中的種子,無論是使用數字還是字元串,都有總共4,294,967,296種可能的世界。這個結論對於64位版本的Windows 10版同樣成立。這是由於基岩版使用了32位的梅森旋轉演算法,只接受32位的種子。

『肆』 求大神說下關於我的世界種子的原理

通過有限的數字生成無限的世界不難,這串數字經過某個函數公式計算後得的一個無理數(無限不循環的小數),然後再通過這個無理數生成對應的世界也當然是無限的了.比如我輸入一個數字3作為種子,對3開平方可以得到一個無理數1.732050.....,然後再以這個無限的數字生成對應的無限的方塊,(mc的生成計算是要比這復雜的多的多了).
游戲和現實世界是沒法互相並論,至少mc或者說是當今的科技還遠遠不夠,如果考慮因果定律的話,現實宇宙也許有種子類似的東西,不過這個話題相當縹緲,不是幾句話就說得清,一輩子可能也弄不明白.

『伍』 計算機程序中 Randomize 語句如何執行

你這個涉及到:隨機數理論,隨機數產生原理和方法,偽隨機數發生器的概念。是一個數學裡面的大概念。。。

簡單地講,隨機數可以分「真」和「偽」隨機數兩種。 真正的隨機數,一般是通過硬體,根據物理現象,比如白雜訊等產生;通過演算法產生的是偽隨機,一般通過一個所謂的種子(數),初始化後,通過不同的演算產生隨機數。當然產生的質量好壞,難易程度都是有分別的。

一般電腦語言中如R,Python,Ruby,IDL,Free Pascal,php,Maple,Matlab,GMP以及C++ 11,都是採用的Mersenne Twister即梅森旋轉演算法。具體實施的時候,是採用梅森旋轉的一個變體演算法MT19937參數一個32位整數序列,用的種子一般就是電腦上的當前時間,也就是初始化。(pascal裡面用Randomize, 然後調用random()產生偽隨機數;c裡面srand (time(NULL))初始化,然後rand()產生隨機數) --- 主要考慮的是方便、快捷。 密碼學和應用裡面都需要用到隨機數,根據等級的需要,需要採用更好的隨機產生演算法。

至於你說的范圍, 根據上面提到的「偽」隨機演算法,產生了的隨機數是一個32位,范圍是0~2^(32-1),但不同語言,不同版本在實現的時候,都規定了一個上下,即C中的RAND_MAX (GCC里是31位的0x7FFFFFFF;vc++ 2012裡面則是0x7fff)。如果你希望產生一個自己的范圍內的隨機數[min, max],那麼作一個轉換映射,那麼你的隨機數=min + rand() / (RAND_MAX / (max - min + 1) + 1);

因此:我們一般提到的隨機數,都是「偽」隨機數。調用語言的函數庫所提供的隨機數發生器,都是通過演算法產生的,而這些演算法都是由數學背景在裡面,產生的質量有好有壞,需要根據自己的需要酌情處理。

『陸』 PHP 中iVBOR是什麼函數生成的

在PHP編程中,我們有時候在高並發的時候生成很多個不同的ID,用於標識一些東西。雖然有很多方法,可以實現這一過程,不過PHP還是給我們提供了一個很好的函數,用於生成不同的唯一的ID
PHP中的uniqid()函數
函數定義
uniqid() 函數基於以微秒計的當前時間,生成一個唯一的 ID。
語法
uniqid(prefix,more_entropy)

注釋:
prefix可選。為 ID 規定前綴。如果兩個腳本恰好在相同的微秒生成 ID,該參數很有用。
more_entropy 可選。規定位於返回值末尾的更多的熵。
舉例說明
利用uniqid()生成一個ID
<?php//XXXXX
echo '輸出一個唯一的ID標示符:'.uniqid();?>
echo '輸出一個唯一的CHAODIQUAN.COM 標示符:'.uniqid();?>
利用for循環與uniqid()函數,連續生成10個不同的ID標識
代碼
<?php//XXXXXXfor($i=1;$i<11;$i++){
echo '輸出第'.$i.'個標示符:'.uniqid().'<br/>';}?>

對於uniqid()函數補充

如果我們單純使用 uniqid()
這個方法,不帶任何參數的話,這個方法只能保證單個進程,在同一個毫秒內是唯一的。如果使用uniqid("", true)。
帶了一個墒值,自身已經有一個隨機的方式能保證生成的id的隨機性了。但是由於線性同餘是比較簡單的生成隨機數的演算法,隨機性有可能還不夠,所以,網上流傳的一種更隨機數值的方式是:
uniqid(mt_rand(), true)

其中
mt_rand() 生成隨機數就不是使用線性同餘生成隨機數的方式了,而是使用 Mersenne Twister Random Number
Generator (梅森旋轉演算法)。換句話說,上面這個 id 由兩種隨機演算法 +
時間戳生成。基本上,這個演算法在很大程度上能保證唯一性了(如果要問沖突率的話,估計只有數學系學生能研究出來了...)。
上面的這個給出的id會有一個點號,而且長度並不是128bit。如果希望生成uuid,就需要一個hash,不管是md5,sha1 都是可以選擇的。所以網上又有一種生成唯一碼的方式。
md5(uniqid(mt_rand(), true))
復制
但是,本質上,這兩種方式的隨機性是相等的。

『柒』 梅森旋轉演算法可以在電腦上運行嗎。就是軟體運行。不需要梅森旋轉演算法的硬體。謝謝。

可以,但是模擬器很小,只能使用鍵盤控制很不方便,建議不要使用,而且不是每個模擬器都能使用的

『捌』 梅森旋轉素數演算法(MT199937)c語言代碼

#include<cstdio> /*Periodparameters*/
#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL /*constantvectora*/
#define UPPER_MASK 0x80000000UL/*mostsignificantw-rbits*/
#define LOWER_MASK 0x7fffffffUL/*leastsignificantrbits*/

static unsigned long mt[N];/*thearrayforthestatevector*/
static int mti=N+1;/*mti==N+1meansmt[N]isnotinitialized*/ /*initializesmt[N]withaseed*/
void init_genrand(unsigned long s)
{
mt[0]=s & 0xffffffffUL;
for(mti=1;mti<N;mti++)
{
mt[mti]=
(1812433253UL*(mt[mti-1]^(mt[mti-1]>>30))+mti); /*SeeKnuthTAOCPVol2.3rdEd.P.106formultiplier.*//*Inthepreviousversions,MSBsoftheseedaffect*//*onlyMSBsofthearraymt[].*//*2002/01/09modifiedbyMakotoMatsumoto*/
mt[mti]&=0xffffffffUL;/*for>32bitmachines*/
}
} /*initializebyanarraywitharray-length*//*init_*//*key_lengthisitslength*/ /*slightchangeforC++,2004/2/26*/
void init_by_array(unsigned long init_key[],int key_length)
{
int i,j,k; init_genrand(19650218UL);
i=1;j=0;
k=(N>key_length?N:key_length);
for(;k;k--)
{
mt[i]=(mt[i]^((mt[i-1]^(mt[i-1]>>30))*1664525UL))
+init_key[j]+j;/*nonlinear*/
mt[i]&=0xffffffffUL;/*forWORDSIZE>32machines*/
i++;j++; if(i>=N){mt[0]=mt[N-1];i=1;}if(j>=key_length)j=0;
}
for(k=N-1;k;k--)
{ mt[i]=(mt[i]^((mt[i-1]^(mt[i-1]>>30))*1566083941UL)) -i;/*nonlinear*/
mt[i]&=0xffffffffUL;/*forWORDSIZE>32machines*/i++;
if(i>=N){mt[0]=mt[N-1];i=1;} }
mt[0]=0x80000000UL;
/*MSBis1;assuringnon-zeroinitialarray*/ } /*generatesarandomnumberon[0,0xffffffff]-interval*/
unsigned long genrand_int32(void)
{
unsigned long y;
static unsigned long mag01[2]={0x0UL,MATRIX_A};/*mag01[x]=x*MATRIX_Aforx=0,1*/
if(mti>=N){/*generateNwordsatonetime*/ int kk;
if(mti==N+1)/*ifinit_genrand()hasnotbeencalled,*/
init_genrand(5489UL);/*adefaultinitialseedisused*/
for(kk=0;kk<N-M;kk++)
{
y=(mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);mt[kk]=mt[kk+M]^(y>>1)^mag01[y&0x1UL];
} for(;kk<N-1;kk++)
{ y=(mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk]=mt[kk+(M-N)]^(y>>1)^mag01[y&0x1UL];
}
y=(mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[N-1]=mt[M-1]^(y>>1)^mag01[y&0x1UL];mti=0; }
y=mt[mti++]; /*Tempering*/
y^=(y>>11); y^=(y<<7)&0x9d2c5680UL;y^=(y<<15)&0xefc60000UL;y^=(y>>18);
return y;
} /*generatesarandomnumberon[0,0x7fffffff]-interval*/
long genrand_int31(void)
{ return(long)(genrand_int32()>>1); } /*generatesarandomnumberon[0,1]-real-interval*/
double genrand_real1(void)
{ return genrand_int32()*(1.0/4294967295.0); }
double genrand_real2(void)
{ return genrand_int32()*(1.0/4294967296.0);/*dividedby2^32*/ } /*generatesarandomnumberon(0,1)-real-interval*/
double genrand_real3(void)
{ return(((double)genrand_int32())+0.5)*(1.0/4294967296.0);/*dividedby2^32*/ }
/*generatesarandomnumberon[0,1)with53-bitresolution*/
double genrand_res53(void)
{ unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;
return(a*67108864.0+b)*(1.0/9007199254740992.0); } /*,2002/01/09added*/
int main(void){
int i; unsigned long init[4]={0x123,0x234,0x345,0x456},length=4;init_by_array(init,length); printf("1000outputsofgenrand_int32()\n");
for(i=0;i<1000;i++)
{
printf("%10lu",genrand_int32());
if(i%5==4)printf("\n"); }
printf("\n1000outputsofgenrand_real2()\n");
for(i=0;i<1000;i++){ printf("%10.8f",genrand_real2());
if(i%5==4)printf("\n"); }
return 0;
}

『玖』 有個梅森旋轉素數演算法(MT199937)c語言代碼相關的問題,希望大神們能給我講解一下,感激不盡呀。

這個是宏定義,#define
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,標准只定義了#和##兩種操作。#用來把參數轉換成字元串,##則用來連接前後兩個參數,把它們變成一個字元串。
#include<stdio.h>
#define paster(n) printf("token"#n"=%d\n",token##n)
int main(int argc,char *argv[])
{
int token9=10;
paster(9);
return 0;
}
輸出為:token 9 = 10
詳細請看網路:#define

『拾』 python中的隨機數是怎麼實現的

PYTHON中的偽隨機數發生器用的是梅森旋轉演算法。
梅森旋轉演算法(Mersenne twister)是一個偽隨機數發生演算法。由松本真和西村拓士在1997年開發,基於有限二進制欄位上的矩陣線性遞歸。可以快速產生高質量的偽隨機數,修正了古典隨機數發生演算法的很多缺陷。
梅森旋轉演算法是R、Python、Ruby、IDL、Free Pascal、PHP、Maple、Matlab、GNU多重精度運算庫和GSL的默認偽隨機數產生器。從C++11開始,C++也可以使用這種演算法。
整個演算法主要分為三個階段:獲得基礎的梅森旋轉鏈;對於旋轉鏈進行旋轉演算法;對於旋轉演算法所得的結果進行處理。
演算法實現的過程中,參數的選取取決於梅森素數,故此得名。
梅森素數由梅森數而來。所謂梅森數,是指形如2↑p-1的一類數,其中指數p是素數,常記為Mp 。如果梅森數是素數,就稱為梅森素數。
例如4-1=3,8-1=7,16-1=15(不是素數),32-1=31,64-1=63(不是素數)等等。

熱點內容
個別用戶訪問不了騰訊雲伺服器 發布:2025-01-14 18:03:27 瀏覽:275
oracle鏈接sqlserver 發布:2025-01-14 17:58:33 瀏覽:729
sql完全手冊 發布:2025-01-14 17:53:03 瀏覽:248
幻三腳本下 發布:2025-01-14 17:20:20 瀏覽:909
我的世界基岩版如何創自己的伺服器 發布:2025-01-14 17:15:01 瀏覽:328
花果演算法 發布:2025-01-14 17:09:57 瀏覽:774
c語言輸出格式符 發布:2025-01-14 17:09:12 瀏覽:536
ftp伺服器下載後 發布:2025-01-14 17:07:34 瀏覽:79
怎麼登錄微博密碼 發布:2025-01-14 16:32:02 瀏覽:64
linux伺服器論文 發布:2025-01-14 16:31:12 瀏覽:846