2024.9.8 闲话

前言:以前就想写一下 kernel method 的介绍,刚才 joke3579 又催了一下,那么就简单写了一份说明 .

upd. joke3579:the Kernel Method: a collection of examples 读后感 .

核方法 (kernel method) 可以用来解决一类空间上的随机游走问题,可能有一些位置有几条直线作为边界不能越过,这个中文名字是我瞎翻译的 .

省流

一般形式说明起来也不太容易讲清楚,这个省流比较混乱最好还是不看,直接看后面的例子基本上也能看明白了 .

大概操作就是考虑多元生成函数 F(x1m;t) 分别计量走到的位置 (x1,x2,,xm) 和走的步数 t,那么可以大概得出一个这种类型的方程:

F(x1m;t)=1+tDD(x1m)(F(x1m;t)F(x1m;t))

这里 D 枚举格路上的一步,x 用来限制不能走出边界 .

此时令核函数 K(x1m)=xi(1t(DD(x1m))) 然后可以把方程简化为:

K(x1m,t)F(x1m;t)=G(x1m)+tDF(x1m;t)

这里 x 可能有一些部分不一样,G 是一个固定多项式 .

然后解方程的话基本是考虑依次解出每个 F(x1m;t),可以分别构造一个别的项都没有贡献的 x1m 代入 .

然而这个省流基本上也不太可读,举一些例子方便理解一下:

Catalan 数

(0,0) 出发,每次走一步 (1,1)(1,1),不能走到 x 轴下方,问走到 (n,m) 的方案数 .

令答案是 f(n,m),考虑二元生成函数:

F(x;t)=n,mf(n,m)tnxm

那么可以根据定义导出一个简单的方程:

F(x;t)=1+t(xF(x;t)+x1(F(x;t)F(0;t)))

此处令 K(x)=x(1t(x+x1)),这是这个游走问题的核 (kernel),则方程可以简化为:

K(x)F(x;t)=xtF(0;t)

这个方程还不能直接解出,此时考察函数 X 使得 K(X(x))=0,可以解出:

X(x)=1±14t22t

由于某些原因此处需要 limx0X(x)=0,于是这里 ± 取负号 . 在方程中代入 x=X(x) 等号左边就是 0 了,从而即可解出 F(0;t),进而可以解出 F(x;t) . 后面都是一些简单的操作,不展开叙述 .

值得注意的是,EI 利用游走的对称性给出了一个解方程的其他方法:「营业日志 2021.2.5」反射容斥的代数推导 .

然后可以看一下二元的情况怎么解方程:

云斗括号序列题 组合刻画部分

一个仅含 ( ) ? 的字符串是好的当且仅当可以把每个 ? 替换为 () 使得最终形成一个匹配的括号串 .

计算长为 2nk? 的好串个数 .

让我们跳过一些组合推导,快进到解方程环节:

K(x,y)D(x,y,s,t)=xy+t(x21)(sy2+1)D(0,y,t)tx2D(0,0,t)

其中核函数 K(x,y)=xy(1t(x1y1+xy+sxy1)) .

这里先考虑去掉 D(0,0,s,t),考虑函数 Y 满足 K(1,Y(t))=0,那么代入 x=1,y=Y(t) 就可以了 .

然后就变成一元情况了,可以使用上一个问题的操作方法 .

最后的结果可以看 2024.7.28 闲话,还是挺复杂的 .

另一个二元形式的例子:The 3rd UCup Stage 1: St. Petersburg. L. Candies,这里二元指的是只有两个方向有限制 . Alpha1022 的题解基本上也是使用的 kernel method,不过解方程部分用的是类似 EI 反射容斥代数推导的方法 .

参考资料:THE KERNEL METHOD: A COLLECTION OF EXAMPLES, Helmut Prodinger .

meme

结果机房的 IP 还是没解封。。敲打一下(

posted @   yspm  阅读(174)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示