隨機數生成問題

2022-09-16 05:36:10 字數 1194 閱讀 9404

給定隨機生成整數1到5的函式,寫出能隨機生成整數1到7的函式

方法1:

rand5()*5+rand5(),得到[6,30]區間內25個數等概率分布

可以只用6~26之間的21個數,對映到1~7這7個數

27~30怎麼辦?拋棄掉

int

rand7()

這樣生成的1~7概率均勻,只是其和不等於1

方法2:

用rand5()生成乙個5進製的數

假如有3位,那麼每一位生成乙個rand5(),這個數就是[0,444]上的均勻分布的整數

不過遺憾7不能整除5的冪次方,這樣就無法均分7段

不過如果位數足夠大,則遺漏的概率就會相當的小

類似問題

已知rand1()等概率返回0或者1,試寫乙個函式等概率返回[a,b]之間的整數

用二進位制表示a與b,

得到a的位數,b的位數,

按位生成二進位制數,如果超出了[a,b]範圍則重新生成

(對於上一題,如果隨機數生成器可以生成偶數範圍的話,可以先構造rand1(),之後的問題即為本問題)

類似問題

已知rand7(),球rand10()

這可以轉成第乙個問題:先構造rand7()*7+rand7(),然後過濾,再平分

或者可以把rand7()先轉成rand5()與rand2(),然後組合

int

rand10()

while(t1>5

);

dowhile(t2>2

);

return t1+5*(t2-1

);}

推廣:已知randk(),求randn()

用k進製表示n,先求需要多少位,求解m:

k^m-1=n

m=int(m)+1

intrandn()

}

理解這類題的關鍵知識:

每一位等概率分布 -> 這個數在整個域上也等概率分布

乙個等概率分布[a,b]的子集合(例如[a+1,b-1])同樣是等概率分布,只是子集合的概率和不為1,但不影響演算法實現

ref:

Lua 隨機數生成問題

lua 生成隨機數需要用到兩個函式 math.randomseed xx math.random n m 1.math.randomseed n 接收乙個整數 n 作為隨機序列種子。2.math.random n m 有三種用法 無參呼叫,產生 0,1 之間的浮點隨機數 只有引數 n,產生 1 n ...

Lua 隨機數生成問題

lua 生成隨機數需要用到兩個函式 math.randomseed xx math.random n m 1.math.randomseed n 接收乙個整數 n 作為隨機序列種子。2.math.random n m 有三種用法 無參呼叫,產生 0,1 之間的浮點隨機數 只有引數 n,產生 1 n ...

Lua 隨機數生成問題

2014 08 27 icecity00.摘自 csdn部落格 閱 131 轉 1 轉藏到我的圖書館 分享 lua 生成隨機數需要用到兩個函式 math.randomseed xx math.random n m 1.math.randomseed n 接收乙個整數 n 作為隨機序列種子。2.mat...