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