最短线性递推式 BM算法 Berlekamp-Massey

本文介绍了一种寻找数列最短线性递推式的算法,通过不断修正递推公式来逼近正确答案,适用于数列分析和预测。示例展示了算法的逐步应用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已知数列{a0,a1,⋯ ,an−1}\{a_0,a_1,\cdots,a_{n-1}\}{a0,a1,,an1},求其最短线性递推式。即求数列{r0,r1,⋯ ,rm−1}\{r_0,r_1,\cdots,r_{m-1}\}{r0,r1,,rm1}满足∀i∈[m,n),ai=∑j=1mrj−1ai−j\forall i\in[m,n),a_i=\sum_{j=1}^mr_{j-1}a_{i-j}i[m,n),ai=j=1mrj1aij

考虑不停地修改答案递推式。设RpR_pRp表示得到的第ppp个递推式,最开始的递推式为空,即R0={}R_0=\{\}R0={}。记did_idi为由当前递推式算出的aia_iaiaia_iai的差。如果di=0d_i=0di=0那么说明递推式到iii都是对的,否则记fpf_pfp表示RpR_pRp的错误位置。考虑如何修改当前的RRR。设新的递推式为Rp+1R_{p+1}Rp+1,事实上,我们把RpR_pRp加上R′R'R即可,其中R′R'Ri−fp−1−1i-f_{p-1}-1ifp11000拼上MMM拼上Rp−1R_{p-1}Rp1−M-MM倍,其中M=didfp−1M=\frac{d_i}{d_{f_{p-1}}}M=dfp1di。每次最多修改nnn项,最多修改nnn次,复杂度为O(n2)O(n^2)O(n2)

举例说明:

先填上开头。

a12471424
dN/A-1
R{}{0}

计算d1=0×a0−a1=−2d_1=0\times a_0-a_1=-2d1=0×a0a1=2,不符合。计算R′R'R000000(现在的位置-上次不符合位置+1)拼上MMM拼上{}\{\}{}−M-MM倍,M=−2−1M=\frac{-2}{-1}M=12,算得{2}\{2\}{2}。于是R={0}+R′={2}R=\{0\}+R'=\{2\}R={0}+R={2}

a12471424
dN/A-1-2
R{}{0}{2}

计算d2=2×2−4=0d_2=2\times 2-4=0d2=2×24=0符合。

a12471424
dN/A-1-20
R{}{0}{2}

计算d3=1d_3=1d3=1不符合,R′R'R111000拼上MMM拼上{0}\{0\}{0}−M-MM倍,M=1−2M=\frac{1}{-2}M=21

a12471424
dN/A-1-201
R{}{0}{2}{2,-0.5,0}

注意这里的RRR只对777适用,因为它的长度有333

之后的请自行计算,不再展示过程。

a12471424
dN/A-1-201-20.5
R{}{0}{2}{2,-0.5,0}{0,3.5,0}{-0.25,4,-0.125,0}

4.26


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值