<分区>
Possible Duplicate:
Getting N random numbers that the sum is M
嗨 我有一个问题:
我如何获得所有随机值的总和为 1
。
像 {0.5,0.5}
或 {0.25,0.25,0.5}
等等。
而且这些值的数量每次都不一样,一次可以是2
,一次可以是3
,就像上面的例子一样!
谢谢。
<分区>
Possible Duplicate:
Getting N random numbers that the sum is M
嗨 我有一个问题:
我如何获得所有随机值的总和为 1
。
像 {0.5,0.5}
或 {0.25,0.25,0.5}
等等。
而且这些值的数量每次都不一样,一次可以是2
,一次可以是3
,就像上面的例子一样!
谢谢。
最佳答案
我将为您概述基本算法:
决定您将生成多少个随机数以求和。
生成那么多随机数。
决定他们的总和应该是多少。
将上一步的数字除以随机数的总和。
将每个随机数除以上一步的数字。
基本上,您要做的是生成一堆无界随机数,然后对它们进行调整,使它们加起来等于某个特定数字。
顺便说一句:在您生成的所有随机数都为零的极少数情况下,您将使用此算法出现被零除的错误。所以你应该在你的实现中捕获它并在循环中重试随机数生成,直到你得到一个非零的随机数和。
关于java - 关于随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406412/