闲话 25.2.2

闲话

我怎么感觉我读了这个论文,还不知道 kernel method 是啥啊。

没人总结这个,可能未来要读一些新东西。

推歌:时间的彼端 by 暗猫の祝福 et al.

the Kernel Method: a collection of examples 读后感

1. 第一次出现

在 H. Prodinger 看来,kernel method 发源于 Knuth 的书《计算机程序设计艺术・卷1:基础算法》的习题 2.2.1.-4。之后,该方法在论文 Generating functions for generating trees 中被总结。在此,我们首先重现 Knuth 最初的习题,来引入 kernel method。

模型是这样的:在直角坐标系上,从原点出发,每次可以从 (n,m) 走到 (n+1,m±1),但不能越过 x 轴,即从 (n,0) 只能走到 (n+1,1)。这也叫 Dyck 路。我们的目的是计数从原点出发、到达 (n,m) 的路径。

我们接下来的重点就是 Knuth 所使用的推导方法。不妨建立生成函数 fm(z),其中 [zn]fm(z) 是我们的目标。那么立得如下的递归关系:

fm(z)=zfm1(z)+zfm+1(z),m1fm(z)=1+zf1(z)

随后引入 F(z,x)=m0fm(z)xm,那么据递推,写出

F(z,x)=zxF(z,x)+zx[F(z,x)f0(z)xf1(z)]+f0(z)

化简得到(f0(z)=F(z,0)

F(z,x)=zxF(z,x)zx[F(z,x)F(z0)]+1

据此 F(z,x)=zF(z,0)xzx2x+z。我们不能朴素地带入 x=0 来解出 F(z,0),因为这只会得到恒等式。但分解分母为 z(xr1(z))(xr2(z)),其中

r1,2(z)=114z22z

注意到 x,z0xr1(z)xz,故 F(z,x) 的因式 (xr1(z))1(0,0) 的邻域内没有幂级数展开式,但 F(z,x) 必然有,故这个“劣”的因式实际上必然不存在,即 xr1(z) 也是分子的因式。那么将分子视作 f(x),则自然有 f(r1(z))=0,从而得到 zF(z,0)r1(z)=0,因此约掉共同的 xr1(z) 得到

F(z,x)=1z(xr2(z))=212xz+14z2

那么显然地,走到 (2n,0) 的方案数,或 Catalan 数,即

[z2n]F(z,0)=1n+1(2nn)

相似地,到达 (n,m)(显然应有 nm(mod2))的方案数为

[xmzn]F(z,x)=[zn+1](2z1+14z2)m+1=m+1n+1[znm](1+z2)n+1=m+1n+1(n+1nm2)

2. Knödel 游走

Knödel 构造了一个简单的装箱问题,其形式可以转化为特殊图上的随机游走。有大小为 1 的箱子,以及随机到来的大小为 kd,k=1,,d1 的物品,以及一个在线的、目的是尽可能装满更多箱子的策略。这个问题可以用“状态”来描述,每个状态都编码了某个特定时刻中部分装满的箱子。我们在下面处理了 d=3,4 的情况。更大的 d 会导出十分复杂的情况,我们不处理。

在最简单的版本里,箱子的大小为 1,物品的大小为 1323,两种物品随机到来。有一个人想要在线地装满尽可能多的箱子,这样本质上会剩下一系列装了 23 的箱子,我们会将其减少或增加到 1。这个模型可以自然地被抽象为在一个特殊的无穷图上、从状态 0(下层最左侧的节点)开始的随机游走(又名 Knödel 游走,以纪念其创造者)。上述特殊图是
image

在这个情况中,会有一个特殊的状态 β(上层的唯一节点),表示一个装了 13 的箱子。

我们的目的是找到一个二元生成函数,其系数编码了在图上游走的步数与随机游走最终到达的状态。从这里,可以得到每个状态未利用的空间:状态 00,状态 β(一个装了 1/3 的箱子)为 2/3,状态 kk 个装了 2/3 的箱子)为 k/3

fa(z) 为生成函数,其中 [zn]fa(z) 计数了所有走了 n 步、终止于状态 aaNa=β)的游走路径。图上的边表示了所有可能的转移,走一步在生成函数上表示为乘 z,立得

