基本搬运自《浅谈生成函数在掷骰子问题上的应用》。

对于定义在非负整数上的离散随机变量 \(X\),级数 \(F(z) = \sum\limits_{i\ge 0} \operatorname{Pr}(X=i) z^i\) 记为 \(X\) 的概率生成函数(PGF),本质上是有特殊性质的普通型生成函数。概率生成函数在一方面提供了一种刻画概率相关模型的工具,另一方面比较形式化地总结了一类概率问题的一般性思路。

一些性质

\(F(1) = \sum\limits_{i\ge 0} \operatorname{Pr}(X=i) = 1\)

显然。

\(F^{\prime}(1) = \sum\limits_{i\ge 0} i\operatorname{Pr}(X=i) = E(X)\)

显然。类似的可以得出 \(F^{(k)}(1) = E(x^{\underline{k}})\)。

\(F^{\prime\prime}(1) + F^{\prime}(1) - (F^{\prime}(1))^2 = \bigg(\sum\limits_{i\ge 0}i^2\operatorname{Pr}(X=i)\bigg) - \bigg(\sum\limits_{i\ge 0} i\operatorname{Pr}(X=i)\bigg)^2 = \sigma^2(X)\)

其中 \(\sigma^2(X)\) 表示 \(X\) 的方差,定义为 \(\sigma^2(X) = E\big((x-E(x))^2\big)=E(x^2)-E^2(x)\)。这一条不常用到。

这一类性质基本在期望问题时用到,核心思路是利用题目性质列出 PGF 或其导数的方程,代入 \(z=1\) 解出得到答案。


论文涉及了许多例题,但本质基本相同,只要理解了方法也不难独立推导出。在这里记录一些比较有代表性的题目。

[CTSC2006]歌唱王国

给定一个长度为 \(L\) 的序列 \(A\)。然后每次掷一个标有 \(1\) 到 \(m\) 的公平骰子并将其上的数字加入到初始为空的序列 \(B\) 的末尾,如果序列 \(B\) 中已经出现了给定序列 \(A\) ,即 \(A\) 是 \(B\) 的子串,则停止,求序列 \(B\) 的期望长度。

记 \(a_i\) 表示 \([1,i]\) 是 \(A\) 的 border。记 \(f_i,g_i\) 表示 \(B\) 长度为 \(i\) 时,过程结束/未结束的方案数,其 PGF 分别为 \(F(z),G(z)\)。考虑随机加入一个字符,和钦定加入序列 \(A\) 之后的情况:

\[\begin{align}
F(z) + G(z) &= zG(z)+1 \\
G(z)\bigg(\dfrac{z}{m}\bigg)^L &= \sum\limits_{i=1}^{L}a_iF(z)\bigg(\dfrac{z}{m}\bigg)^{L-i}
\end{align}
\]

其中第二个等式是由于我们可以从 border 处开始匹配。

将等式 \((1)\) 求导并代入 \(z=1\),得到

\[\begin{align}
F^{\prime}(z) + G^{\prime}(z) &= zG^{\prime}(z) + G(z) \\
F^{\prime}(1) &= G(1)
\end{align}
\]

将 \(z=1\) 代入等式 \((2)\) 中可得

\[\begin{align}
G(1)\bigg(\dfrac{1}{m}\bigg)^L &= \sum\limits_{i=1}^{L}a_iF(1)\bigg(\dfrac{1}{m}\bigg)^{L-i} \\
G(1) &= \sum\limits_{i=1}^La_im^i
\end{align}
\]

其中用到了 \(F(1)=1\)。至此我们已经可以高效且简洁的计算答案了。

[SDOI2017]硬币游戏]

给定 \(n\) 个长度分别为 \(L_i\) 的序列 \(A_i\),保证每个序列互不相同。再给出一个标有 \(1\) 到 \(m\) 的骰子,其中抛出 \(i\) 的概率为 \(P_i\)。然后每次抛一次骰子将骰子上的数字加入到初始为空的序列 \(B\) 末尾,如果给定的 \(n\) 个序列的其中一个是 \(B\) 的子串,则停止,这个序列获胜。求每个序列获胜的概率,并求结束时 \(B\) 长度的期望。

较原题有所改动,不影响解题。

上一题的拓展。类似上一题的思路,记 PGF \(F_i(z),G(z)\) 分别表示第 \(i\) 个串长度为 \(i\) 时获胜的 PGF、长度为 \(i\) 时未结束的 PGF,\(b_{i,j,k}\) 表示第 \(j\) 个串的 \([1,k]\) 和第 \(i\) 个串的 \([l_i-k+1,l_i]\) 相同。考虑随机加入一个字符,和加入一个目标串:

\[\begin{align}
G(z)+\sum\limits_{i=1}^n F_i(z) &= zG(z)+1 \\
\forall i \in [1,n],\ G(z)\bigg(\dfrac{z}{m}\bigg)^{l_i} &= \sum\limits_{j=1}^{n}\sum\limits_{k=1}^{l_j}a_{i,j,k}F_j(z)\bigg(\dfrac{z}{m}\bigg)^{L-k}
\end{align}
\]

我们的目标是求每个 \(F_i(1)\)。照例求导并代入 \(z=1\):

