首页  >  文章  >  后端开发  >  如何生成具有预定义总和的随机数并确保等概率分布?

如何生成具有预定义总和的随机数并确保等概率分布?

Barbara Streisand
Barbara Streisand原创
2024-10-31 16:22:47104浏览

How to Generate Random Numbers with a Predefined Sum and Ensure an Equal Probability Distribution?

生成具有预定义总和的随机数

简介:等概率分布

生成随机数以求和到预定值提出了一个有趣的挑战在计算机编程中。虽然简单的方法似乎足够了,但它们经常会引入偏差,即某些数字更有可能被选择。本文深入研究了一种精炼的解决方案,确保所有可能组合的概率分布相等。

约束和样本函数

提供的解决方案依赖于 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn