Given a function which produces a random integer in the range 1 to 5, write a function which produces a random integer in the range 1 to 7.
- What is a simple solution?
- What is an effective solution to reduce memory usage or run on a slower CPU?
stackoverflow上的讨论:
其中的两段代码如下:(算法是一样的)
算法描述:
概率计算
p(i)表示rand7的概率,3/25表示25个数中有3个i,4/25表示有4个0,n表示代码中循环执行到n+1次才随机出数i。
泛化1
可将上述概率计算中部分量进行替换
定义:i的个数y,0的个数5x-y*7,以及随即数总数5x(以上特殊情况为y=3,x=2)
条件:y*7<5x
得到泛化的表示方式
泛化2
上述泛化依然是rand5改成rand7
此泛化为rand5改成randm。