【问题标题】: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]