其实这是一篇正经的科普文章。
一些约定#
- 随机过程:对一个参数集随机的一组变量集合,参数集通常是时间 T,若 ∀t∈T,Xt 为随机变量,那么 {Xt|t∈T} 就是一个随机过程。
- 条件概率:P(A|B),即 A 事件在 B 事件条件下发生的概率。
- 条件期望:E(A|B),类比条件概率,即 A 事件在 B 事件条件下的期望。
- 几乎一定:事件 A 几乎一定发生,当且仅当 P(A)=1。A 不发生的情况集合可能非空,但它们的概率为 0。样本空间有限时,“几乎一定”和“一定”通常没有区别;但是当样本空间无限时,就有区别了。比如 [0,1] 中均匀随机一个实数 x,则 P(x>0)=1,可以说选出的 x 几乎一定大于 0,但理论上确实可以存在 x=0 的样本。
离散时间鞅#
一个离散时间鞅为一个以时间为参数集合的随机过程,即随机过程 {X0,X1,⋯},满足对于任意时刻 n∈N,均有:
- E(|Xn|)<∞。
- E(Xn+1−Xn|X0,X1,⋯,Xn)=0。
第二个条件看起来不知所云,其实意思就是当 X0,X1,⋯,Xn 已经确定时,Xn+1 的期望等于 Xn。类似一个公平赌博游戏,若我们已经得到了前 n 场赌博后你所拥有的财产(观测值),那么要求第 n+1 场的观测值的期望等于第 n 场的观测值(不亏不赚),才能满足公平赌博游戏的定义(所以公平赌博游戏其实差不多就是鞅www)。
同时不难发现鞅的线性加减、增减常数都不影响其鞅的性质。
关于随机过程 {X0,X1,⋯} 的停时为一个非负的随机变量 T(可能为 ∞,即操作无限进行),满足对任意时刻 n,你可以通过观测 X0,X1,⋯,Xn 的取值得出 n 和 T 的大小关系/等量关系。即 [n=T],[n<T],[n>T] 三个随机变量的取值仅与 X0,X1,⋯,Xn 有关。
对于随机过程 {X0,X1,⋯},对应带停时为 T 的随机过程 {¯¯¯¯¯¯¯X0,¯¯¯¯¯¯¯X1,⋯} 的定义为:
¯¯¯¯¯¯¯Xn={Xnn≤TXTn>T
即 {¯¯¯¯¯¯¯X1,¯¯¯¯¯¯¯X2,⋯} 为将 {X0,X1,⋯} 在 T 之后的项全部覆盖为 T 后的随机过程,可以看作在时刻 T 终止随机操作。(所以停时也可以理解为操作的停止时间。)
由于 ¯¯¯¯¯¯¯Xn 中 n≤T 时 ¯¯¯¯¯¯¯Xn=Xn 期望不变,而 n>T 时我们钦定它期望不变,所以满足鞅期望观测值不变的性质,所以 {¯¯¯¯¯¯¯X1,¯¯¯¯¯¯¯X2,⋯} 也是一个鞅。
鞅的停时定理#
设 T 为离散时间鞅 {X0,X1,⋯} 的停时,且 T 几乎一定有限,当下面三个条件之一成立时,有 E(XT)=E(X0)
- T 几乎一定有界,即存在常数 K,P(T≤K)=1。
- E(|Xi+1−Xi|) 几乎一定有界,且 E(T) 有限,即存在常数 K 使得 P(E(|Xi+1−Xi|)≤K)=1
- ¯¯¯¯¯¯Xi 几乎一定有界,即存在常数 K 使得 P(|¯¯¯¯¯¯Xi|≤K)=1
为了帮助理解,给出下面若干例子:
- 数轴上从 0 开始随机向右游走,每次走 1 或 2 的距离,走过一个常数 K 后停止。那么 T 一定有界,满足第一个条件。
- 从 [0,1] 中随机选择实数,直到选出非 0 数为止。T 几乎一定有界,满足第一个条件。
- 数轴上从 0 开始随机左右游走,每次走 1 的距离,走到区间 [−K,K](K 为常数) 边界后停止。由于 ¯¯¯¯¯¯¯Xn 有界 [−K,K],满足第三个条件。
- 你在读这篇文章,假设你每次随机向目前阅读位置的后面跳一个位置然后开始读,读完为止。那么很显然 ¯¯¯¯¯¯¯Xn 有界(文章长度),也满足第三个条件。
- 第二个条件是大多数题目所包含的(比如让你求停时的期望,每次操作带有的变化量有界等等)。
势能分析#
考虑经典模型:
假设现在有随机过程 {X0,X1,⋯},T 为其停时,给定初始状态 X0,终止状态 ¯¯¯¯¯¯¯XT,求 E(T)。
考虑构造势能函数 φ(X),同时描述了时间和状态两个变量:
- E(φ(Xn+1)−φ(Xn)|X0,X1,⋯,Xn)=−1
- φ(XT) 为常数,且 ∄i<T,φ(Xi)=φ(XT)
第一个限制保证了每个时刻,势能的变化量期望为 −1,那么 E(φ(X0))−E(φ(Xn))=n;第二个限制保证了末状态势能唯一,也就是保证末状态为第一个满足终止条件的状态的需要。
构造 Yi=φ(Xi)+i,根据定义,{Y0,Y1,⋯} 为一个离散时间鞅。那么根据停时定理,可以得到 E(YT)=E(Y0),即 E(φ(XT)+T)=E(φ(X0)),即 E(T)=E(φ(X0))−E(φ(XT)),根据定义右边两项都是常数值,于是就能方便地求出 E(T)。
有的地方也把 φ 取相反数,那么就是每次期望 +1,期望停时为初状态的势能减去末状态的势能。
对于一般题目来讲,构造关于题面中状态有关量为自变量的函数,然后根据第一条限制解函数方程/递推,并使用鞅与停时定理求出期望停时即可。
势能具有相对性,这允许我们对于一些常数 C,钦定 f(C) 的值。这通常会使函数方程大大简化。
CF1025G Company Acquisitions#
定义整个局面 X 的势能函数为 φ(X),由于我们只关心每个点跟在屁股后面的点的个数,定义单个点 u 的势能为 f(cu),cu 为局面 X 下跟在 u 后的点的个数,f 为关于 c 的函数,令 φ(X)=∑uf(cu)。
则 X→X′ 的势能变化量只和每次随机选出来的两个点 u,v 的 c 有关,令 cu=x,cv=y:
E(φ(X′))−E(φ(X))=−1E(φ(X′))=E(φ(X))−112(f(x+1)+yf(0))+12(f(y+1)+xf(0))=(f(x)+f(y))−1
我们令 f(0)=0:
12f(x+1)+12f(y+1)=f(x)+f(y)−1
要求对任意 x,y 均成立,那么一个简单的想法是直接拆两半:
12f(x+1)=f(x)−12
结合 f(0)=0 得到:
f(x)=1−2x
那么答案就是 (∑uf(cu))−f(n),复杂度 O(n)。
CF1479E School Clubs#
我们只关心每个组内的人数,所以依旧令局面 X 的势能值 φ(X)=m∑i=1f(ai) 为各个组势能之和,一组的势能定义为其人数 ai 的 f 值。
每次操作,将随机发电的那个人所在的组拎出来,设为第 i 组:
- 这个人新开了一个组:φ(X′)=φ(X)−f(ai)+f(ai−1)+f(1)。
- 这个人回到了原来的组:φ(X′)=φ(X)。
- 这个人跑到了其他组,设为 j 组:φ(X′)=φ(X)−f(ai)−f(aj)+f(ai−1)+f(aj+1)
然后就是一些 Dirty Work 了:
E(φ(X′)−φ(X)|X)=m∑i=1ai2n⎛⎝−f(ai)+f(ai−1)+f(1)+ainφ(X)+∑j≠iajn(−f(ai)−f(bi)+f(ai−1)+f(bi+1))⎞⎠=m∑i=1ai2n⎛⎝−(2−ain)f(ai)+(2−ain)f(ai−1)+f(1)+∑j≠i(f(aj+1)−f(aj))⎞⎠=12f(1)+n∑i=1ai2n(−(3−2ain)f(ai)+(2−ain)f(ai−1)+(1−ain)f(ai+1))=−1
不妨设 f(1)=−2:
n∑i=1ai2n2(−(3n−2ai)f(ai)+(2n−ai)f(ai−1)+(n−ai)f(ai+1))=0
−(3n−2a)f(a)+(2n−a)f(a−1)+(n−a)f(a+1)=0
然后 O(n) 递推 f 的值即可。这是能过的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话