生成具有固定总和的随机数
提出的挑战是生成一系列总和等于预定义值的伪随机数。具体来说,如何生成四个数字,加在一起等于 40。
不依赖可能使第一个数字的分布产生偏差的方法,而是采用更统一的方法。该解决方案采用了一种策略,即使用随机选择的除法器将预定义值划分为较小的段。
假设我们有四个随机正整数(e、f、g 和 h),使得 0
e<code class="python">import random def constrained_sum_sample_pos(n, total): """Return a randomly chosen list of n positive integers summing to total. Each such list is equally likely to occur.""" dividers = sorted(random.sample(range(1, total), n - 1)) return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>为了生成非负整数,需要进行额外的转换:
<code class="python">def constrained_sum_sample_nonneg(n, total): """Return a randomly chosen list of n nonnegative integers summing to total. Each such list is equally likely to occur.""" return [x - 1 for x in constrained_sum_sample_pos(n, total + n)]</code>
以上是如何生成固定总和、保证均匀分布的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!