【发布时间】:2017-09-09 10:50:49
【问题描述】:
请考虑这段代码:
private static final Random RANDOM = new Random();
public static void main(String[] args) {
long distinct = IntStream.range(0, 600)
.map(i -> RANDOM.nextInt(600))
.distinct()
.count();
System.out.println("intersection %:" + (double) (600 - distinct) / 600 * 100);
}
我在 (0-600) 600 次的范围内生成一个随机整数,天真地期望有 0% 的交集。实际结果约为 37%。
是否有一个数学公式来计算交叉概率,具有随机整数范围和调用次数?我真的不喜欢在我的计算中相信这个经验性的 37%
【问题讨论】:
-
由于 Java 的 Random 具有均匀分布,您应该期望交叉点为 600 分之一。
-
为什么你期望有 0% 的交集?如果你掷骰子 6 次,你希望每个数字都掷一次吗?我希望一些数字至少滚动两次,而一些数字根本不滚动。
标签: java math random probability