zoukankan      html  css  js  c++  java
  • 概率生成函数学习笔记

    本文借助 $2018$ 年杨懋龙的集训队论文 《浅谈生成函数在掷骰子问题上的应用》。

    但由于作者水平有限,并没有看懂有些式子的组合意义,仅能通过自己的推导得出结果。

    本质是将期望的 $k$ 次下降幂写成 $PGF$ 的 $k$ 阶导数,并通过辅助函数求得。


    论文例题

    CTSC2006 歌唱王国

    题意

    $T$ 组数据,每次给定一个字符串,每次在 $1sim n$ 中随机一个数添加到字符串末端,当字符串出现给定字符串后停止,求期望长度。

    $1leq n,|z|leq 10^5,tleq 50$ 。 

    题解

    设 $f(x)$ 表示长度为 $i$ 的概率生成函数,$g(x)$ 表示长度大于 $i$ 的概率生成函数,即未停止的概率。

    $$f(x)+g(x)=1+g(x)cdot x$$

    可以看成每次从未停止中加上一次字符可能结束也可能继续。

    $$g(x)cdot (dfrac{1}{n}x)^m=sum_{i=1}^m a_icdot f(x)cdot (dfrac{1}{n}x)^{m-i}$$

    $a_iin {0,1}$,其中 $a_i$ 为字符串的 $border$ 集合是否出现 $i$ 。

    可以看成我们在一个未停止串中添加当前字符串那么肯定停止,若提前停止那么即为当前串的 $border$ 。

    对第一个式子求导带入 $x=1$ 得

    $$f'(1)=g(1)$$

    而将 $x=1$ 带入二式化简可得

    $$g(1)=sum_{i=1}^m a_icdot n^i$$

    $mathcal O(Tm)$ 计算即可。

    Dice

    题意

    一个 $m$ 面的公平骰子,求最后 $n$ 次结果相同就结束的期望次数或者求最后 $n$ 次结果全不同就结束的期望次数。

    $n,mleq 10^6$ 。

    题解

    第一问:

    设 $F(x)$ 表示答案的 $PGF$ ,$G(x)$ 表示还未结束的 $PGF$ ,则

    $$F(x)+G(x)=G(x)cdot x+1\(G(x)-1)cdot (frac{x}{m})^{n-1}=sum_{i=0}^{n-2} F(x)cdot (frac{x}{m})^{i}$$

    第二个式子表示枚举多了多少个能补。

    解得

    $$F'(1)=G(1)=dfrac{m^n-1}{m-1}$$

    第二问:

    设 $F(x)$ 表示答案的 $PGF$ ,$G(x)$ 表示还未结束的 $PGF$ ,同理可得

    $$egin{aligned}F(x)+G(x)&=G(x)cdot x+1\(G(x)-1)cdot dfrac{A(m-1,n-1)}{m^{n-1}}cdot x^{n-1}&=sum_{i=1}^{n-1} F(x)cdot x^{n-1-i}cdot dfrac{A(m-i-1,n-i-1)}{m^{n-1-i}}\\F'(1)=G(1)&=(sum_{i=1}^{n-1} dfrac{frac{(m-i-1)!}{(m-n)!}}{m^{n-i-1}}+dfrac{frac{(m-1)!}{(m-n)!}}{m^{n-1}}) imes m^{n-1} imes dfrac{(m-n)!}{(m-1)!}\&=sum_{i=0}^{n-1} m^icdot dfrac{(m-i-1)!}{(m-n)!} imes dfrac{(m-n)!}{(m-1)!}\&=sum_{i=0}^{n-1} m^icdot dfrac{(m-i-1)!}{(m-1)!}\&=sum_{i=1}^n m^icdot dfrac{(m-i)!}{m!}end{aligned}$$ 


    练习题

    随机游走

    题意

    给定一棵根为 $1$ 的有根树,定义 $E_{S,T}$ 表示从 $S$ 开始随机游走,到 $T$ 停止的步数平方的期望,$sub_u$ 表示 $u$ 子树中所有点。 

    $q$ 次询问,每次给定 $u,v$ ,求 $sum _{xin sub_u,yin sub_v} E(x,y)$ ,保证 $sub_ucap sub_v=varnothing$ 。

    题解

    定义 $f_u$ 表示 $u ightarrow f_u$ 的概率生成函数。

    先求一次的情况

    $$egin{aligned}f_u&=dfrac{1}{d}x+dfrac{1}{d}sum_{(v,u)} xf_vf_u\dcdot f_u&=x+xf_usum_v f_v\dcdot f_u'&=1+f_usum_v f_v+xf_u'sum_v f_v+xf_usum_v f_v'end{aligned}$$

    带入 $x=1$ 

    $$egin{aligned}dcdot f_u'&=1+f_usum_v f_v+f_u'sum_v f_v+f_usum_v f_v'\&=1+(d-1)+(d-1)cdot f_u'+sum_v f_v'\f'_u&=d+sum_v f'_vend{aligned}$$

    同理求二次

    $$egin{aligned}f''_u=2(d-1)cdot f'_u+2sum_v f'_v+sum_v f''_v+2f'_usum_v f'_vend{aligned}$$

    同理我们得到 $g_u$ 表示 $f_u ightarrow u$ 的概率生成函数的一阶导和二阶导。

    而对于 $E_{u,v}$ 相当于将路径上每条边生成函数相乘的一阶导和二阶导之和,对多项式维护 $f(1),f'(1),f’'(1)$ ,可以倍增维护。  

    而对于子树情况可以处理出每个点到 $u/v$ 的生成函数,和上述同理。

    时间复杂度 $mathcal O(qlog n)$ 。

    ZJOI2019 密码

    题意 

    有 $n$ 个开关,每个开关有属性 $s_iin{0,1}$ ,$0$ 表示关,$1$ 表示开,还有属性 $p_i$ 表示有 $dfrac{p_i}{sum p}$ 的概率将其 $s_i$ 翻转。

    问期望次数使得所有开关均 $s_i=0$ 。

    $1leq nleq 100,1leq sum pleq 5 imes 10^4$ 。

    题解

    设 $sum_{i=1}^n p_i=P$ 。

    由于开关有标号,用 $EGF&PGF$ 表示将 $s_i$ 变为 $0$ 的概率指数生成函数,设为 $f_i(x)$ 。

    $$ ext{$s_i$ is odd} ightarrow f_i(x)=dfrac{(frac{p_i}{P})cdot x^1}{1!}+dfrac{(frac{p_i}{P})^3cdot x^3}{3!}+...=dfrac{e^{frac{p_i}{P}x}-e^{-frac{p_i}{P}x}}{2}\ ext{$s_i$ is even} ightarrow f_i(x)=dfrac{e^{frac{p_i}{P}x}+e^{-frac{p_i}{P}x}}{2}$$

    设 $f(x)=prod_{i=1}^n f_i(x)$ ,则 $[x^k] f(x)$ 表示次数为 $k$ 时满足 $s_i$ 均为 $0$ 的概率。

    但是有可能在 $k$ 前面就已经到达,那么设 $g(x)$ 表示移动 $k$ 次且保持原状态的概率。

    $$g(x)=prod_{i=1}^n dfrac{(e^{frac{p_i}{P}x}+e^{-frac{p_i}{P}x})}{2}$$

    但是咱们要求的是 $OGF&PGF$ 。 

    设 $f(x)$ 的 $OGF$ 为 $F(x)$ ,$g(x)$ 的 $OGF$ 为 $G(x)$ ,答案的 $OGF$ 为 $H(x)$ 。

    如何将 $EGF ightarrow OGF$ ,以 $f$ 为例,可以将函数写成

    $$f(x)=sum_{i=-P}^P a_i e^{frac{i}{P} x}=sum_{i=-P}^P dfrac{a_i}{1-frac{i}{P}x}\g(x)=sum_{i=-P}^P dfrac{b_i}{1-frac{i}{p}x}$$

    $a_i,b_i$ 的求法可以暴力乘法背包得到。

    $$H(x)G(x)=F(x)\H(x)=dfrac{F(x)}{G(x)}$$

    由于 $H(x)$ 为 $PGF$ ,期望为 $H’(1)$ 。

    $$H'(x)=(dfrac{F(x)}{G(x)})'=dfrac{F'(x)G(x)+F(x)G'(x)}{G^2(x)}$$

    那么只要求 $F’(1),F(1),G(1),G’(1)$ 即可。

    但是观察 $F,G$ 发现他们在 $x=1$ 时是不收敛的,因为当 $i=P$ 时分母会出问题。

    但是答案一定是收敛的,那么我们将 $F,G$ 均乘上 $(1-x)$ ,可以发现此时 $F,G$ 收敛。

    $$F(1)=a_P\F'(1)=sum_{i=-P}^P dfrac{a_i}{frac{i}{p}-1} \G(1)=b_p\G'(1)=sum_{i=-P}^P dfrac{b_i}{frac{i}{p}-1}$$

    将 $x=1$ 带入 $H’(1)$ 即可解决。时间复杂度 $mathcal O(nsum P+plog mod)$ 。

    https://loj.ac/s/1071824

  • 相关阅读:
    我们怎样确保从大数据计算中获得价值
    大数据恐惧症
    大数据恐惧症
    一文读懂聚类算法
    一文读懂聚类算法
    用Python实现一个大数据搜索引擎
    用Python实现一个大数据搜索引擎
    No mysqld or mysql.server after mariadb-server install
    pip下载默认绕过代理
    linux下解压 tar.bz2
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/14427478.html
Copyright © 2011-2022 走看看