fk(z)=zfk1(z)+zfk+1(z),k2f1(z)=zf0(z)+zfβ(z)+zf2(z)f0(z)=1+zf1(z)+zfβ(z)fβ(z)=zf0(z)

引入二元生成函数 F(z,x)=m0fm(z)xm,那么使用 1. 中的 r1,2(z) 的定义有

F(z,x)=zxF(z,x)+zx[F(z,x)f0(z)]+1+(1+x)zfβ(z)=zxF(z,x)+zx[F(z,x)F(z,0)]+1+(1+x)z2F(z,0)=z(1x(1+x)z)F(z,0)xzx2x+z=z(1x(1+x)z)F(z,0)xz(xr1(z))(xr2(z))

同上作代换 x=r1(z) 得到 z(1r1(z)(1+r1(z))z)F(z,0)r1(z)=0,故 f0(z)=F(z,0)=r1(z)z(1+z)(1r1(z))fβ(z)=zf0(z),进一步有

F(z,x)=r1(z)(1+xzr1(z))z(1+z)(1r1(z))(1xr1(z))

从这个式子中得到 k1,fk(z)=r1k+1(z)z(1r1(z))。作为检验,化简 fβ(z)+m0fi(z) 得到 (12z)1,这与其组合意义相符。

要对 m1 的情况计算 [znxm]F(z,x),使用另类拉格朗日反演,得到

[zn]r1m+1(z)z(1r1(z))=[zn+1]zm+11z(1z2)(1+z2)n=[znm](1+z)(1+z2)n=(nnm2)

由于 (1+z2)n 只有偶数处有值,最后一步讨论了 nm,nm1 的奇偶性。此外,我们也可以对任意的 n,m 计算 F 的系数,繁而不难,从略。

下一个模型包含大小为 1 的箱子,以及随机到来的大小为 14,12,34 的物品。这一次我们能得到两个状态组成的无穷序列,分别表示 i 个装了 34 的箱子,以及 i 个装了 34 的箱子加上一个装了 12 的箱子。相关的图如下:
image

考虑生成函数:fk(z) 计数了 k 个装了 34 的箱子的状态,gk(z) 计数了 k 个装了 34 的箱子、一个装了 12 的箱子的状态,h(z) 计数了一个装了 14 的箱子的状态。据图立得

f0(z)=1+zf1(z)+zg0(z)+zh(z),g0(z)=zf0(z)+zg1(z)+zh(z),f1(z)=zf0(z)+zf2(z)+zg0(z)+zg1(z)+zh(z),fi(z)=zfi1(z)+zfi+1(z)+zgi(z),i2,gi(z)=zgi1(z)+zgi+1(z)+zfi(z),i1,h(z)=zf0(z)

F(z,x)=k0fk(z)xkG(z,x)=k0gk(z)xk,有

F(z,x)=1+zxF(z,x)+zx[F(z,x)f0(z)]+zG(z,x)+zxg0(z)+z(1+x)h(z)G(z,x)=zF(z,x)+zxG(z,x)+zx[G(z,x)g0(z)]+zh(z)

生成函数的形式可能可以直接写出。注意到上面两个式子中 F,G 的系数是对应的,那么这里设 A(z,x)=F(z,x)+G(z,x),B(z,x)=F(z,x)G(z,x),据上得到

A(z,x)=xz[f0(z)+g0(z)]+zx2g0(z)+z2x(2+x)f0(z)(1z)xzx2zB(z,x)=xz[f0(z)+g0(z)]+zx2g0(z)+z2x2f0(z)(1+z)xzx2z

r1,2(z)=1z12z3z22z(1z)xzx2z=0 的二解,显然 r1,2(z)(1+z)xzx2z=0 的二解。又,xr1(z)x+r1(z) 均需要从分母中约去。分别带入 x=r1(z),x=r1(z),我们有

r1(z)z[f0(z)+g0(z)]+zr12(z)g0(z)+z2r1(z)(2+r1(z))f0(z)=0r1(z)z[f0(z)+g0(z)]+zr12(z)g0(z)+z2r12(z)f0(z)=0

解得

