c - 生成均匀分布的随机数

标签 c linux random

我有一组 455 个项目,我从中随机选择最多 160 个项目,并进行替换。首先,我使用 srand() 播种,然后使用 rand() 选择每个数字。我观察到,在我选择的多达 160 个项目中,我倾向于看到至少有 10 个项目不止一次被选中。这似乎表明随机数不是均匀分布的。

有没有办法让随机数分布更均匀?

最佳答案

您对结果的直觉是错误的。如果数字是真正随机的,并且均匀分布在 0 到 455 之间,那么在 160 个数字的集合中至少有 10 个重复的概率实际上是相当高的(实际上这是一个虚拟的确定性)。非正式地,这被称为“生日悖论”,尽管它实际上并不是一个悖论。

此图表显示了当您从一组 455 个值中选择 160 个独立同分布值并进行替换时,出现不同数量重复值的概率。如您所见,实际上最有可能得到 22 个重复值,其中几乎你不可能少于 10 或多于 35。

enter image description here

关于c - 生成均匀分布的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291871/

相关文章:

c - 在 c 中取消分配结构?

c++ - 如何从ofono获得属性(property)

c++ - 如何在 C++ 中生成 4 个不同的随机数

ios - 生成一个随机的负 NSInteger

c - 我有一个连续的循环,我不知道它出了什么问题

c - 向链表插入新节点时程序卡住

linux - 在vi中搜索并替换以下内容

linux - 在 sysresccd 中编辑 Debian 8 启动文件

random - 从带有 awk 代码的文件中随机选择 3000 行

计算长期移动平均线