我正在努力优化我的代码以解决以下问题:
给你 N 个盒子,索引从 1 到 N。每个盒子要么没有硬币,要么包含一枚硬币。空盒子的数量和装有一枚硬币的盒子的数量分别用n0和n1表示。您随机抽取盒子的子集,其中每个子集都有相同的被选择概率。空集和集合本身被视为子集。
给定 n0 和 n1,随机子集中硬币总数为偶数的概率是多少?
约束:N = n0 + n1 < 100000
例子
12
输入:n0 = 1,n1 = 0
输出:1.0
解释:有两个子集:[]和[0]。两人的总和相等。
输入:n0 = 0,n1 = 2
输出:0.5
解释:有四个子集:[]、[1]、[1] 和 [1, 1]。[] 与 [1,1] 之和为偶数。
到目前为止,我尝试在 Python 3.8 中实现,但我认为它工作正常,但计算更大的数字需要很长时间。
prob = 0
n0 = 1
n1 = 4
for j in range(0, n1+1):
if (j % 2 == 0):
prob += comb(n1, j)
total_prob = (2**n0 * prob) / (2 ** (n0+n1))
total_prob
青春有我
拉丁的传说
相关分类