一个有趣的期望问题

问题描述

一个长度为 1 的线段上随机撒 n1 个点,形成了 n 条线段,那么这 n 条线段中第 k 短(kn)的线段期望长度是多少呢?答案是:
1nk1i=01ni


例如, n 条线段中最短的线段期望长度是 1n2,第二短的期望是 1n(1n+1n1) ,依此类推。

事实上,这 n 条线段期望的长度分布是指数分布,可以类比玻尔兹曼分布,少数较长的线段占据了大部分长度。而如果按照从左往右的顺序的话,每条线段长度都服从相同的概率分布,概率密度函数都是 f(x)=(n1)(1x)n2

这里只证明第 k 短的期望。推导过程很大一部分借鉴了这篇博客。当然北航也写过类似的题解:

[2015-2016 Petrozavodsk Winter Training Camp, Moscow SU Trinity Contest](http://clatisus.com/2015-2016 Petrozavodsk Winter Training Camp, Moscow SU Trinity Contest)

cz_xuyixuan的题解

ccosi的题解

证明

我们采用数学归纳法的思路。

  • k=1 时,我们先证明 n 条线段中最短的线段期望长度是 1n2

不妨考虑最短长度不小于 x 时的概率如何求解。实际上相当于把每条线段都预留上 x 的长度,剩下的就是一个随机分配的问题了,每条线段都有 (1nx) 的概率,即:
P(L1x)=P(L1x,L2x,,Lnx,L1+L2++Ln=1)=(1nx)n1


求最短线段的期望长度就是这样一个积分:
E(L1)=1n0xP(L1=x)dx =1n0P(L1x)dx =1n0(1nx)n1dx =1n2

由此, k=1 的情况得到了证明。

  • 假设 k=d 的情况,上述结论成立,我们考虑 k=d+1 的情况。

求第 d+1 短的期望长度,我们只需要先把最短的一段截走,之后就是对于 n1 条线段的第 d 短的问题了。
E(Ld+1)=E(L1)+(1nE(L1))1n1di=11ni =1n2+1ndi=11ni =1ndi=01ni


由此,命题得证。

例题 AGC 032F

你有一个大小为 1 的圆形比萨,你首先将会切 n 刀,每一刀都是随机一个 [0,2π) 的角度 θ,然后从圆心沿着水平方向逆时针 θ 的角度切下去。n 刀过后,比萨被切成了 n 份。

之后,你可以选取面积之和最接近 13 的连续的若干份比萨作为你的食物。问你吃到的比萨大小与 13 的距离的期望是多少,即 |x13| 的期望。

题目链接

解答:
ans=mi=113in(ni+1)

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
#define rep(i, n) for(int i = 1, i##_end_ = (n); i <= i##_end_; ++i)
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;

const int MOD = 1000000007, maxn = 1020000;
int muln(int x, int y) { return 1LL * x * y % MOD; }
int qpow(int x, int y) {
int ret = 1;
for(; y; y >>= 1, x = muln(x, x))
if(y & 1) ret = muln(ret, x);
return ret;
}
int inv(int x) { return qpow(x, MOD - 2); }
int n, ans, i3 = inv(3), in, p3 = 1;

int main() {
scanf("%d", &n);
in = inv(n);
for(int i = 1; i <= n; ++i) {
p3 = muln(p3, i3);
ans += muln(p3, muln(in, inv(n - i + 1)));
if(ans >= MOD) ans -= MOD;
}
printf("%d\n", ans);

return 0;
}

Related Issues not found

Please contact @YangDong02 to initialize the comment