f0(z)=r1(z)r1(z)+r12(z)r1(z)+r1(z)r12(z)z(22zr1(z)(1+z)r12(z)+(1z)r12(z)2zr1(z)r12(z))g0(z)=r1(z)+r1(z)2zr1(z)r1(z)zr12(z)r1(z)zr1(z)r12(z)z(22zr1(z)(1+z)r12(z)+(1z)r12(z)2zr1(z)r12(z))

进一步原则上可以解得 F(z,x),G(z,x) 的表达式,但其实在过于繁琐,不再列出。我们可以用这结果做些事情,例如计算接收 n 件物品后平均浪费的空间。答案的生成函数即

k0k4fk(z)+k0(k4+12)gk(z)+34h(z)=14[x(F(z,x)+G(z,x))]|x=1+G(z,1)2+34

符号计算可以生成与其等价的表达式。尽管并不好看,但我们还是可以得到在其主导奇点(dominant singularity)z=13 周围的展开:

312(13z)3/2+(324+18)(13z)1+

从中我们可以用生成函数的奇点分析得到平均浪费的空间

Wn=163nπ+3+324+O(n1/2)

如有需要也可以展开更多项。(在 z=13 处也有一个奇点,但其只会贡献阶 n1/2 的项)

3. 卫生纸问题

一个 Knuth 引入的流行主题。考虑两卷卫生纸,分别有 m,n 张,以及随机的使用者们。每个使用者有 p 的概率在更大的卷里撕下一张使用,有 q=1p 的概率使用更小的卷。我们关注的是当小卷卫生纸用完时,大卷卫生纸还剩下的(平均)张数。令 m 是大卷卫生纸的张数,n 是小卷的。那么令 Mm,n 为期望剩下的张数,递归如下:

Mm,0=mMm,m=Mm,m1,m1Mm,n=pMm1,n+qMm,n1,m>n>0

上面的二维状态转移都有一个性质:我们可以将各个状态分割成不同的层,转移是在层间进行的,我们可以对层建立生成函数。在这里,我们可以斜着分层,这启发我们首先定义

f0(z)=m0Mm,mzm,f1(z)=m1Mm,m1zm

显然 f0=f1。进一步的,定义

F(z,x)=mn0Mm,nzmxmn

那么

F(z,x)=m>n>0Mm,nzmxmn+m0Mm,0zmxm+m0Mm,mzm=m>n>0[pMm1,n+qMm,n1]zmxmn+zx(1zx)2+f0(z)=pzx[F(z,x)m0Mm,0zmxm]+qx[F(z,x)xf1(z)f0(z)]+zx(1zx)2+f0(z)=(pzx+qx)F(z,x)+zx(1pzx)(1zx)2+(1qqx)f0(z)

自然得到

F(z,x)=(qpx)f0(z)zx2(1pzx)(1zx)2pzx2x+q

同样地,令分母为 pz(xr1(z))(xr2(z)),其中

r1,2(z)=114pqz2pz

那么同样地,xr1(z) 必为分子的因式,得到

(qpr1(z))f0(z)zr12(z)(1pzr1(z))(1zr1(z))2=0

解得

f0(z)=z(qC(pqz))q(1z)2,where C(z)=114z2

注意 r1(z)=C(pqz)/pz,1/r2(z)=C(pqz)/q。这个例子的渐进分析没看懂,不看了。

?. 总结

虽然原文还有一半,以及五个例子,但我想就此打住,因为上面的例子已经很好地描述了这个方法。

对二元生成函数的处理大致是这样的:通过组合结构推导出一个分式结构,其中分母完全已知,且分子中包含目前无法求得的部分;将分母因式分解,逐个检查因式;由于所求得的函数在 (0,0) 周围可以展开为幂级数,这个点不能是奇点,若分母的一个因式在 (0,0) 处收敛到 0,则其也应当是分子的因式,从而解出分子中无法求得的部分。

好像有点感性,但原论文也没有讲分析相关的原因,或者推广。原论文里所有的例子都是分母关于 x 的度小于等于 2 的情况,那么直接求根公式套上去解决。至于更复杂的情况……留待后续的博客说吧。

posted @   joke3579  阅读(92)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2023-02-02 闲话 23.2.2
点击右上角即可分享
微信分享提示