概率期望生成函數 學習筆記?


概率期望生成函數 學習筆記?

因為太菜了沒學到什么本質...

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM