【发布时间】:2016-02-20 19:43:30
【问题描述】:
如何从集合 (1, 2, 3, 4, 5, 6) 中生成随机数,加起来为 N 并遵循 Java 中的概率分布 (0.3, 0.25, 0.25, 0.1, 0.05, 0.05) ?
更新:我可以使用this answer 中建议的 EnumeratedIntegerDistribution,但这并没有考虑到数字加起来应该是 N。
【问题讨论】:
-
您可以使用样本大小为 1 的 EnumeratedIntegerDistribution,并将总和(在循环中)管理到 N。当您接近 N 时,您将不得不丢弃任何导致总和的结果超过 N。
-
我想过这个问题,但这不会弄乱边缘的概率分布吗?另一种方法是生成样本大小为 N 并选择前 m 个值加起来最接近的小于 N 的数字,然后继续删除数字,直到达到 N。
-
我不知道答案。如果 N 足够大,它不会产生影响。如果 N=1,那么你就没有随机性。如果 N=60 并且您的运行总和=58,该怎么办?我的方法允许两个(59,然后是 60)或两个的概率。我会对正确答案是什么感兴趣。一种激进的方法是丢弃任何不和 N 相加的结果,然后从头开始重试,直到它成功为止。
标签: java random sum probability