第一次来Stackoverflow,希望有人能帮我寻找一个算法。
我需要在给定的范围内生成N个随机数,使它们相加得到给定的总和!
例如:生成3个数字,它们相加得到11。
范围:
- 值介于1和3之间。
- 值介于5和8之间。
- 值介于3和7之间。
此示例的生成数字可能为:2、5、4。
我已经搜索了很多,但找不到我需要的解决方案。
可以使用取模(modulo)方式生成具有恒定和的N个数字,如下所示:generate random numbers of which the sum is constant,但我无法使用它来处理范围。
或者通过生成N个随机值,将它们相加,然后将常量和除以随机和,然后使用该商乘以每个随机数 as proposed here。
主要问题是我不能采用上述解决方案的原因是,我每个随机值都有不同的范围,并且我需要这些值在范围内均匀分布(例如,在最小/最大值处没有频率发生,如果我截断小于/大于最小/最大值的值,则会发生这种情况)。
我还考虑过一种解决方案,即取一个随机数(在该示例中为1、2或3),在范围内生成该值(在min/max之间或在min和剩余总和之间,具体取决于哪一个更小),从给定总和中减去该数字,并继续进行操作,直到所有内容都分配完毕。但这将非常低效。我真的需要一个运行时间固定的算法。
我正在尝试在Java中运行它。但是,除非有人已经准备好了解决方案,否则这些信息并不重要。我只需要一个算法的说明或想法。