生成随机数以求和到预定值提出了一个有趣的挑战在计算机编程中。虽然简单的方法似乎足够了,但它们经常会引入偏差,即某些数字更有可能被选择。本文深入研究了一种精炼的解决方案,确保所有可能组合的概率分布相等。
提供的解决方案依赖于 constrained_sum_sample_pos 函数来实现可能结果的均匀分布。此函数生成一个正整数 (n) 列表,其总和等于目标值(总计)。它的主要特点是每个组合都有相同的机会被选择。
该函数的优势在于其数学基础,它保证所有可能的组合都有相同的可能性。此外,它还可以轻松适应其他场景,例如生成 7 个数字,总和为 100 或任何其他所需的总数。
下面提供了该函数的 Python 实现:
<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>
@FM 的图形表示提供了对函数工作原理的清晰理解:
0 1 2 3 4 5 6 7 8 9 10 # The universe. | | # Place fixed dividers at 0, 10. | | | | | # Add 4 - 1 randomly chosen dividers in [1, 9] a b c d # Compute the 4 differences: 2 3 4 1
这个复杂的解决方案,基于约束和采样提供了一种稳健且无偏的方法,用于生成总和达到预定义值的随机数。它确保所有可能结果的概率相等,使其成为各种编程场景的可靠工具。
以上是如何生成具有预定义总和的随机数并确保等概率分布?的详细内容。更多信息请关注PHP中文网其他相关文章!