\[\begin{align}
\sum\limits_{i=1}^n{F_i}^{\prime}(1) &= G(1) \\
\forall i \in [1,n],\ G(1)\bigg(\dfrac{1}{m}\bigg)^{l_i} &= \sum\limits_{j=1}^{n}\sum\limits_{k=1}^{l_j}a_{i,j,k}F_j(1)\bigg(\dfrac{1}{m}\bigg)^{l_j-k}
\end{align}
\]

这样我们得到了关于 \(F_i(1)\) 和 \(G(1)\) 一共 \(n+1\) 个未知数的 \(n\) 个方程。发现 \(\sum\limits_{i=1}^nF_i(x)\) 即为随机序列长度的 PGF,于是得到最后一个方程

\[\sum\limits_{i=1}^nF_i(x) = 1
\]

高斯消元即可。

概率生成函数(PGF)简记的更多相关文章

  1. 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)

    洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...

  2. 洛谷P3706 [SDOI2017]硬币游戏(概率生成函数+高斯消元)

    题面 传送门 题解 不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了 //minamoto #include<bits/stdc++.h> #define R register ...

  3. 洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)

    题面 传送门 给定一个长度为\(L\)的序列\(A\).然后每次掷一个标有\(1\)到\(m\)的公平骰子并将其上的数字加入到初始为空的序列\(B\)的末尾,如果序列B中已经出现了给定序列\(A\), ...

  4. 生成函数小结——[ EGF ][ ln 的一个套路 ][ 概率生成函数 ]

    看了jcvb的WC2015交流课件.虽然没懂后面的复合逆部分,但生成函数感觉受益良多. 指数生成函数 集合中大小为 i 的对象的权值是 \( a_i \) ,该集合的生成函数是 \( \sum\lim ...

  5. 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差

    [题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...

  6. P4548-[CTSC2006]歌唱王国【概率生成函数,KMP】

    正题 题目链接:https://www.luogu.com.cn/problem/P4548 题目大意 \(t\)次询问,给出一个长度为\(m\)的串\(S\)和一个空串\(T\),每次在\(T\)后 ...

  7. Luogu4548 CTSC2006 歌唱王国 概率生成函数、哈希

    传送门 orz ymd 考虑构造生成函数:设\(F(x) = \sum\limits_{i=0}^\infty f_ix^i\),其中\(f_i\)表示答案为\(i\)的概率:又设\(G(x) = \ ...

  8. @loj - 2004@ 「SDOI2017」硬币游戏

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数 ...

  9. 【BZOJ1152】歌唱王国(生成函数,KMP)

    [BZOJ1152]歌唱王国(生成函数,KMP) 题面 BZOJ 洛谷 题解 根据\(YMD\)论文来的QwQ. 首先大家都知道普通型生成函数是\(\displaystyle \sum_{i=0}^{ ...

  10. 深度神经网络结构以及Pre-Training的理解

    Logistic回归.传统多层神经网络 1.1 线性回归.线性神经网络.Logistic/Softmax回归 线性回归是用于数据拟合的常规手段,其任务是优化目标函数:$h(\theta )=\thet ...

随机推荐

  1. java顺序数组插入元素

    本文主要阐明已知顺序数组,在数组中插入一个数据元素,使其仍然保持有序. 关键是寻找num在原数组中插入的位置: 当num在原数组中是最大的情况,num应该插入到原数组的末尾. 否则,应该遍历原数组,通 ...

  2. 2、Java封装、继承与多态

    /** * 类.对象.面向过程.面向对象的理解: * 1.类:类是封装对象的属性和方法的载体 * * 2.对象:对象是类抽象出来的一个实例 * * 3.面向过程:面向过程注重的是具体的实现过程,因果关 ...

  3. 无旋树堆(FHQ-Treap)学习笔记

    简介 无旋树堆(一般统称 \(\text{FHQ-Treap}\)),是一种平衡树.可以用很少的代码达到很优秀的复杂度. 前置知识: 二叉搜索树 \(\text{BST}\) \(\text{Trea ...

  4. 04-Sed操作参数

    1 Sed操作参数 1.1 s--替换 s表示替换(substitute)文件内的字符串. [address1],[address2]s/pattern/replacement/[flag] # s/ ...

  5. 大公司为什么禁止SpringBoot项目使用Tomcat?

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  6. 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作,拓展auth_user表

    目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 四.auth认证模块 五.auth认 ...

  7. redis实现分布式锁(包含代码以及分析利弊)

    redis实现分布式锁(基础版) 使用redis实现分布式锁的方法有多种,基础版本是基于setnx命令,即如果不存在则设置.这个命令可以保证只有一个客户端能够成功设置一个key,从而获得锁.设置key ...

  8. @EnableDiscoveryClient和@EnableEurekaClient springboot3.x

    @EnableDiscoveryClient和@EnableEurekaClient 将一个微服务注册到Eureka Server(或其他服务发现组件,例如Zookeeper.Consul等)的步骤 ...

  9. Lodop打印小票

    使用Lodop打印小票 1.html页面 <head> <meta http-equiv="Content-Type" content="text/ht ...

  10. Seata分布式事务

    使用Seata版本:1.6.1(2023/2/6最新版)该版本存在很多坑,相较于1.0版本,配置上存在很多差别,如果你的版本不同,请不要参考本文. 1.6.1配置存在许多问题,比较难找,如果你使用1. ...