概率期望生成函數 學習筆記?
因為太菜了沒學到什么本質...
部分摘自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)\)
最后吐槽一下居然不需要取模,這個精度怎么看都不是很對的樣子
-
