数学技巧+期望
题目描述
HKE最近编写了一个函数rand(l,r),其中l,r为正整数且l≤r。这个函数会等概率返回区间[l,r]中任意一个正整数。然后,他又编写了一个函数:
1 | int work(int x){ |
这段代码用pascal写起来就是:
1 | function work(x:integer):integer; |
现在给定一个正整数n, 请问work(n)的返回值的期望值是多少?
期望的定义:假设work(n)返回的所有可能的值为$x_1, x_2, \dots x_k$, 它们出现的概率分别为$p_1, p_2, \dots p_k$,则期望为:
$$E = \sum_{i=1}^k x_ip_i$$
Inputs & Outputs’ examples
Inputs’ e.g. #1
1 | 100000 |
Outputs’ e.g. #1
1 | 13.09014 |
分析
其实期望的计算公式题目里已经给了,就是:
$$E(n) = 0 \quad n = 1$$
$$E(n) = 1 + \frac 1n \sum_{i=1}^n E(i) \quad n > 1$$
那么考虑把第二个式子$\Sigma$前的系数消掉:
$$nE(n) = n + \sum_{i=1}^n E(i)$$
然后把$n-1$带入式子,可得:
$$(n-1)E(n-1) = (n-1)+\sum_{i=1}^{n-1} E(i) \quad \quad n>2$$
然后上下两式相减可得:
$$nE(n) - (n-1)E(n-1) = 1 + E(n)$$
化简可得:
$$E(n) = E(n-1) + \frac {1}{n-1}$$
右边式子的分式部分为调和计数,考虑在$n < 10^7$时暴力计算,否则直接$\ln(n)+\gamma$即可.
代码
1 | /* Headers */ |