常系数齐次线性递推
简介
常系数齐次线性递推数列(又称为 C-finite 或 C-recursive 数列)是常见的一类基础的递推数列。
对于数列 (𝑎𝑗)𝑗≥0
和其递推式
𝑎𝑛=𝑑∑𝑗=1𝑐𝑗𝑎𝑛−𝑗,(𝑛≥𝑑)
其中 𝑐𝑗
不全为零,我们的目标是在给出初值 𝑎0,…,𝑎𝑑−1
和递推式中的 𝑐1,…,𝑐𝑑
后求出 𝑎𝑘
。如果 𝑘 ≫𝑑
,我们想要更快速的算法。
这里 (𝑎𝑗)𝑗≥0
被称为 𝑑
阶的常系数齐次线性递推数列。
Fiduccia 算法
Fiduccia 算法使用多项式取模和快速幂来计算 𝑎𝑘
,时间为 𝑂(𝖬(𝑑)log𝑘)
,其中 𝑂(𝖬(𝑑))
表示两个次数为 𝑂(𝑑)
的多项式相乘的时间。
算法:构造多项式 Γ(𝑥) :=𝑥𝑑 −∑𝑑−1𝑗=0𝑐𝑑−𝑗𝑥𝑗
和 𝐴(𝑥) :=∑𝑑−1𝑗=0𝑎𝑗𝑥𝑗
,那么
𝑎𝑘=⟨𝑥𝑘modΓ(𝑥),𝐴(𝑥)⟩
其中定义 ⟨(∑𝑛−1𝑗=0𝑓𝑗𝑥𝑗),(∑𝑛−1𝑗=0𝑔𝑗𝑥𝑗)⟩ :=∑𝑛−1𝑗=0𝑓𝑗𝑔𝑗
为内积。
证明:我们定义 Γ(𝑥)
的友矩阵为
𝐶Γ:=⎡⎢
⎢
⎢
⎢⎣𝑐𝑑1𝑐𝑑−1⋱⋮1𝑐1⎤⎥
⎥
⎥
⎥⎦
我们定义多项式 𝑏(𝑥) :=∑𝑑−1𝑗=0𝑏𝑗𝑥𝑗
和
𝐵𝑏:=[𝑏0𝑏1⋯𝑏𝑑−1]⊺
观察到
⎡⎢
⎢
⎢
⎢⎣𝑐𝑑1𝑐𝑑−1⋱⋮1𝑐1⎤⎥
⎥
⎥
⎥⎦⏟___⏟___⏟𝐶Γ⎡⎢
⎢
⎢
⎢⎣𝑏0𝑏1⋮𝑏𝑑−1⎤⎥
⎥
⎥
⎥⎦⏟𝐵𝑏=⎡⎢
⎢
⎢
⎢⎣𝑐𝑑𝑏𝑑−1𝑏0+𝑐𝑑−1𝑏𝑑−1⋮𝑏𝑑−2+𝑐1𝑏𝑑−1⎤⎥
⎥
⎥
⎥⎦⏟___⏟___⏟𝐵𝑥𝑏modΓ
且
𝐶Γ=[𝐵𝑥modΓ𝐵𝑥2modΓ⋯𝐵𝑥𝑑modΓ],(𝐶Γ)2=[𝐵𝑥2modΓ𝐵𝑥3modΓ⋯𝐵𝑥𝑑+1modΓ],⋯(𝐶Γ)𝑘=[𝐵𝑥𝑘modΓ𝐵𝑥𝑘+1modΓ⋯𝐵𝑥𝑘+𝑑modΓ]
我们将这个递推用矩阵表示有
⎡⎢
⎢
⎢
⎢⎣𝑎𝑘𝑎𝑘+1⋮𝑎𝑘+𝑑−1⎤⎥
⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢⎣1⋱1𝑐𝑑𝑐𝑑−1⋯𝑐1⎤⎥
⎥
⎥
⎥⎦𝑘⏟____⏟____⏟((𝐶Γ)⊺)𝑘=((𝐶Γ)𝑘)⊺⎡⎢
⎢
⎢
⎢⎣𝑎0𝑎1⋮𝑎𝑑−1⎤⎥
⎥
⎥
⎥⎦
可知 ((𝐶Γ)𝑘)⊺
的第一行为 𝐵𝑥𝑘modΓ
,根据矩阵乘法的定义得证。
表示为有理函数
对于上述数列 (𝑎𝑗)𝑗≥0
一定存在有理函数
𝑃(𝑥)𝑄(𝑥)=∑𝑗≥0𝑎𝑗𝑥𝑗
且 𝑄(𝑥) =𝑥𝑑Γ(𝑥−1)
,$\deg{P}
本页面最近更新:2024/10/30 21:50:12,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Tiphereth-A, Enter-tainer, hly1204, QAQAutoMaton, Marcythm, 97littleleaf11, ksyx, shuzhouliu, abc1763613206, c-forrest, CCXXXI, Early0v0, EndlessCheng, fps5283, Great-designer, H-J-Granger, hsfzLZH1, huayucaiji, Ir1d, kenlig, ouuan, ouuan, SamZhangQingChuan, sshwy, StudyingFather, test12345-pupil, thredreams, TrisolarisHD, untitledunrevised, Xeonacid
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用