解題思路:
此型別題目的解題主要注意生成的各個數字都是等概率的,不能夠使用取模等操作,因為會造成概率不均勻
rand7()生成rand5():
rand7()的隨機數概率分布是1/7,我們在用其生成rand5()的時候只需要獲取1 2 3 4 5 五個即可,其餘兩個數 6 7 忽略 也就是:
結果取res = (1~51)有效 (否則重新計算
1public
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) 向上取整
1public
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...