導航:首頁 > 源碼編譯 > 生成等概率隨機數演算法

生成等概率隨機數演算法

發布時間:2022-08-09 07:34:27

『壹』 如何產生一定概率的隨機數例如,按照20%、40%、40%概率生成隨機數。

這個問題很復雜。。。。。。。。。。。。一般都是先生成隨即(0,1)的數字。然後生成數字。如果大於0.小於0.2輸出第一個數字。如果0.2到0.6就是第二個數字。0.6到1就是最後一個數字。
關於如何生成01的數字。這里這點地方說不清楚的。
乘同餘法用的很多,你自己了解下吧。

『貳』 求問怎麼按照概率生產隨機數

舉例如下
如random(0,100),使(0,10)概率為0.1,(10,30)概率為0.2,(30,80)概率為0.5,等等
有個比較笨的方法,就是先確定你要取的值的范圍的概率,再去取值.比如說(0,90)0.1,(91,100)0.9,那你就先去取1-10的隨機數,如果是1,那麼再生成(0,90)的隨機數,如果是2-10,那麼你就再生成(91,100)的隨機數.雖然比較煩,但還是能控制的.

『叄』 求問如何按照概率生成隨機數

貌似沒有直接的方法,有個比較笨的方法,就是先確定你要取的值的范圍的概率,再去取值。比如說(0,90)0.1,(91,100)0.9,那你就先去取1-10的隨機數,如果是1,那麼再生成(0,90)的隨機數,如果是2-10,那麼你就再生成(91,100)的隨機數。雖然比較煩,但還是能控制的。

『肆』 請問如何以一定幾率產生隨機數

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
srand((int)time(0));
rand();
int num[4]={0};
int nRnd;
for(int i=0;i<10000;i++)
{
nRnd=1+(int)(10.0*rand()/(RAND_MAX+1));
if(nRnd==1)
num[0]++;
else if(nRnd<=3)
num[1]++;
else if(nRnd<=6)
num[2]++;
else
num[3]++;
printf("\r1:%-5d 2:%-5d 3:%-5d 4:%-5d",num[0],num[1],num[2],num[3]);
}
printf("\n");
float sum=num[0]+num[1]+num[2]+num[3];
for(int i=0;i<4;i++)
printf("%d:%%%.1f\t",i+1,num[i]*100/sum);
printf("\n");
getchar();
}

『伍』 php取隨機數概率演算法

問題有點模糊,我先暫時把「保留兩位小數」理解成「[輸出的隨機數]保留兩位小數」,而非其他因素保留多少小數。
又把「1-10」,理解成包括1和10在內其兩數之間的小數,
把10-50,理解成10.01到50.00之間的數,不包括10.00。以此類推。

<?php
functiongenRandom(){
$p=rand(1,100);
if($p<=60)$r=rand(100,1000);
elseif($p>60and$p<=85)$r=rand(1001,5000);
elseif($p>85and$p<=95)$r=rand(5001,10000);
else$r=rand(10001,20000);
return$r/100;
}
$a=array();
$total=50000;
for($i=0;$i<$total;$i++){
$c=genRandom();
if($c>=1and$c<=10)$p=0;
elseif($c>10and$c<=50)$p=1;
elseif($c>50and$c<=100)$p=2;
elseif($c>100and$c<=200)$p=3;
else$p=4;
if(!array_key_exists($p,$a))$a[$p]=1;
else$a[$p]++;
}
if(!array_key_exists(4,$a))$a[4]=0;
echo"總樣本數".$total.'<br/>';
echo"1-10樣本數".$a[0].',占'.($a[0]/$total*100).'%<br/>';
echo">10-50樣本數".$a[1].',占'.($a[1]/$total*100).'%<br/>';
echo">50-100樣本數".$a[2].',占'.($a[2]/$total*100).'%<br/>';
echo">100-200樣本數".$a[3].',占'.($a[3]/$total*100).'%<br/>';
echo"其他樣本數".$a[4].',占'.($a[4]/$total*100).'%<br/>';
總樣本數50000
1-10樣本數30052,佔60.104%
>10-50樣本數12404,佔24.808%
>50-100樣本數4993,佔9.986%
>100-200樣本數2551,佔5.102%
其他樣本數0,佔0%

『陸』 EXCEL中,想讓隨機數按一定概率生成,怎麼做

=IF(INT(RAND()*100)+1<88,INT(RAND()*8),IF(INT(RAND()*100)+1<97,INT(RAND()*3)+9,INT(RAND()*2)+13))

