UOJ Logo Hermione_Granger的博客

博客

Gosper 算法学习笔记

2022-10-25 14:04:46 By Hermione_Granger

算法简介

Gosper 算法是一个用来求一些超几何项的离散不定积分的封闭形式的算法。特别地,所求的是一些形如 tn=P(n)i=1s(ain+bi)!i=1t(cin+di)! 的函数的离散不定积分。

形式化地,我们想要求出以另一个超几何项 zn 满足 (1)zn+1zn=tn.

本文大部分翻译自 Marko Petkovšek, Herbert S. Wilf 和 Doron Zeilberger 合著的 A=B 一书的 Chapter 5: Gosper's Algorithm。

记号

本文中 的优先级均大于 +×,小于隐式乘法。

在本文中,degf 被定义为多项式 f 的最高项次数,lcf 被定义为多项式 f 的最高项系数,scf 被定义为非常多项式 f 的次高项系数。

本文用 来描述“互素”,譬如 fg 等价于 deggcd(f,g)=0

基本思路

首先我们不难发现 zntn=znzn+1zn=1zn+1zn1 是一个关于 n 的有理函数。于是我们设其为有理函数 y(n),将 zn=y(n)tn 代入 (1) 式得到 y(n+1)tn+1y(n)tn=tn,tn+1tn=r(n) 则有 (2)y(n+1)r(n)y(n)=1. 假设我们能够把 r(n) 写成 r(n)=a(n)c(n+1)b(n)c(n) 的形式(在后文我们会给出一个算法来将任意有理函数 r(n) 分解),满足 (3)hNa(n)b(n+h), 在后续的证明中,我们会发现我们将解有理函数的问题转为了解多项式的问题。

考虑将 y(n) 写成 y(n)=b(n1)x(n)c(n) 的形式,代入 (2) 式得 (4)a(n)x(n+1)b(n1)x(n)=c(n). 显然 x(n) 是有理函数。事实上我们能够证明,x(n) 实际上甚至是多项式:

假设结论是错的,那么我们就能将 x(n) 写成两个互素的多项式 f(n)g(n) 之比 f(n)g(n),其中 degg0。代入 (3)(5)a(n)f(n+1)g(n)b(n1)f(n)g(n+1)=c(n)g(n)g(n+1).N 为使 gcd(g(n),g(n+N)) 不为常多项式的最大整数 N,容易知道 N0。设 u(n)g(n)g(n+N) 的一个非常多项式的不可约公因式。将 u(nN)g(n) 代入 (4) 知: u(nN)b(n1)f(n)g(n+1). 因为 u(nN)g(n),故 u(nN)f(n)。若 u(nN)g(n+1),则 u(n)g(n+N+1),即 gcd(g(n+N+1),g(n)) 不为常多项式,这与我们对 N 的选取不符。因此 u(nN)b(n1),进而 u(n+1)b(n+N)

同样地,将 u(n+1)g(n+1) 代入 (4) 式得: u(n+1)a(n)f(n+1)g(n). 由于 u(n+1)f(n+1),以及 u(n+1)g(n)(因为 u(n) 不能同时整除 g(n1)g(n+N)),我们有 u(n+1)a(n)。于是 u(n+1)a(n)b(n+N) 的一个非常多项式公因子,这与假设 (3) 矛盾,因而 x(n) 是一个多项式。

现在我们确定了 Gosper 算法的基本流程:

  1. r(n)=tn+1tn 分解成 a(n)c(n+1)b(n)c(n) 的形式,同时满足 (3) 式的限制;
  2. 找到 (5) 式的解 x(n),或发现无解;
  3. 若有解,返回 zn=b(n1)x(n)c(n)tn

分解 r(n)

首先设 r(n)=f(n)g(n)(为了方便,令 fg 均为首一多项式,这样可能会在最后需要乘一个系数),其中 fg。如果 a=f,b=g 满足 (3) 的限制,那我们可以直接将 r(n) 分解成 a(n)=f(n)b(n)=g(n)c(n)=1 的形式。

