答案
设答案的期望为
E
[
X
]
E[X]
E[X],其中
X
X
X 为步数的随机变量,若设
Y
Y
Y 为最后字符的随机变量,则由全期望公式:
E
[
X
]
=
E
[
E
[
X
∣
Y
]
]
=
∑
y
=
1
∑
P
(
y
=
Y
)
E
[
X
∣
Y
=
y
]
E[X]=E[E[X|Y]]=\sum_{y=1}^{\sum} P(y=Y)E[X|Y=y]
E[X]=E[E[X∣Y]]=y=1∑∑P(y=Y)E[X∣Y=y]
概率
假设当前字符为
y
y
y,出现次数为
i
i
i,若设
O
P
T
OPT
OPT 为此次操作的随机变量,则由全概率公式,
P
i
(
Y
=
y
)
=
∑
o
p
t
P
(
O
P
T
=
o
p
t
)
P
i
(
Y
=
y
∣
O
P
T
=
o
p
t
)
=
i
(
i
−
1
)
+
(
n
−
i
)
(
n
−
i
−
1
)
n
(
n
−
1
)
P
i
(
Y
=
y
)
+
i
(
n
−
i
)
n
(
n
−
1
)
(
P
i
+
1
(
Y
=
y
)
+
P
i
−
1
(
Y
=
y
)
)
P_i(Y=y)=\sum_{opt} P(OPT=opt)P_i(Y=y|OPT=opt) \\ =\frac{i(i-1)+(n-i)(n-i-1)}{n(n-1)}P_i(Y=y)+\frac{i(n-i)}{n(n-1)}(P_{i+1}(Y=y)+P_{i-1}(Y=y))
Pi(Y=y)=opt∑P(OPT=opt)Pi(Y=y∣OPT=opt)=n(n−1)i(i−1)+(n−i)(n−i−1)Pi(Y=y)+n(n−1)i(n−i)(Pi+1(Y=y)+Pi−1(Y=y))
化简得
P
i
(
Y
=
y
)
=
P
i
−
1
(
Y
=
y
)
+
P
i
+
1
(
Y
=
y
)
2
P_i(Y=y)=\frac{P_{i-1}(Y=y)+P_{i+1}(Y=y)}{2}
Pi(Y=y)=2Pi−1(Y=y)+Pi+1(Y=y),发现是等差数列,由于
P
0
(
y
=
Y
)
=
0
,
P
n
(
Y
=
y
)
=
1
P_0(y=Y)=0, P_n(Y=y)=1
P0(y=Y)=0,Pn(Y=y)=1,故
P
i
(
Y
=
y
)
=
i
n
P_i(Y=y)=\frac{i}{n}
Pi(Y=y)=ni。
期望
令 T T T 为 Y = y Y=y Y=y 这个事件,即最后的字符是 y y y。
设
E
i
[
X
∣
T
]
E_i[X|T]
Ei[X∣T] (事实上,这个下标
i
i
i,只是表示我们在不同的样本空间里罢了)表示最后字符为
y
y
y,当前这种字符有
i
i
i 个,步数的期望。这是条件期望。若设
O
P
T
∣
T
OPT|T
OPT∣T 为此次操作的随机变量(当然,是在事件
T
T
T 发生的大前提下),则由全期望公式,
E
i
[
X
∣
T
]
=
∑
o
p
t
P
i
(
(
O
P
T
∣
T
)
=
o
p
t
)
E
i
[
(
X
∣
T
)
∣
(
O
P
T
∣
T
)
]
=
1
+
∑
o
p
t
P
i
(
O
P
T
=
o
p
t
,
T
)
P
(
T
)
E
n
e
x
t
(
i
,
O
P
T
)
[
X
∣
T
]
E_i[X|T]=\sum_{opt} P_i((OPT|T)=opt)E_i[(X|T)|(OPT|T)] \\ = 1+\sum_{opt} \frac{P_i(OPT=opt,T)}{P(T)} E_{next(i,OPT)}[X|T] \\
Ei[X∣T]=opt∑Pi((OPT∣T)=opt)Ei[(X∣T)∣(OPT∣T)]=1+opt∑P(T)Pi(OPT=opt,T)Enext(i,OPT)[X∣T]
(第 3 步使用条件概率公式)
(重要) P i ( O P T = o p t , T ) P_i(OPT=opt,T) Pi(OPT=opt,T) 是什么?它的意思是做完这个操作后这个字符能作为最后字符,所以是 P ( O P T = o p t ) × n e x t ( i , O P T ) n P(OPT=opt)\times \frac{next(i,OPT)}{n} P(OPT=opt)×nnext(i,OPT)。
因此,上式化为
E
i
[
X
∣
T
]
=
1
+
i
(
n
−
i
)
n
(
n
−
1
)
i
−
1
i
E
i
−
1
[
X
∣
T
]
+
i
(
n
−
i
)
n
(
n
−
1
)
i
+
1
i
E
i
+
1
[
X
∣
T
]
+
(
1
−
2
i
(
n
−
i
)
n
(
n
−
1
)
)
E
i
[
X
∣
T
]
E_i[X|T]=1+\frac{i(n-i)}{n(n-1)} \frac{i-1}{i} E_{i-1}[X|T]+\frac{i(n-i)}{n(n-1)} \frac{i+1}{i} E_{i+1}[X|T]+\left(1 - \frac{2i(n-i)}{n(n-1)} \right) E_i[X|T]
Ei[X∣T]=1+n(n−1)i(n−i)ii−1Ei−1[X∣T]+n(n−1)i(n−i)ii+1Ei+1[X∣T]+(1−n(n−1)2i(n−i))Ei[X∣T]
故而
E
i
[
X
∣
T
]
=
n
(
n
−
1
)
2
i
(
n
−
i
)
+
i
−
1
2
i
E
i
−
1
[
X
∣
T
]
+
i
+
1
2
i
E
i
+
1
[
X
∣
T
]
E_i[X|T]=\frac{n(n-1)}{2i(n-i)}+\frac{i-1}{2i}E_{i-1}[X|T]+\frac{i+1}{2i}E_{i+1}[X|T]
Ei[X∣T]=2i(n−i)n(n−1)+2ii−1Ei−1[X∣T]+2ii+1Ei+1[X∣T]
实现
设 f i = E i [ X ∣ T ] f_i=E_i[X|T] fi=Ei[X∣T],则 f i = n ( n − 1 ) 2 i ( n − i ) + i − 1 2 i f i − 1 + i + 1 2 i f i + 1 f_i=\frac{n(n-1)}{2i(n-i)}+\frac{i-1}{2i}f_{i-1}+\frac{i+1}{2i}f_{i+1} fi=2i(n−i)n(n−1)+2ii−1fi−1+2ii+1fi+1。边界 f 0 = ? , f n = 0 f_0=?, f_n=0 f0=?,fn=0。( f 0 f_0 f0 是未定义的,但没关系,因为 f 1 f_1 f1 的式子中 f 0 f_0 f0 的系数是 0 0 0)。
答案为 ∑ i = 1 ∑ c n t i n f c n t i \sum\limits_{i=1}^{\sum} \frac{cnt_i}{n} f_{cnt_i} i=1∑∑ncntifcnti。
现在的问题是求出 f i f_i fi,我们待定 f n − 1 f_{n-1} fn−1,将所有数都表示为关于 f n − 1 f_{n-1} fn−1 的一次函数,此时还未使用 f 1 f_1 f1 的式子,用它来算出 f n − 1 f_{n-1} fn−1 的值即可。
时间复杂度 O ( n ) O(n) O(n)。
我未解决的问题
样本空间是什么?如果说是操作序列的话,样本空间岂不就是无限集,那么这就不是古典概型了?
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 100005;
int N, buc[30]; char S[MAXN]; double f[MAXN], a[MAXN], b[MAXN], ans;
int main() {
scanf("%s", S + 1), N = strlen(S + 1); int i;
for (i = 1; i <= N; ++i) ++buc[S[i] - 'A'];
a[N - 1] = 1;
for (i = N - 1; i >= 2; --i) {
a[i - 1] = a[i] * 2 * i / (i - 1) - a[i + 1] * (i + 1) / (i - 1),
b[i - 1] = b[i] * 2 * i / (i - 1) - b[i + 1] * (i + 1) / (i - 1) - (double)N * (N - 1) / (ll)((i - 1) * (N - i));
}
f[N - 1] = (N / 2.0 + b[2] - b[1]) / (a[1] - a[2]);
for (i = 1; i <= N - 2; ++i) f[i] = a[i] * f[N - 1] + b[i];
for (i = 0; i < 26; ++i) ans += f[buc[i]] * buc[i] / N;
printf("%.1f\n", ans);
return 0;
}