當前位置:首頁 » 操作系統 » 隨機數的演算法

隨機數的演算法

發布時間: 2023-08-22 06:20:46

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(不是素數)等等。

Ⅱ 計算器如何產生隨機數

一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的演算法不停迭代產生隨機數,下面介紹兩種方法:
一般種子可以以當前的系統時間,這是完全隨機的

演算法1:平方取中法。
1)將種子設為X0,並mod 10000得到4位數
2)將它平方得到一個8位數(不足8位時前面補0)
3)取中間的4位數可得到下一個4位隨機數X1
4)重復1-3步,即可產生多個隨機數
這個演算法的一個主要缺點是最終它會退化成0,不能繼續產生隨機數。

演算法2:線性同餘法
1)將種子設為X0,
2)用一個演算法X(n+1)=(a*X(n)+b) mod c產生X(n+1)
一般將c取得很大,可產生0到c-1之間的偽隨機數
該演算法的一個缺點是會出現循環。

Ⅲ 詳解隨機數的生成

隨機數參與的應用場景大家一定不會陌生,比如密碼加鹽時會在原密碼上關聯一串隨機數,蒙特卡洛絕喊雀演算法會通過隨機數采樣等等。Python內置的random模塊提供了生成隨機數的方法,使用這些方法時需要導入random模塊。

下面介紹下Python內置的random模塊的幾種生並早成隨機數滲租的方法。

1、random.random()隨機生成 0 到 1 之間的浮點數[0.0, 1.0)。注意的是返回的隨機數可能會是 0 但不可能為 1,即左閉右開的區間。

2、random.randint(a , b)隨機生成 a 與 b 之間的整數[a, b],a<=n<=b,隨機整數不包含 b 時[a, b)可以使用 random.randrange() 方法。

3、random.randrange(start,stop,step)按步長step隨機在上下限范圍內取一個隨機數,start<=n<stop。

4、random.uniform(a, b)隨機生成 a 與 b 之間的浮點數[a, b],a<=n<=b。

5、random.choice()從列表中隨機取出一個元素,比如列表、元祖、字元串等。注意的是,該方法需要參數非空,否則會拋出 IndexError 的錯誤。

6、random.shuffle(items) 把列表 items 中的元素隨機打亂。注意的是,如果不想修改原來的列表,可以使用 模塊先拷貝一份原來的列表。

7、random.sample(items, n)從列表 items 中隨機取出 n 個元素。

Python 的random模塊產生的隨機數其實是偽隨機數,依賴於特殊演算法和指定不確定因素(種子seed)來實現。如randint方法生成一定范圍內的隨機數,會先指定一個特定的seed,將seed通過特定的隨機數產生演算法,得到一定范圍內隨機分布的隨機數。因此對於同一個seed值的輸入產生的隨機數會相同,省略參數則意味著使用當前系統時間秒數作為種子值,達到每次運行產生的隨機數都不一樣。

numpy庫也提供了random模塊,用於生成多維度數組形式的隨機數。使用時需要導入numpy庫。

下面介紹下numpy庫的random模塊的幾種生成隨機數的方法。

1、numpy.random.rand(d0,d1,…,dn)

2、numpy.random.randn(d0,d1,…,dn)

3、numpy.random.randint(low, high=None, size=None, dtype=』l』)

4、numpy.random.seed()

Ⅳ 51單片機如何生成隨機數

用定時器加rand()隨機函數來實現。

rnda=rand()%2;

rndb=rand()%3;

單片機上電之後通過按鍵去啟動取隨機數,若是單片機上電就立即取隨機數的話,那每次上電隨機的結果都是一樣的。然後是0到9不重復的隨機數,程序中用了循環來判斷是否和前面取的隨機數相同,相同則進入下次取隨機數,不同則存入數組。

在程序中,用「#include<absacc.h>」即可使用其中定義的宏來訪問絕對地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD

具體使用可看一看absacc.h便知,例如:

rval=CBYTE[0x0002];指向程序存貯器的0002h地址

rval=XWORD[0x0002];指向外RAM的0002h地址

_at_關鍵字

直接在數據定義後加上_at_ const即可,但是注意:

(1)絕對變數不能被初使化;

(2)bit型函數及變數不能用_at_指定。

例如:

idata struct link list _at_ 0x40;指定list結構從40h開始。

xdata char text[25b] _at_0xE000;指定text數組從0E000H開始

提示:如果外部絕對變數是I/O埠等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。

(4)隨機數的演算法擴展閱讀:

統計學偽隨機性。統計學偽隨機性指的是在給定的隨機比特流樣本中,1的數量大致等於0的數量,同理,「10」「01」「00」「11」四者數量大致相等。類似的標准被稱為統計學隨機性。滿足這類要求的數字在人類「一眼看上去」是隨機的。

