概率期望生成函数 学习笔记?

概率期望生成函数 学习笔记?

因为太菜了没学到什么本质...

部分摘自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 \]

    第二个是期望,第三个是方差(可以发现是平方的期望-期望的平方的形式)

  • 例题

    • CTST2006歌唱王国

      题意:给一个长\(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\)这个东西就随便求了

      Code

    • 「SDOI2017」硬币游戏

      题意:\(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)\)

      最后吐槽一下居然不需要取模,这个精度怎么看都不是很对的样子

      Code

posted @ 2019-04-10 21:53  露迭月  阅读(1272)  评论(1编辑  收藏  举报