从5随机到7随机及其扩展
題目
給定一個等概率產(chǎn)生1~5的隨機函數(shù) rand1To5如下:
def rand1To5():import randomreturn int(random.random()*5) + 1? ? ?除此之外,不使用任何額外的隨機機制,請用rand1To5實現(xiàn)等概率隨機產(chǎn)生1~7的隨機函數(shù)rand1To7
?
基本思路:
1、rand1To5() 等概率產(chǎn)生1,2,3,4,5?
2、rand1To5()-1 等概率產(chǎn)生0,1,2,3,4?
3、(rand1To5()-1)*5 等概率的產(chǎn)生0,5,10,15,20?
4、(rand1To5()-1)*5+rand1To5()-1 等概率的產(chǎn)生0,1,2,3…23,24?
5、如果步驟4產(chǎn)生的結(jié)果大于20,重新隨機,直到產(chǎn)生的結(jié)果在0~20之間。?
6、步驟5的結(jié)果再進行%7,然后再加1,就是最終的結(jié)果。
?
補充題目:給定一個以p概率產(chǎn)生0,以1-p概率產(chǎn)生1的隨機函數(shù)rand01p如下:
def rand01p():p = 0.83return 0 if random.random() < p else 1除此之外,不使用任何額外的隨機機制,請用rand01p實現(xiàn)等概率隨機產(chǎn)生1-6的隨機函數(shù)rand1To6
思路:
雖然rand01p方法是以p的概率產(chǎn)生0,以1-p的概率產(chǎn)生1,但是rand01p產(chǎn)生01和10的概率卻都是p(1-p),可以利用這點來實現(xiàn)等概率隨機產(chǎn)生0和1的函數(shù),有了等概率產(chǎn)生0和1的函數(shù),接下來的步驟和原問題類似。先實現(xiàn)隨機產(chǎn)生0~3的隨機函數(shù),再利用0~3的隨機函數(shù)實現(xiàn)隨機產(chǎn)生1~6的隨機函數(shù)。
def rand01p():import randomp = 0.83return 0 if random.random() < p else 1def rand01():num = rand01p()while num == rand01p():num = rand01p()return numdef rand0To3():return rand01()*2 + rand01()def rand1To6():num = rand0To3()*4 + rand0To3()while num > 11:num = rand0To3()*4 + rand0To3()return num%6 + 1?
總結(jié)
以上是生活随笔為你收集整理的从5随机到7随机及其扩展的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个数是否是回文数
- 下一篇: 正数数组的最小不可组成和