密碼學安全偽隨機性。其定義為,給定隨機樣本的一部分和隨機演算法,不能有效的演算出隨機樣本的剩餘部分。

真隨機性。其定義為隨機樣本不可重現。實際上只要給定邊界條件,真隨機數並不存在,可是如果產生一個真隨機數樣本的邊界條件十分復雜且難以捕捉(比如計算機當地的本底輻射波動值),可以認為用這個方法演算出來了真隨機數。

Ⅳ 結合生活中的實例,描述求解隨機數的演算法流程圖

生活中的實例:一個老太太買白菜,她給挑出的10棵白菜排一下序,然後她拿出了隨身攜帶的筆記本電腦,輸入 。

#include "stdio.h"

#define N 10

main()

{

int a[N];

int i,j,p,temp;

for(i=0;iscanf("%d",&a[i]);

for(i=0;i{

p=i; for(j=i+1;jif(a[j]temp=a[i];a[i]=a[p];a[p]=temp;

}

printf(" ");

for(i=0;iprintf("%d ",a[i]);

}

然後得到了白菜的重量排序。

傳統的流程圖用流程線指出各框的執行順序,對流程線的使用沒有嚴格限制。因此,使用者可以毫不受限制地使流程隨意地轉來轉去,使流程圖變得毫無規律,閱讀者要花很大精力去追蹤流程,使人難以理解演算法的邏輯。

如果我們寫出的演算法能限制流程的無規律任意轉向,而像一本書那樣,由各章各節順序組成,那樣,閱讀起來就很方便,不會有任何困難,只需從頭到尾順序地看下去即可。

為了提高演算法的質量,使演算法的設計和閱讀方便,必須限制箭頭的濫用,即不允許無規律地使流程亂轉向,只能按順序地進行下去。但是,演算法上難免會包含一些分支和循環,而不可能全部由一個一個框順序組成。

如上例不是由各框順序進行的,包含一些流程的向前或向後的非順序轉移。為了解決這個問題,人們設想,如果規定出幾種基本結構,然後由這些基本結構按一定規律組成一個演算法結構,整個演算法的結構是由上而下地將各個基本結構順序排列起來的。

1966年,Bohra和Jacoplni提出了以下三種基本結構,用這三種基本結構作為表示一個良好演算法的基本單元。

Ⅵ 隨機演算法原理

展開專欄
登錄
企鵝號小編
5.7K 篇文章
關注
詳解各種隨機演算法
2018-02-06閱讀 1.4K0
轉自:JarvisChu

之前將的演算法都是確定的,即對於相同的輸入總對應著相同的輸出。但實際中也常常用到不確定的演算法,比如隨機數生成演算法,演算法的結果是不確定的,我們稱這種演算法為(隨機)概率演算法,分為如下四類:

1、數值概率演算法

用於數值問題的求解,通常是近似解

2、蒙特卡洛演算法Monte Carlo

能得到問題的一個解,但不一定是正確解,正確的概率依賴於演算法運行的時間,演算法所用的時間越多,正確的概率也越高。求問題的准確解;

3、拉斯維加斯演算法 Las Vegas

不斷調用隨機演算法求解,直到求得正確解或調用次數達到某個閾值。所以,如果能得到解,一定是正確解。

4、舍伍德演算法 Sherwood

利用隨機演算法改造已有演算法,使得演算法的性能盡量與輸入數據無關,即平滑演算法的性能。它總能求得問題的一個解,且求得的解總是正確的。

隨機數

概述

計算機產生的隨機數都是偽隨機數,通過線性同餘法得到。

方法:產生隨機序列


d稱為種子;m取值越大越好;m,b互質,常取b為質數;

熱點內容
圖片分布式存儲方案 發布:2025-03-09 08:54:49 瀏覽:57
火影手游競技場腳本 發布:2025-03-09 08:48:31 瀏覽:742
電腦如何訪問谷歌 發布:2025-03-09 08:39:37 瀏覽:172
安卓怎麼多開微信 發布:2025-03-09 08:34:02 瀏覽:594
怎麼看金蝶伺服器的ip地址 發布:2025-03-09 08:33:59 瀏覽:269
pyc在線反編譯 發布:2025-03-09 08:33:17 瀏覽:933
天龍極速腳本 發布:2025-03-09 08:33:09 瀏覽:976
刀劍神域伺服器維護到什麼時候 發布:2025-03-09 08:31:40 瀏覽:217
phppdf轉html 發布:2025-03-09 08:23:01 瀏覽:640
腳本按鍵怎麼循環 發布:2025-03-09 08:19:06 瀏覽:144