计算出N个事件中的M个出现的概率

时间:2017-01-26 17:46:12

标签: algorithm probability

我有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个事件计算它是否现实?

如果是的话,如何用任何编程语言来做?

1 个答案:

答案 0 :(得分:3)

设概率为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]