概率期望生成函数 学习笔记?
概率期望生成函数 学习笔记?
因为太菜了没学到什么本质...
部分摘自18年论文“杨懋龙 浅谈生成函数在掷骰子问题上的应用”
-
定义:对于数列\(a_0,a_1,\dots,\),存在某个离散随机变量\(X\)满足\(P(X=i)=a_i\),那么\(a_n(n\in \mathbb N)\)的普通生成函数(OGF)为\(X\)的概率生成函数。
-
这里同样给出离散随机变量\(X\)的定义:函数\(X\):\(\Omega \to \mathbb R\)
语言说明就是定义在样本空间\(\Omega\)上确定的实值函数,这点一定要搞清楚。
而\(X=i\)实际表示的是一个事件,等价于集合\(\{\omega|\omega \in \Omega,X(\omega)=i\}\)
-
用符号语言表示概率生成函数即为
\[F(z)=\mathbb E(z^X)=\sum_{i=0}^\infty P(X=i)z^i \] -
一些性质
一般把\(z\)取\(1\)
\[F(1)=\sum_{i=0}^\infty P(X=i)=1\\ E(x)=F'(1)=\sum_{i=0}^\infty iP(X=i)\\ Var(X)=F''(1)+F'(1)-(F'(1))^2 \]第二个是期望,第三个是方差(可以发现是平方的期望-期望的平方的形式)
-
例题
-
题意:给一个长\(n(\le 10^5)\)值域为\(m(\le 10^5)\)的序列\(A\)。每个时间掷一个\(1\sim m\)的公平骰子并将这个数字加入到初始为空的序列\(B\)的末尾,当\(A\)是\(B\)子串时,停止,求期望停止时间。
设\(f_i\)为\(i\)时间停止的概率,\(g_i\)为\(i\)时间不停止的概率,\(F(x),G(x)\)分别为它们的生成函数。
则有
\[F(x)+G(x)=1+G(x)x \]这个式子实际上是
\[f_i+g_i=g_{i-1} \]即一个没停止的下一秒一定会分裂出的两个结果,\(1\)是\(g_0\),乘\(x\)表示在多项式中的递推。
考虑对这个式子做出变形,两边同时求导
\[F'(x)+G'(x)=G(x)+G'(x)x \]对\(x\)取\(1\)
\[E(x)=F'(1)=G(1) \]考虑求出\(G(1)\)
考虑对任意时间向后枚举一段长\(m\)的时间刚好与\(A\)匹配,此时一定会结束,但可能在中间结束。
为此,引入字符串中的一个概念
- 对于一个长度为\(n\)的序列\(A\),若\(A[1,i]=A[L-i+1,L]\),则称\(A[1,i]\)是\(A\)的一个\(border\)
定义\(a_i=[\text{A[1,i]是border}]\)
那么
\[G(x)(\frac{1}{m}x)^m=\sum_{i=1}^ma_iF(x)(\frac{1}{m}x)^{m-i} \]左边是一路钦定过去,右边是可能结束的位置。
代入\(x=1\)化简一下
\[\begin{aligned} G(x)&=\sum_{i=1}^ma_iF(1)m^i\\ &=\sum_{i=1}^mm^ia_i \end{aligned} \]\(a\)这个东西就随便求了
-
题意:\(n(\le 300)\)个人每个人猜一串长为\(m(\le 300)\)的掷硬币结果(\(0\)或\(1\)),然后每个时间开始掷硬币,直到某个人的结果为当前结果序列的子串,停止,此人获胜。求每个人获胜的概率。
无 脑 上 了
设\(f_{i,j}\)为第\(i\)个人在第\(j\)时间的时候获胜的概率,其生成函数为\(F_i(x)\)
\(g_i\)为第\(i\)个时间无人获胜的概率,其生成函数为\(G(x)\)
按照上一题的套路可以列出
\[G(x)x+1=\sum_{i=1}^nF_i(x)+G(x)\\ G(x)(\frac{1}{2}x)^m=\sum_{i=1}^n\sum_{j=1}^m[A_k[1,j]=A_i[m-j+1,m]]F_i(x)(\frac{1}{2}x)^{m-i} \]第二个式子需要枚举\(k\),也就是说它有\(k\)个。
注意到这刚好有\(n+1\)个方程和\(n+1\)个变量,可以\(x\)取\(1\)后直接高斯消元,化简一下可以得到
\[\sum_{i=1}^nF_i(1)=1\\ \sum_{i=1}^nF_i(1)\sum_{j=1}^m[A_k[1,j]=A_i[m-j+1,m]]2^j=G(1) \]我们最后要求的即是\(F_i(1)\)
最后吐槽一下居然不需要取模,这个精度怎么看都不是很对的样子
-