OI 超几何函数与Gosper算法入门
前言
据说这个东西是 19~20 初世纪数学研究的重大成果与主要研究方向。但是很可惜,由于世界形势的变化,以德国为中心的的超几何函数、椭圆函数研究开始没落于集中于美国、苏联的数学研究飞向。
第一章
定义超几何函数
\]
其中 \(b_i\) 不为非正的整数。
举出若干简单例子:
\]
\]
定义高斯超几何函数:
\]
一般的形式多少有点吓人。现在我们考察如何把一个函数/和式变成超几何形式:
考虑
\]
\]
同时 \(t_0=1\)。不为一的话在展开式外面乘上应该的 \(t_0\) 即可。
来试试手:
\]
使 \(k\) 最小值为 \(0\),令 \(k=n-k\)。
\]
\]
\]
根据范德蒙德卷积,有:
\]
改写为超几何形式有:
\]
这时,我们发现可以改写 \(r,s,n\)。
于是可以得到高斯超几何函数的 \(z=1\) 的通用形式:
\]
这里 \(b\) 为非正的整数,或者 \(c>a+b\)(事实上是他们的实部),否则原级数不收敛。
而假设 \(b=-n\),有一个看起来更好的形式:
\]
事实上,这个东西能秒掉一些组合数题。
这里还有一个库莫尔公式:
\]
在特殊情况有:
\]
还有一个可以由之前某道组合例题推广的Saalschütz公式:
\]
在上述过程中,注意到我们不知道什么是负数的阶乘。所以有必要插入一段关于阶乘的探讨(关于 \(\Gamma\) 函数的更多东西可以移步 欧拉积分)。
对于阶乘函数,有两种本质等价的定义方法:
\]
\]
事实上,对于第二种,可以利用 \(z!=z(z-1)!\) 延拓其定义域。
有余元公式:
\]
不难发现,\(z!\) 为 \(0\) 当且仅当 \(z\) 为负整数。
第二章
反射定律:
\]
微分方法:(这里非正式的把算子运算写作乘号)
定义 \(D\) 算子为 \(\dfrac{d}{dz}\),\(\vartheta\) 算子(vartheta)为 \(z\dfrac{d}{dz}=zD\)。
考察这几种算子的作用:
\]
\]
\]
那么 \(\vartheta\) 也就很显然了。
\]
但如果我们用 \(a_i\) 去加上 \(\vartheta\),就会得到更好的结果(此处认为 \(a_i\) 算子的作用是 \(a_iF=a_i\times F\))。
\]
同样不难发现
\]
把他们都作用于每个上参数和下参数:
\]
\]
不难发现,上面一行是下面一行的导数。则有:
\]
\]
可以证明,满足某个特定这种微分方程的函数是唯一的,就是唯一的超几何函数。
同样可以证明,只有以下形式的微分方程对应 \(\max(n,m+1)=N\) 的超几何函数。其中 \(n\) 是上参数个数,\(m\) 是下参数个数。
\]
那么可以证明高斯恒等式:
\]
第三章
只用奇技淫巧是不足以称得上成就的。我们有一个 Gosper 算法,可以求出 \(\sum f(k)\delta k\),其中 \(f\) 是超几何项的一般函数类。
这里首先设 \(F(\dots;\dots;z)_k\) 为 \(z^k[z^k]F\)。对于超几何项求和:
\]
Gosper 算法给出 \(c\) 和 \(F'\) 的各项参数,或说明其不存在。这里 \('\) 不是求导。
若 \(\dfrac{t(k+1)}{t(k)}\) 是不恒为 \(0\) 的有理函数,我们就称 \(t(k)\) 为一个超几何项。
第一步:令
\]
看起来很没道理。但是他们需要满足这样的条件:
\(r(k)\) 和 \(q(k)\) 的任意根的差不是正整数。
考虑构造。先令 \(p(k)=1\)。然后按照超几何函数来拆开他们:
\]
如果违反了条件,则有 \(q(k)\) 整除 \((k+A)\),\(r(k)\) 整除 \((k+B)\),且 \(A-B=d>0\)。
则令 \(q(k)(k+A-1)^{\underline{d-1}} \to q(k)\)。
此时 \(\dfrac{q(k+1)}{q(k)}\) 变化了 \(\dfrac{k+A}{k+B+1}\),是正确的。
第二步:
求超几何项 \(\Delta T(k)=t(k)\)。
你知道吗?把大象塞进冰箱只需要三步
令 \(T(k)=\dfrac{r(k)s(k)t(k)}{p(k)}\)
此时,
\]
注意到
\]
则
\]
那么
\]
假设 \(T\) 是超几何项,那么显然 \(s\) 是多项式的商;可以依据前面的条件进一步证明,\(s\) 就是多项式。
下试证明这个结论。
不妨设 \(s(k)=\dfrac{f(k)}{g(k)}\),且 \(f,g\) 没有公共根。
若 \(g(k)\) 为常数,那么结论得证;否则,设 \((k+\beta)\) 是 \(g(k)\) 的一因式,使得 \(N\) 最大。
其中\(N\) 为最大的,使 \((k+\beta+N-1)\) 为 \(g(k)\) 因式的正整数。显然 \(N=1\) 时成立。
那么 \(g(-\beta)=g(1-N-\beta)=0\)。
将 \(p(k)=q(k)s(k+1)-r(k)s(k)\) 两边同时乘上 \(g(k)g(k+1)\),得到:
\]
令 \(k=-\beta\),得到 \(r(-\beta)g(1-\beta)f(-\beta)=0\)。
注意到 \(f(-\beta)\neq g(-\beta)=0\),且 \(g(1-\beta)\neq 0\),因为如果其为零 \(N\) 不满足最大性质。
故 \(r(-\beta)=0\)。
令 \(k=-\beta-N\),得到 \(q(-\beta-N)f(1-\beta-N)g(-\beta-N)=0\)。
同样的,可知 \(q(-\beta-N)=0\)。注意到 \(-\beta-(-\beta-N)=N\),为正整数。
则 \(r(k)\) 和 \(q(k)\) 存在差为 \(N\) 的根。不符合前设。
那么可以写出 \(s\) 的表达式:
\]
那么如何确定 \(d\) 呢?
改写 \(p(k)=q(k)s(k+1)-r(k)s(k)\) 为:
\]
设 \(Q(k)=q(k)-r(k),R(k)=q(k)+r(k)\)。
容易发现,若 \(\deg Q\ge \deg R\),则 \(\deg s=\deg p-\deg Q\)。
如果 \(\deg Q<\deg R=d'\),则 \(\deg Q=d'-1\)。
设 \([k^{d'}]R(k)=A,[k^{d'-1}]Q(k)=B,[k^d]s(k)=C\)。
则有 \([k^{d+d'-1}]\)右式\(=(BdC+2AC)\)。
如果 \(Bd+2A\neq 0\),那么 \(\deg s=\deg p-\deg Q\)。
否则,\(d=\dfrac{-2A}{B}\)。这两种可能都是合法的,但是第一种情况满足就不需要考虑第二种。
那么只需要带入 \(p(k)=q(k)s(k+1)-r(k)s(k)\) 若干个值,得到一个线性方程组,然后求出结果。
下面证明
\]
(其中 \(n\) 是非负整数)不存在封闭形式。
\]
那么 \(\dfrac{t(k+1)}{t(k)}=\dfrac{n-k}{k+1}\)
设 \(p(k)=1,q(k)=n-k,r(k)=k\)。
于是
\]
有 \(Q(k)=n-2k,R(k)=n\)。
于是 \(\deg s=\deg p-\deg Q=-1\)。
显然,\(\deg\) 的值域为 \(\mathcal{N}\),所以不能求出其封闭形式。
唯一略显遗憾的是,绝大部分题目的最后结果并不是一个封闭形式,所以在 OI 中应用并不广泛根本没用
OI 超几何函数与Gosper算法入门的更多相关文章
- 【转】 SVM算法入门
课程文本分类project SVM算法入门 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Supp ...
- 三角函数计算,Cordic 算法入门
[-] 三角函数计算Cordic 算法入门 从二分查找法说起 减少乘法运算 消除乘法运算 三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来 ...
- 循环冗余校验(CRC)算法入门引导
目录 写给嵌入式程序员的循环冗余校验CRC算法入门引导 前言 从奇偶校验说起 累加和校验 初识 CRC 算法 CRC算法的编程实现 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌 ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- (转)三角函数计算,Cordic 算法入门
由于最近要使用atan2函数,但是时间上消耗比较多,因而网上搜了一下简化的算法. 原帖地址:http://blog.csdn.net/liyuanbhu/article/details/8458769 ...
- 【转】循环冗余校验(CRC)算法入门引导
原文地址:循环冗余校验(CRC)算法入门引导 参考地址:https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks#Re ...
- LDA算法入门
http://blog.csdn.net/warmyellow/article/details/5454943 LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discrimin ...
- 贝叶斯公式由浅入深大讲解—AI基础算法入门
1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...
- 贝叶斯公式由浅入深大讲解—AI基础算法入门【转】
本文转载自:https://www.cnblogs.com/zhoulujun/p/8893393.html 1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生, ...
- 模式识别之Earley算法入门详讲
引言:刚学习模式识别时,读Earley算法有些晦涩,可能是自己太笨.看了网上各种资料,还是似懂非懂,后来明白了,是网上的前辈们境界太高,写的最基本的东西还是非常抽象,我都领悟不了,所以决定写个白痴版的 ...
随机推荐
- Graylog之基本使用
文档:https://docs.graylog.org/en/3.0/ Graylog Sidecar是一个轻量级配置管理系统,适用于不同的日志收集器,也称为后端.Graylog节点充当包含日志收集器 ...
- Javascript 常用封装(二)
1.字符串占位宽度 计算占位宽度:字符串的占位宽度除了涉及到具体的字符串内容,还与字体大小有关,可以将其放入Dom中来获取实际占位宽度 //计算字符串的占位宽度 function getTextWid ...
- ehcarts 实战小计-1
需求 展示未来未来36个月(等分为3个时间范围)的经济效益趋势,3个等分时间区域在趋势图上方常显,不同时间区域之间通过灰色虚线间隔开: 鼠标hover趋势图每个1/3区域,对应区域会有以下3个效果: ...
- github访问不了解决方法
github突然无法访问,解决办法如下-迷恋自留地 首先通过网址https://tool.chinaz.com/dns?type=a&host=github.com 修改hosts文件,win ...
- 鸿蒙应用开发从入门到入行 - 篇7:http网络请求
鸿蒙应用开发从入门到入行 第七篇 - http网络请求 导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用.ArkUI里的基础组件,并通过制作一个简单界面掌握使用 HarmonyOS - ...
- 给我2分钟,保证教会你在Vue3中实现一个定高的虚拟列表
前言 虚拟列表对于大部分一线开发同学来说是一点都不陌生的东西了,有的同学是直接使用第三方组件.但是面试时如果你简历上面写了虚拟列表,却给面试官说是通过三方组件实现的,此时空气可能都凝固了.所以这篇文章 ...
- Ubuntu sudo nopasswd方法
1 运行 visudo 2 假设用户名为yourname, 则在最后一行添加: # User privilege specificationroot ALL=(ALL:ALL) ALL# Member ...
- java - 正则表达式替换Spring @RequestMapping URL中的@PathVariable值
我在接口(只是为了保存常量)中有Spring MVC URL的定义,例如: String URL_X = "/my-url/{id:[0-9]*}"; String URL_Y = ...
- macOS:无法打开“XXXX”,因为Apple无法检查其是否包含恶意软件。的解决办法
今天在安装node.js的时候出现了如下错误 从网上找到两种解决方案: 第一种(不建议)在终端输入以下命令即可 sudo spctl --master-disable1按回车键,随后提醒你输入电脑密码 ...
- Qt编写的项目作品15-皮肤生成器+UIDemo
一.功能特点 自带17套精美皮肤样式,其中包括黑色.灰色.扁平等. 皮肤生成器只需要简单几步就可以生成一套自定义的皮肤. 自带了26种uidemo,非常漂亮美观,涵盖了主界面布局.菜单切换等各种效果, ...