有关 BM 算法求得的递推式的阶数最小性
查看原帖
有关 BM 算法求得的递推式的阶数最小性
145355
wsyhb楼主2022/7/14 13:46

Berlekamp-Massey 算法 - OI WikiGG 的构造方案是:

G={0,0,,0,ΔiΔk,ΔiΔkFk1}G=\{0,0,\cdots,0,\frac{\Delta_i}{\Delta_k},-\frac{\Delta_i}{\Delta_k}F_{k-1}\}

(OI Wiki 里实际写的是 FkF_k,但仔细思考一下就会发现它想表达的其实是 Fk1F_{k-1}

但这样其实是有问题的——问题在于 Fk1F_{k-1} 末尾的 00 可能并不需要补在后面。

注意是【可能】,也就是说有时候必须得补(以使得有足够多个初值),有时候不需要补(对应的那一个值不作为初值也满足递推关系)——如果一刀切地把 Fk1F_{k-1} 末尾的 00 忽略,也是错的。

不过本题数据似乎并没有考虑到这一点——不论你处不处理,以及如何处理,都能 AC。

一种正确的做法是,在算法结束时暴力判断末尾的 00 是否可以删除,若是则删,直至删不动为止。

还有另一种正确的做法:即像 @皎月半洒花 的题解代码一样,将递推系数 FF 的历史版本存储下来,然后选择最优的一个进行转移(仅用以计算长度)。

这里有一些能卡掉上述错误的数据,放在 U228146 【模板】Berlekamp–Massey 算法(数据加强版)中,供大家测试。(可以通过该题目的【附件下载】一栏下载数据)

经测试,题解区中的代码的情况如下:

  • @Karry5307 的代码可以通过。(提交记录
  • @皎月半洒花 的代码求出的最短递归式是正确的。(由于并没有给出完整代码,所以未验证其代码求解 PmP_m 的正确性)(提交记录
  • @sunnuozhou 的代码有两个点的 PmP_m 求错了。(提交记录
  • @Alpha1022 的代码有三个点的最短递推式求错了。(提交记录

如果该题数据有误还烦请告知。

另外,作为一个蒟蒻,我并不知道如何证明上述提到的“正确”做法求出的就是最短递推式,有神仙能证明一下吗?/kel

2022/7/14 13:46
加载中...