【发布时间】:2015-08-13 08:17:46
【问题描述】:
在我的 Android 应用程序中,我想使用 Random.next(int) 方法生成 0 到 100000 之间的整数。我想知道这种方法的概率类型。范围内的每个值都相同吗?
【问题讨论】:
标签: java android random probability
在我的 Android 应用程序中,我想使用 Random.next(int) 方法生成 0 到 100000 之间的整数。我想知道这种方法的概率类型。范围内的每个值都相同吗?
【问题讨论】:
标签: java android random probability
假设你要绘制100000,它将大致满足[0, 100000]范围内均匀分布的统计性质。
也就是说,
生成任何特定数字的概率是相等的,并且独立于之前抽取的数字。
随机数样本均值的平均值将为 100000 / 2
样本的方差将收敛于均匀分布的方差。
但它并不完美,也不是加密安全的。特别是您可以观察到自相关效应。根据您的具体要求,您可能需要考虑替代方案。
【讨论】:
我假设您指的是nextInt(int) 而不是next(int)(这是protected,而不是公共方法)。
这是均匀(离散、伪随机)分布。
返回一个伪随机、均匀分布介于 0 之间的 int 值 (含)和指定值(不含)
【讨论】:
它将生成一个伪随机数。每个数字都有相同的概率被生成。我尝试拨打Random.next(2) 100 次,得到 50 个 1 和 50 个 0。我想你应该已经明白了。分布均匀。
如果你好奇,这里是源代码:
protected synchronized int next(int bits) {
seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);
return (int) (seed >>> (48 - bits));
}
【讨论】:
next(int) 而不是nextInt(int)?你的答案适合nextInt(),代码适合next()。
nextInt 只是对next 的调用,那么提供nextInt 的来源有什么意义呢? @amit
nextInt())使用next(),但不是“只是对next()的调用。nextInt()的代码实际上在documentation中
Random.nextInt(int value) 的每次调用都会产生不同的结果。
来自文档:
nextInt 的一般约定是伪随机生成并返回一个 int 值。 所有 2^32 个可能的 int 值都是以(大约)相等的概率产生的
【讨论】: