java – 在给定范围内生成总和为给定总和的N个随机数
第一次在Stackoverflow.我希望有人可以帮助我搜索一个算法.
我需要在给定的范围内生成N个随机数,总和到给定的数值! 例如:Generatare 3个数字,总和为11. 范围: > 1到3之间的值. 这个例子的生成数字可以是:2,5,4. 我已经搜索了很多,找不到我需要的解决方案. 可以像这样生成像N个数字一样不变的模数: 或者通过产生N个随机值,将它们相加,然后将常数和除以随机和,然后将每个随机数乘以该商G0001. 主要问题,为什么我不能采用这些解决方案是我的每个随机值都有不同的范围,我需要这些值与范围均匀分布(例如,在最小/最大值时不发生频率发生,如果我切断值其小于/大于最小/最大). 我也想到了一个soultion,取一个随机数(在该例子中,值为1,2或3),生成范围内的值(min / max或min之间),剩余的总和取决于哪个更小),减去我给定总和的数量,并保持一切,直到一切都分布.但是这将是可怕的无效.我真的可以使用算法的运行时间固定的方式. 我试图让它运行在Java.但是,该信息不是importend,除非有人已经有一个解决方案准备好了.所有我需要的是一个算法的描述或想法. 解决方法
首先,请注意,问题相当于:
第二个可以通过简单地减少数字的下限来实现 – 所以在你的例子中,它相当于:
请注意,第二个问题可以通过各种方式解决,其中之一是: 生成每个元素的h_i重复列表 – 其中h_i是元素i的限制 – 重新排列列表,并选择第一个元素. 在你的例子中,列表是:[x1,x1,x2,x3,x3] – 洗牌并选择前两个元素. (*)请注意,使用fisher-yates算法可以完成列表的混洗. (您可以在通过所需限制后中间中止算法). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |