由rand7生成rand10以及随机数生成方法
来源:互联网 发布:幽默防网络诈骗标语 编辑:程序博客网 时间:2024/04/30 03:43
舍去法
一次rand7运算只能生成7个整数数,没有办法均匀的映射到10个整数上。但是运行两次rand7可以生成49个数字,如果这49个数字是均匀分布的,舍去多余的9个,剩下的40个正好可以映射到10个整数上。
代码1
int i;
do
{
i = 7 * (rand7() - 1) + rand7(); // it is now uniformly random between 1 and 49
} while(i > 40); // it is now uniformly random between 1 and 40
return i % 10 + 1; // result is now uniformly random between 1 and 10
do
{
i = 7 * (rand7() - 1) + rand7(); // it is now uniformly random between 1 and 49
} while(i > 40); // it is now uniformly random between 1 and 40
return i % 10 + 1; // result is now uniformly random between 1 and 10
这个算法做到了从40个数字均匀映射到1到10,这个说法有些抽象,进一步形象的来说明,考虑如下的种子矩阵:
int seed7[7][7] = {
{1 , 2 , 3 , 4 , 5 , 6 , 7},
{8 , 9 , 10, 1 , 2 , 3 , 4},
{5 , 6 , 7 , 8 , 9 , 10, 1},
{2 , 3 , 4 , 5 , 6 , 7 , 8},
{9 , 10, 1 , 2 , 3 , 4 , 5},
{6 , 7 , 8 , 9 , 10, 0 , 0},
{0 , 0 , 0 , 0 , 0 , 0 , 0}
};
上面1-10数字一共出现了40次,每个数字出现4次,0出现了9次。我们在这个表里筛选,如果选中了0则重新选一次,如果非0则返回结果。那么,1-10恰好可以得到平均的机会:{1 , 2 , 3 , 4 , 5 , 6 , 7},
{8 , 9 , 10, 1 , 2 , 3 , 4},
{5 , 6 , 7 , 8 , 9 , 10, 1},
{2 , 3 , 4 , 5 , 6 , 7 , 8},
{9 , 10, 1 , 2 , 3 , 4 , 5},
{6 , 7 , 8 , 9 , 10, 0 , 0},
{0 , 0 , 0 , 0 , 0 , 0 , 0}
};
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- rand7生成rand10
- 【每天学点算法题10.16】由rand7()生成rand10()
- 浅析 rand7生成rand10 方法 之 思想篇(一)
- 浅析 rand7生成rand10 方法 之 代码篇(二)
- 数据结构算法面试题精选及整理-随机数rand7生成rand10函数
- 随机数:关于用Rand7生成Rand10的最准确的算法(MS中的一道题)--仿真证明
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
- 由随机函数rand7构造rand10
- 由随机函数rand7构造rand10
- 由随机函数rand7构造rand10
- 面试时遇到由rand5生成rand7
- 国内主要中间件生产厂商
- Android+JNI调用–文件操作
- 常见字符编码方式详解
- Ubuntu11.04的安装,及初步配置
- Android Audio代码分析9 - AudioTrack::write函数
- 由rand7生成rand10以及随机数生成方法
- std::set||std::deque||std::map
- PHP ob_start() 函数介绍
- jquery 文本编辑器 用法
- JSON
- 回车事件
- Ajax简单用例
- Linux下架设代理服务器
- ajax