Rand7实现Rand10
470 用 Rand7() 实现 Rand10()
1. 拒绝采样
在解LC-470前先介绍一道拒绝采样的经典问题:利用频率近似概率的方式求出 $\pi$ 的值。在 $1\times1$ 的方块内随机坐标采样,记录落入以原点为圆心,半径为1的 $\frac{1}{4}$ 圆内的次数。
由 $\frac{1}{4}\pi r^2 = \frac{cnt}{N}$ 可得 $\pi = \frac{4\times cnt}{N\times r^2}$ ,由于 $r=1$ ,所以 $\pi = \frac{4\times cnt}{N}$
1 | int main() { |
2. LC-470 Rand7生成Rand10
(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数
1 | class Solution { |