Part 1 简介
Snake Oil 方法是一种用于推导组合恒等式的方法,该方法的大体思路为:
- 对于某个组合求和式,设其参数为 n,结果为 an;
- 写出 an 的 OGF f(x);
- 根据组合求和式展开 f(x),交换求和顺序,根据已有结论推导;
- 求出 f(x) 较简单形式后展开成序列;
需要注意的是,一般使用 Snake Oil 方法推导的组合恒等式中求和都是没有上下界的,并且默认当 n<0 或 m<0 或 n<m 时 (mn)=0。
Part 2 经典结论
2.1 公理
2.1.1 行求和
k∑(r+kn)xk=x−r(x+1)n
2.1.2 列求和
k∑(nr+k)xk=(1−x)n+1xn−r
证明
(1−x)n+1xn−r=xn−r(1−x)−(n+1)=xn−rk∑(k−(n+1))(−x)k=xn−rk∑k!i=1∏k−(n+i)(−x)k=xn−rk∑k!i=1∏k(n+i)xk=xn−rk∑(kn+k)xk=xn−rk∑(nn+k)xk=x−rk∑(nn+k)xn+k=x−rk∑(nk)xk=k∑(nr+k)xk
2.1.3 卡特兰
k∑(k2k)xk=1−4x1(2.1.3.1)
k∑k+11(k2k)xk=2x1−1−4x(2.1.3.2)
证明
第二条就是卡特兰,证第一条。
k∑(k2k)xk=k∑k!k!(2k)!xk=k∑2kk!(2k−1)!!xk=k∑2kk!(2k−1)!!4kxk=k∑k!(−21)×(−23)×⋯×(−22k−1)(−4)kxk=k∑(k−21)(−4)kxk=1−4x1
Part 3 经典样例
3.1 例 1:左斜求和
an=k∑(n−kk)(n≥0)
f(x)=n∑k∑(n−kk)xn=k∑n∑(n−kk)xn=k∑xkn∑(nk)xn=k∑xk(x+1)k=k∑(x2+x)k=1−x−x21
不难发现这其实是斐波那契的封闭形式,故 k∑(n−kk)=fibn。
3.2 例 2
an,m=k∑(m+2kn+k)(k2k)k+1(−1)k(n,m≥0)
把 m 看作常数,则:
f(x)=n∑xnk∑(m+2kn+k)(k2k)k+1(−1)k=k∑(−1)kk+1(k2k)n∑xn(m+2kn+k)=k∑(−1)kk+1(k2k)x−kn∑xn+k(m+2kn+k)=k∑(−1)kk+1(k2k)x−k(1−x)m+2k+1xm+2k套用 2.1.2=k∑(−1)kk+1(k2k)(1−x)m+2k+1xm+k=(1−x)m+1xmk∑(−1)kk+1(k2k)(1−x)2kxk=(1−x)m+1xmk∑k+1(k2k)((1−x)2−x)k=(1−x)m+1xm(1−x)2−2x1−1−(1−x)2−4x套用 2.1.3.2=2x(1−x)m+1xm(1−x)2(1+(1−x)24x−1)=2(1−x)m−1xm−1((1−x)2(1−x)2+4x−1)=2(1−x)m−1xm−1(1−x1+x−1)=2(1−x)m−1xm−11−x2x=(1−x)mxm
展开:
(1−x)mxm=xmn∑(m−1n+m−1)xn=n∑(m−1n−1)xn
所以:
an,m=(m−1n−1)
3.3 例 3
an=k∑(−1)k(kn−k)yn−2k(n≥0)
f(x)=n∑xnk∑(−1)k(kn−k)yn−2k=k∑(−1)kn∑xn(kn−k)yn−2k=k∑y2k(−1)kn∑(kn−k)(xy)n=k∑y2k(−1)k(1−xy)k+1(xy)2k=k∑(1−xy)k+1(−1)kx2k=k∑1−xy1(1−xy−x2)k=1−xy1k∑(1−xy−x2)k
注意到 k 是大于等于 0 的,所以:
f(x)=1−xy11−1−xy−x21=1−xy11−xy+x21−xy=1−xy+x21
使用待定系数法,设:
1−xy+x21=(1−ax)(1−bx)1=(a−b)(1−ax)a−(a−b)(1−bx)b
那么有:
{a+b=yab=1
解得:
⎩⎨⎧a=2y+y2−4b=2y−y2−4
那么有:
an=y2−41⎝⎛(2y+y2−4)n+1−(2y−y2−4)n+1⎠⎞
3.4 例 4
an=k∑(2kn+k)2n−k(n≥0)
推导过程
f(x)=n∑k∑(2kn+k)2n−kxn=k∑2k1n∑(2kn+k)(2x)n=k∑2k1(1−2x)2k+1(2x)k套用2.1.2=k∑(1−2x)2k+1xk=1−2x1k∑(1−2x)2kxk=1−2x1k∑(1−2x)2kxk=1−2x11−(1−2x)2x1=1−2x−1−2xx1=1−5x+4x21−2x=(1−4x)(1−x)1−2x=3(1−4x)2+3(1−x)1
所以有:
an=324n+31=322n+1+1
3.5 例 5
an=k∑(kn)(k2k)yk(n≥0)
f(x)=n∑k∑(kn)(k2k)ykxn=k∑(k2k)ykn∑(kn)xn=k∑(k2k)yk(1−x)k+1xk套用 2.1.2=1−x1k∑(k2k)(1−xxy)k=1−x11−1−x4xy1套用 2.1.3.1=1−x11−x−4xy1−x=(1−x)(1−x−4xy)1=1−x−4xy−x+x2+4x2y1=1−(4y+2)x+(4y+1)x21
这个式子有一个有趣的拓展:
带入 y=−21 得:
k∑(kn)(k2k)(−21)k=[xn]1−x21=[xn]k∑(k2k)(2x)2k(n≥0)
那么:
k∑(kn)(k2k)(−21)k={(2nn)0n mod 2=0n mod 2=1(n≥0)
3.6 例 6:下降幂和
an,m=i=m∑nim(n≥m≥0)
Fm(x)=n=m∑∞i=m∑n(i−m)!i!xn=i=m∑∞(i−m)!i!n=i∑∞xn=i=m∑∞(i−m)!i!1−xxi=(i=m∑∞(i−m)!i!xi)1−x1=m!(i=m∑∞(i−m)!m!i!xi)1−x1=m!(i=m∑∞(mi)xi)1−x1=m!(1−x)m+1xm1−x1=m!(1−x)m+2xm
所以:
an,m=(m+1)(n−m)!(n+1)!