解釋:先生成一個1-100的數,如果這個數小於88,那麼滿足概率87%,就返回一個0-8的數,依次類推。

測試結果:

10個數,出了2個大於8的,符合該規則的隨機性。

『柒』 求各種產生隨機數的演算法

多的很呀!別撤消呀,千萬! 不過幾乎都是偽隨機數。 隨機序列的演算法 找到了兩個演算法, 第一個很簡單, 但可惜不是隨機的, 第二個是典型的偽隨機數演算法, 可惜要用到2的幾百萬次方這樣巨大的整數, 真痛苦 要是有UNIX上計算密碼的源代碼就好了 第一種做法: f(k) = (k*F(N-1)) mod F(N)其中, k是一個序列號, 就是要取的那個數的順序號 F(N)是這樣一個序列 F(0) = 0, F(1) = 1, F(N+2) = F(N+1)+F(N) (for N>=0)第二種做法V = ( ( V * 2 ) + B .xor. B ... )(Mod 2^n)N+1 N 0 2V是要取的隨機數, B是個種子, n是隨機數的最大個數 原來這個問題, 很高難, 不少數學高手都為解決這個問題寫了論文, 咳咳, 偶真是個白痴 呵呵, 效果肯定是不錯啦, 因為用不到很大的表. 至於應用是這樣的, 比如, 你要給每個用戶在注冊的時候一個ID但有不希望用戶在看到自己的ID的時候能知道其他用戶的ID, 如果用SEQUENCE來生成ID的話, 一個用戶只要把自己的ID減1就能得到其它用戶的ID了. 所以要用隨機數來做ID, 這樣用戶很難猜到其他用戶的ID了. 當然主要的問題是, 隨機數可能重復. 因此希望使用一個隨機數做種子用它來確定一組"無規律"的自然數序列, 並且在這個序列中不會出現重復的自然數. 在這里使用的方法生成的序列並不是沒有規律的, 只不過這個軌律很難被發現就是了. Xn+1 = (aXn + b) mod c (其中, abc通常是質數)是一種被廣泛使用的最簡單的隨機數發生演算法, 有研究表表明這個演算法生成的隨機數基本上符合統計規律, java, BORLAND C等用的都是這個方法, 一般只要保證第一個種子是真正的隨機數就行了, 下面來說一下重復的問題, 上述方法會有可能出現重復, 因為當(aXn + b)有可能是同樣的數或者說余數相同的數, 因此要想不重復就得變形 偶想到的方法是 Xn=(a*n + b) mod c n是一個在1到c之間的整數, a*n + b就是一個線性公式了, 且若n不同則a*n + b也不同, 它們除上質數c得到的余數也肯定不同, 因為 若不考慮a和b而只有n的時候, 每次的結果都是n,而線性公式, 只不過移動了這條直線的位置和斜率而已, 每個結果仍然不會相同的, 為了增加不可預計性, 偶又為上面那個公式設計了, 隨機數種子, 於是就變成了這個樣子 F(N)=(隨機數*(N+隨機數))MOD 一個質數 這樣就能夠產生 1到選定質數之間的一個"無規律"的自然數序列了, 只要改變隨機數就能改變序列的次序 在應用的時候, 要把隨機數種子和最後用到的序列號保存到一個表裡, 每此使用的時候取出來算好, 再把序列號更新一下就可以了 具體地說, 就是可以建一個表來保存每個序列的隨機數種子, 然後再為這個序列建一個SEQUENCE就行瞭然後就SELECT MOD(序列控製表.隨機數*(SEQ.NEXTVAL+序列控製表.隨機數)),序列控製表.質數) FROM 序列控製表 WHERE 序列控製表.序列ID=XX就OK了注意 序列控製表.質數 決定了序列的范圍

『捌』 有哪些隨機數演算法呢

1、數值概率演算法:用於數值問題的求解。所得到的解幾乎都是近似解,近似解的精度
隨著計算時間的增加而不斷地提高。
2、拉斯維加斯演算法(LasVegas):要麼給出問題的正確答案,要麼得不到答案。反復求解多次,可
使失效的概率任意小。
3、蒙特卡羅演算法(MonteCarlo):總能得到問題的答案,偶然產生不正確的答案。重復運行,每一次
都進行隨機選擇,可使不正確答案的概率變得任意小。
4、舍伍德演算法(Sherwood):很多具有很好的平均運行時間的確定性演算法,在最壞的情況下性能很
壞。引入隨機性加以改造,可以消除或減少一般情況和最壞情況的差別。

