- 論壇徽章:
- 0
|
描述random(a, b)過(guò)程的一種實(shí)現(xiàn),它只調(diào)用random(0,1)。作為a和b的函數(shù),你的程序期望運(yùn)行時(shí)間是多少?
這個(gè)題目相當(dāng)于在能隨機(jī)生成0,1的前提下,要求生成[0, 1, ...,n-1]范圍內(nèi)的一個(gè)整數(shù)
1 求出最小的 m,使2^m >= n-1
2 通過(guò)random(0,1),產(chǎn)生一個(gè)m比特的整數(shù),這樣能隨機(jī)產(chǎn)生[0, 2^m-1]內(nèi)的整數(shù),若產(chǎn)生的整數(shù)位于[0, n-1]內(nèi),則取這個(gè)數(shù)作為結(jié)果。如果這個(gè)數(shù)在[0,n-1]外,則丟棄它,再次運(yùn)行算法重新生成一個(gè)。
a) 證明上述算法可以產(chǎn)生 [0, n-1]范圍內(nèi)的隨機(jī)數(shù)
在范圍[0,1, ..., n-1, n, ..., 2^m-1]范圍內(nèi),總共有p = 2^m個(gè)數(shù),其中合法的數(shù)是[0, 1, ..., n-1]共n個(gè),非法的數(shù)為
[n, ..., 2^m-1]共q = 2^m-n個(gè),則有 n + q = p
算法最后會(huì)產(chǎn)生一個(gè)合法的隨機(jī)數(shù),假設(shè)得到數(shù)i的概率為Pi,0 <= i <= n-1, 則
CodeCogsEqn (16).gif (2.31 KB, 下載次數(shù): 12)
下載附件
2011-05-19 19:02 上傳
所以上述方法可以產(chǎn)生隨機(jī)數(shù)
b) 求算法運(yùn)行的期望時(shí)間
設(shè)Pi表示產(chǎn)生隨機(jī)數(shù)時(shí)運(yùn)行了i次算法的概率,那么前i-1次產(chǎn)生的都是非法的數(shù),第i次產(chǎn)生的是合法的數(shù),所以
CodeCogsEqn (17).gif (937 Bytes, 下載次數(shù): 15)
下載附件
2011-05-19 19:02 上傳
那么
CodeCogsEqn (18).gif (1.21 KB, 下載次數(shù): 15)
下載附件
2011-05-19 19:02 上傳
|
|