让我们说我们有n个硬币和硬币掉头的概率是f(i)。 找到所有n个硬币被抛出时获得偶数头的概率。
f(i)= 1 /(2i + 3)
这里n很大,大约为1e5,因此需要有效的方法。
我试图分析蛮力案例,但这太多了,即如果我计算2成功,4,6 ......,可能需要数年才能运行。
然后我想到以某种方式应用线性期望,但无法想出任何有用的东西。
答案 0 :(得分:2)
这应该是简单的递归,不是吗?
设p(k)= 1 /(2 * k + 3),q(k)= 1 - p(k),V(k)是k之后偶数投掷的概率。
让我们考虑最后一次投掷
V(n) = q(n)*V(n-1) + p(n)*(1-V(n-1)) = (q(n)-p(n))*V(n-1) + p(n)
V(0) = 1
C ++代码
#include <iostream>
inline double p(int k) {
return 1.0/(2.0*k + 3.0);
}
inline double q(int k) {
return 1.0 - p(k);
}
double V(int k) {
if (k == 0)
return 1.0;
return (q(k) - p(k))*V(k-1) + p(k);
}
int main() {
std::cout << V(10000) << std::endl;
return 0;
}
V(10000)确实非常接近.5
V(10000) = 0.500075