algorithm - 使用 Rand3() 的随机生成器 Rand9()

标签 algorithm random

如何使用生成 1 到 3 之间数字的函数生成 1 到 9 之间的数字?得到1和9之间任意数的概率一定是相同的,所以rand3()+rand3()+rand3()不是一个好的方案。

最佳答案

尝试类似笛卡尔的积:

Rand9() = 3 * (Rand3() - 1) + Rand3()

使用 3 * (Rand3() - 1) 可以使子区间 1-3、4-6 和 7-9 的可能性相同。使用 + Rand3(),您将在该子区间上平均选择。

写成产品:

3 * (Rand3() - 1) + Rand3() -> {1, 4, 7} X {+1,+2,+3} -> {1,2,3,4,5,6,7,8,9}

关于algorithm - 使用 Rand3() 的随机生成器 Rand9(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773467/

相关文章:

python - 在 Python 中生成一条线上方和下方的随机点

java - 我的程序一直生成四次?

c - 数组中最低的 n 个数字

r - 并行处理和临时文件

algorithm - 给定单词成为词典单词的最少删除次数

c++ - mantin wep 在 C++ 中的实现

C# Random() 不是很随机地工作

javascript - 从已知数量的项目中选择随机项目

algorithm - 如果图中有循环,我们可以应用维特比算法吗?

java - java中递归二进制搜索中的lo,hi索引