『玖』 如何設計等概率的隨機函數

Knuth Shuffle的洗牌演算法,演算法復雜度O(n),洗牌的目的是產生一串等概率的隨機列。
1)如何保證等概率:從r個剩餘的元素中選擇s個元素,那麼下一個元素選中的概率為s/r。
2)假設函數bigrand()返回一個大的隨機整數(比m和n個大很多),那麼bigrand()%n返回[0,n-1]范圍的隨機整數
4)應用:其他應用如從n個城市中選擇出m個城市的名字,可以先對城市名進行簽名標記為0,1,...,n-1
記住:我們面對的隨機函數的輸入是0,1,...,n-1,具體應用可以運用簽名轉換成成對應的0,1,...,n-1
5)如果要按序輸出,可以先對操作對象排序,然後簽名[0,n-1],這樣通過按序訪問數,就能保證輸出結果是有序的

[java]
<span style="font-size:18px">//重新排列[0,n-1]范圍內的數
public int[] knuthShuffle(int[] arr) {
if(arr==null)
return arr;

int randValue;
for (int remaining=arr.length; remaining>=0; remaining--) {
randValue = bigrand()%remaining; //產生[0,remaining-1]范圍內的隨機數
swap(array[remaining], array[randValue]);
} //end for

return arr;
} //end knuthShuffle</span>
從n個數中隨機選擇m個數,其中[0,1,...,n-1]代表數的簽名

[java]
<span style="font-size:18px">public void genknuth(int m,int n){
//輸入控制
if(m<=0 || n<=0 || m>n)
return ;

int select=m; //選擇m個元素
int remaining=n; //剩餘n個元素
int randValue;
for(int i=0;i<n;i++){
randValue=bigrand()%(remaining-i);
if( randValue<select ){
System.out.println(i);
select--;
}//end if
}//end for
}//end genknuth()</span>

『拾』 隨機數的計算公式是什麼

為追求真正的隨機序列,人們曾採用很多種原始的物理方法用於生成一定范圍內滿足精度(位數)的均勻分布序列,其缺點在於:速度慢、效率低、需佔用大量存儲空間且不可重現等。為滿足計算機模擬研究的需求,人們轉而研究用演算法生成模擬各種概率分布的偽隨機序列。偽隨機數是指用數學遞推公式所產生的隨機數。從實用的角度看,獲取這種數的最簡單和最自然的方法是利用計算機語言的函數庫提供的隨機數發生器。典型情況下,它會輸出一個均勻分布在0和1區間內的偽隨機變數的值。其中應用的最為廣泛、研究最徹底的一個演算法即線性同餘法。
線性同餘法LCG(Linear Congruence Generator)
選取足夠大的正整數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的選取十分重要。
例如,選取M=10,a=b =n0=7,生成的隨機序列為{6,9,0,7,6,9,……},周期為4。
取M=16,a=5,b =3,n0=7,生成的隨機序列為{6,1,8,11,10,5,12,15,14,9,0,3,2,13,4,7,6,1……},周期為16。
取M=8,a=5,b =1,n0=1,生成的隨機序列為{6,7,4,5,2,3,0,1,6,7……},周期為8。

閱讀全文

與生成等概率隨機數演算法相關的資料

熱點內容
php數組中刪除元素 瀏覽:724
螢石雲伺服器視頻 瀏覽:269
防火牆配置伺服器熱備的虛擬地址 瀏覽:188
linux安裝xdm 瀏覽:736
java計算12 瀏覽:249
大金空調擺動式壓縮機 瀏覽:453
新的雲伺服器如何設置首頁 瀏覽:687
javastring字元位置 瀏覽:196
銀河麒麟字體庫存在哪個文件夾 瀏覽:957
魔獸加丁伺服器的航空叫什麼 瀏覽:152
花冠改裝案例哪個app多 瀏覽:515
成績單app哪個好用 瀏覽:140
北美程序員vs國內程序員 瀏覽:181
php解析xml文檔 瀏覽:121
石墨文檔APP怎麼橫屏 瀏覽:185
牆主鋼筋加密和非加密怎麼看 瀏覽:144
金山區文件夾封套定製 瀏覽:708
soho程序員 瀏覽:672
java位元組截取 瀏覽:526
php提交作業 瀏覽:816