否则,如果存在 hN 使得 f(n)g(n+h) 有公因式 u(n),则我们可以从 f(n) 中提取一个因式 u(n),从 g(n) 中提取一个因式 u(nh),从而递归下去。分解出来的因式直接让 c(n) 乘上 j=1hu(nj) 即可。

唯一问题是,如何判断 fg​ 是否满足 (3) 式?

一个做法是使用多项式结式(resultant)。

F 上两个关于 n 的多项式 A(n)B(n) 的结式 res(A,B) 由下式定义: res(A,B):=(lcB)degA(lcA)degB(μ,λ)F2A(λ)=0B(μ)=0(μλ). 其中域 F 是域 F 的代数闭包,即,所有以 F 中元素为系数的多项式的解都在 F¯ 内。

事实上,res(A,B) 的一个等价定义是: res(A,B)=(lcB)degAμFB(μ)=0A(μ). 根据以上两种定义不难得到结式的以下性质:

  • res(A,B)=(1)degAdegBres(B,A)
  • res(μA,λB)=μdegAλdegBres(A,B)
  • res(A,B)=(lcB)degA(lcA)degB,若 degAdegB=0
  • res(ACB,B)=res(A,B),若 lcB=1

于是我们可以得到一个 O(degAdegB) 的求解结式的 Euclid 算法:

  • degB=0,则 res(A,B)=(lcB)degA(lcA)degB
  • 否则,res(A,B)=(lcB)degAdeg(AmodB)(1)degBdeg(AmodB)res(B,AmodB)

事实上,还有一种被称为 Half-GCD 的算法可以在 O(n1+ε) 的时间复杂度内求出 AB 的结式,其中 n=max{A,B}[1]

不难发现,两个非常多项式 fg 有公共根当且仅当 res(f,g)=0。我们设 R(h)=res(f(n),g(n+h)),则所有违反 (3) 式的 h 即为 R(h) 的非负整数根。

如何在 N 上解 R(h)=0?首先我们仅保留和分母互素的分子 S(h),于是只需要解 S(h)=0,其中 S(h) 是多项式。如果 S 的系数在 Q 内,则我们可以通过先将其化为首一多项式,并枚举其常数项的因数来得到其所有的有理根。事实上,还有一种更加高效的、利用 p 进数的算法可以解决这个问题。[2]

更加通用地,设 K 为以 K 中元素为系数的关于 α 的有理函数所组成的元素。假设我们已经拥有一种处理 S 的系数在 AK 内的算法,那么我们可以以如下方式构建出 AK 所对应的算法:

首先做转换 R(h)=i=0saihi=1r(α)i=0spi(α)hi=1r(α)i=0shij=0tsμi,jαj=1r(α)j=0tαji=0sμi,jhi=1r(α)j=0tqj(h)αj, 其中 r,pi,qjK[x]。如果有 uK 满足 R(u)=0,那么就有 (6)j=0tqj(u)αj=0. 分类讨论:

  • 如果 αK 中是超越的,那么显然 qj(u)=0 对全部 [0,t] 内的整数 j 成立;
  • 如果存在一个系数在 K 内的多项式的根为 α,且 d 为多项式的最小次数。则 degpi<d。于是,t<d。于是使 (6) 式成立的唯一可能是 qj(u)=0 对全体 [0,t] 内整数 j 成立。

无论如何都有 qj(u)=0。于是我们可以对 qj 分别应用 AK

另一种做法是将 fg 化成若干个不可约多项式乘积(注意不必在整个代数闭包上完全分解),那么我们需要找到一个 f(n) 的不可约因式 u(n)g(n) 的一个不可约因式 v(n) 满足存在 hN 使得 u(n)=v(n+h),这样 f(n)g(n+h) 就有一个非常多项式公因式,即 h 违反 (3) 式。注意到一个因式对 (u,v) 满足条件的一个必要条件是 degu=degv=d。设 u(n)=nd+And1+O(nd2)v(n)=nd+Bnd1+O(nd2),那么通过比较次大项系数我们发现唯一可能满足条件的 h=ABd

