【问题标题】:Calculate probability that M out of N events will appear计算N个事件中M个会出现的概率
【发布时间】:2017-01-27 02:02:04
【问题描述】:

我有 110 个独立事件的概率。 我想计算每一个事件的数量,即会出现该数量的不同事件。

例如,如果我们只有三个事件

A = 0.45
B = 0.65
C = 0.73

# Probability of none event
P[0] = (1-A)*(1-B)*(1-C)

# Probability of exaclty one event
P[1] = A*(1-B)*(1-C)+(1-A)*B*(1-C)+(1-A)*(1-B)*C

# Probability of exactly two events
P[2] = A*B*(1-C)+A*(1-B)*C+(1-A)*B*C

# Probability of exactly three events
P[3] = A*B*C

在 1 小时内计算 110 个事件是否现实?

如果是,如何在任何编程语言中做到这一点?

【问题讨论】:

    标签: algorithm probability


    【解决方案1】:

    让概率为 p_1, p_2, ..., p_n。您本质上是在尝试扩展多项式

    (1 - p_1 + p_1 x) (1 - p_2 + p_2 x) ... (1 - p_n + p_n x),
    

    其中获得m个事件的概率是x^m的系数。您可以在每次乘法后简化,而不是计算所有 2^n 单项式并将它们求和。在 Python 中:

    def f(ps):
        coefs = [1]
        for p in ps:
            coefs.append(0)
            for i in range(len(coefs) - 1, 0, -1):
                coefs[i] = coefs[i] * (1 - p) + coefs[i - 1] * p
            coefs[0] *= 1 - p
        return coefs
    

    示例执行(注意浮点错误)。

    >>> f([0.45, 0.65, 0.73])
    [0.05197500000000001, 0.279575, 0.454925, 0.21352500000000002]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2021-04-29
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多