rand5 和 rand7 相互生成

2022-03-21 05:58:49 字數 755 閱讀 8641

解題思路:

此型別題目的解題主要注意生成的各個數字都是等概率的,不能夠使用取模等操作,因為會造成概率不均勻

rand7()生成rand5():

rand7()的隨機數概率分布是1/7,我們在用其生成rand5()的時候只需要獲取1 2 3 4 5 五個即可,其餘兩個數 6 7 忽略 也就是:

結果取res = (1~51)有效 (否則重新計算

1

public

intrand5byrand7()

6return

r;7 }

rand5()生成rand7():

rand5()主要生成1 2 3 4 5(等概率) ,

5*rand5()生成 5 10 15 20 25(等概率)

5*(rand5()-1) 主要生成0 5 10 15 20(等概率)

5*(rand5()-1) + rand5() 主要生成1~25並且是等概率的

之後只用取1~7即可(因為1~7的話8~25拋棄,會降低有效速度),因此,我們設定每三位代表乙個數

1~3(1) 4~6(2) ...19~21(7)之後的全部拋棄 也就是:

結果取res = (1~21)有效(否則重新計算) , ceil(res/3) 向上取整

1

public

intrand7byrand5()

6return (int) math.ceil( r/3.0);

7 }

演算法 rand5 產生rand7

一點心青 前兩天,睡覺前,偶爾翻起演算法導論,看到隨機函式這一塊內容,裡面有乙個練習題 5.1 2 描述random a,b 過程的一種實現,它只呼叫random 0,1 作為a和b的函式,你的程式的期望執行時間是多少?注 random a,b 為產生a,a 1,a 2,b的函式發生器,且產生各整數...

演算法題 rand5 產生rand7

前兩天,睡覺前,偶爾翻起演算法導論,看到隨機函式這一塊內容,裡面有乙個練習題 5.1 2 描述random a,b 過程的一種實現,它只呼叫random 0,1 作為a和b的函式,你的程式的期望執行時間是多少?注 random a,b 為產生a,a 1,a 2,b的函式發生器,且產生各整數的概率相等...

演算法 根據Rand5 函式構造生成Rand7

給定乙個函式rand5 該函式可以隨機生成1 5的整數,且生成概率一樣。現要求使用該函式建構函式rand7 使函式rand7 可以隨機等概率的生成1 7的整數。當看到這道題的時候,第乙個想法就是 利用rand5 rand5 3 來解決 但是這樣得出的結果不是題目所要求的等概率的,這種情況下rand5...