在实践中,通常 fg 已经被分解成一次因式了,这可能是因为初始的超几何项即为二项式系数和阶乘的乘积。此时,两种做法是完全相同的。如果 fg 未被分解,则通常而言就算要使用结式,事先分解 fg 也通常能加速结式的计算。那为什么还需要使用结式做法呢?这是因为在任何域上我们都能计算多项式结式,但目前人们还尚未知道通用的因式分解方法。

不难验证,通过“基本思路”中过程得到的 r(n) 的分解 a(n)c(n+1)b(n)c(n) 是一个互素、唯一、次数最小的形式。

x(n)

在这节我们希望能解出满足 (4) 式的多项式 x(n)。假定我们能知道 degx(n) 的一个范围,我们就可以使用待定系数法列出一个线性方程组以解出 x(n)

degx(n)=d,我们希望知道 d 的可能值。可以分类讨论一下:

  • 如果 degadegblcalcb,即 ab 的最高项不同,那么 (4) 式左手边的系数为 d+max{dega,degb},右手边的系数为 degcd 的唯一可能值为 degcmax{dega,degb}

  • 否则,即 ab 的最高项相同。即 (4) 式左手边的最高项被消去了。继续分类:

    • 如果 (4) 式左手边的次高项未被消去,则 (4) 式左手边的系数为 d+max{dega,degb}+1,右手边的系数为 degcd 的唯一可能值为 degcmax{dega,degb}1

    • 否则,设 a(n)=λnk+Ank1+O(nk2),b(n1)=λnk+Bnk1+O(nk2),x(n)=C0nd+C1nd1+O(nd2). 代入 (4) 式得到: a(n)x(n+1)b(n1)x(n)=C0(λd+AB)nk+d1+O(nk+d2). 于是 d 的唯一可能值为 BAλ

    于是,此情况中 d 仅可能在 {degcmax{dega,degb}1,sc(b(n1))scalca} 中取值。

先得到 d 的可能取值范围,找到其中最大的自然数 dm。如果 dm 不存在则无法找到封闭形式,否则直接待定系数法。如果待定系数法无解则亦无法找到封闭形式。

小练习

通过 Gosper 算法求下述和式的封闭形式。 (a)n=0m(2nn)242n(n+1)(b)n=0m(4n1)(2nn)242n(2n1)2(c)n=0mn(n12)!(n+1)!(d)n=0mn(n+a+b)anbn(n+a)!(n+b)!(e)n=1m6n+34n4+8n3+8n2+4n+3(f)n=4m4(1n)(n22n1)n2(n+1)2(n2)2(n3)2(g)n=1m2n(n414n224n9)n2(n+1)2(n+2)2(n+3)2(h)n=0mn44n(2nn)

其中 (a),(b),(c),(d),(h) 摘自 [3](e) 摘自 [4](f),(g) 摘自 [5]

参考资料

  • Marko Petkovšek, Herbert S. Wilf and Doron Zeilberger, A=B, 83-100.

致谢

感谢 @Y_B_X 同学给予的许多指导和帮助。

Reference

[1]: E.I., HALF-GCD 算法的阐述.

[2]: Loos, R., Computing rational zeros of integral polynomials by p-adic expansion, SIAM J. Comp. 12 (1983), 286-293.

[3]: Gosper, R. W., Jr., Indefinite hypergeometric sums in MACSYMA, in: Proc. 1977 MACSYMA Users' Conference, Berkeley, 1977, 237-251.

[4]: Abramov, S. A., On the summation of rational functions, USSR Comp. Maths. Math. Phys. 11 (1971), 324-330.

[5]: Man, Y. K., On computing closed forms for indefinite summations, J. Symbolic Computation 16 (1993), 355-376.

评论

Might be useful after ten years or so?
催 std
评论回复
Hermione_Granger:?什么的 std
EntropyIncreaser:回复 @Hermione_Granger:不好意思,我以为你是在 loj 上传这个题的(
Hermione_Granger:回复 @EntropyIncreaser:哦,那个啊,在写了(

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。