按概率生成隨機數Java版本

2021-09-09 09:24:36 字數 2667 閱讀 1084

思想什麼的可以參看

如果要控制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() 就可以完成,**如下。 

random rand = new random();  public static void main (string args)  }     /**     * 按照一定概率進行隨機

* * @param psngbegin 隨機數範圍的開始數字     * @param psngend 隨機數範圍結束數字     * @param psngpb 要隨機的數字的開始數字     * @param psngpe 要隨機的數字的結束數字     * @param pbytp 要隨機的數字隨機概率     * @return 按照一定概率隨機的數字     */ public double getrndnump(double psngbegin,                     double psngend,                     double psngpb,                     double psngpe,                     double pbytp) else else if (psngpb <= sngresult && sngresult <= (psngpe + sngincreased)) else if ((psngpe + sngincreased) <= sngresult && sngresult <= (psngend + sngincreased ))      }          return 0f; }  public double getrandomnum(double psngbegin, double psngend)

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

思想什麼的可以參看

如果要控制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() 就可以完成,**如下。 

random rand = new random();  public static void main (string args)  }     /**     * 按照一定概率進行隨機

* * @param psngbegin 隨機數範圍的開始數字     * @param psngend 隨機數範圍結束數字     * @param psngpb 要隨機的數字的開始數字     * @param psngpe 要隨機的數字的結束數字     * @param pbytp 要隨機的數字隨機概率     * @return 按照一定概率隨機的數字     */ public double getrndnump(double psngbegin,                     double psngend,                     double psngpb,                     double psngpe,                     double pbytp) else else if (psngpb <= sngresult && sngresult <= (psngpe + sngincreased)) else if ((psngpe + sngincreased) <= sngresult && sngresult <= (psngend + sngincreased ))      }          return 0f; }  public double getrandomnum(double psngbegin, double psngend)

按概率生成隨機數Java版本

思想什麼的可以參看http blog.csdn.net slowgrace archive 2009 03 25 4022632.aspx 如果要控制1個數落在某個區間的概率,比如要求在sngbegin和sngend之間生成乙個隨機數,這個隨機數落在sngpb和sngpe之間的概率是p 有兩種方法,...

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 ...