按概率生成隨機數Java版本

2021-05-12 19:31:50 字數 648 閱讀 3648

思想什麼的可以參看http://blog.csdn.net/slowgrace/archive/2009/03/25/4022632.aspx

如果要控制1個數落在某個區間的概率,比如要求在sngbegin和sngend之間生成乙個隨機數,這個隨機數落在sngpb和sngpe之間的概率是p%。有兩種方法,以第二種方法為好。

先說第一種方法,要點是:

(1)由於sngpb和sngpe將整個區間分成3部分,所以先分別計算隨機數落在3部分的概率。落在sngpb和sngpe之間的概率是p%,這是已知的。餘下的兩個區間的總和概率是(1-p%),分到各個區間的概率按它們的長度分成。

(2)然後根據3個概率得到乙個區間劃分,落在第乙個區間的,就在sngpb和sngpe之間生成乙個隨機數;落在第二個區間的,就是[sngbegin, sngpb]裡生成隨機數;落在第3個區間的,就在[sngpe,sngend]之間生數。  

這個辦法有個問題,就是用了兩次隨機數,這樣實際上影響了它的隨機性。

tiger_zhao

建議的第二種方法則沒有這個問題,做法是:

多個段有不同權重時其實可以對映成相同權重

(縮放 [sngpb, sngpe] 區間,相對調整 sngend),這樣只要一次 rnd() 就可以完成,**如下。

按概率生成隨機數Java版本

思想什麼的可以參看 如果要控制1個數落在某個區間的概率,比如要求在sngbegin和sngend之間生成乙個隨機數,這個隨機數落在sngpb和sngpe之間的概率是p 有兩種方法,以第二種方法為好。先說第一種方法,要點是 1 由於sngpb和sngpe將整個區間分成3部分,所以先分別計算隨機數落在3...

JAVA生成隨機數

生成6位字母加數字的隨機數字,隨機數格式為 字母,數字,字母,數字,字母,數字 string a c,n for int i 0 i 3 i system.out.println a 生成類似qq號碼的隨機id號碼 隨機4位數 int array random rand new random for...

java 生成隨機數的

方式一 min math.random max 注意 math.random 返回值型別是double 方式二 random ra new random int random ra.nextint max nin 查閱api文件後得出,通過該方法可以得到不同資料型別的隨機值 nextboolean ...