( 其他算法与技巧 )【 线性递推  Berlekamp-Massey算法 】

原理请看:https://www.cnblogs.com/p-b-p-b/p/10844127.html

和 https://blog.csdn.net/qq_39972971/article/details/80725873

算法用处: 求解一个数列的最短线性递推式。一般可以用于猜结论/骗分。

比如:1 2 3 4 5 6 7 8 9 的最短递推式是 { 2,-1 } 即 f ( i )=  2 * f ( i-1 ) + (-1) * f ( i-2 )

数列{1,2,4,9,20,40,90}的递推式即为R5={2,-4,18,-18}。

数列{1,1,3,7,17}的递推式位{2,1}.   f ( i )=  2 * f ( i-1 ) +  f ( i-2 )

数列{1,2,3,4,5,1,2,3,4,5}的递推式位{0,0,0,0,1}.   f ( i )=  f( i-5 )

模板:

#include<bits/stdc++.h>using namespace std;const int maxn = 2005;
const double eps = 1e-8;
int fail[maxn],cnt;
double val[maxn], delta[maxn];
vector<double> ans[maxn];int main()
{int bst=0;int n;cin>>n;for ( int i=1; i<=n; i++ ) cin>>val[i];for ( int i=1; i<=n; i++ ) {double tmp = val[i];for ( int j=0; j<ans[cnt].size(); j++ ) {tmp -= ans[cnt][j] * val[ i-j-1 ];}if ( fabs(tmp)<=eps ) continue ;delta[cnt] = tmp;fail[cnt] = i;cnt++;if ( cnt==1 ) {ans[cnt].resize(i);continue ;}double mul = delta[cnt-1]/delta[ bst ];vector<double> now;now.resize( i-fail[bst]-1 );now.push_back(mul);for ( int j=0; j<ans[bst].size(); j++ ) {now.push_back( -ans[bst][j] * mul );}ans[cnt]=now;if ( ans[cnt-1].size()>now.size() ) {ans[cnt].resize( ans[cnt-1].size() );}for ( int j=0; j<ans[cnt-1].size(); j++ ) {ans[cnt][j] += ans[cnt-1][j];}if ( i-fail[bst]+ans[bst].size()>ans[cnt-1].size() ) bst=cnt-1;}for ( int i=0; i<ans[cnt].size(); i++ ) cout << ans[cnt][i] << " ";return 0;
}
/*
数列{1,2,4,9,20,40,90}的递推式即为R5={0,0,10,0}。
数列{1,1,3,7,17}的递推式位{2,1}.
*/

( 其他算法与技巧 )【 线性递推 Berlekamp-Massey算法 】相关推荐

  1. dls的BM算法模板(线性递推问题,解决矩阵快速幂解决不了的问题)

    模板:往里面扔数就可以了(据说>=8个?)%%%dls https://www.cnblogs.com/zzqsblog/p/6877339.html #include<bits/stdc ...

  2. BM算法(Berlekamp-Massey算法):解决线性递推问题

    算法内容 Berlekamp-Massey算法,常简称为BM算法,是用来求解一个数列的最短线性递推式的算法. BM算法可以在O(N2)的时间内求解一个长度为N的数列的最短线性递推式. 算法模板 取模, ...

  3. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程

    线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0​,a1​,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r ...

  4. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  5. 组合数学——特征方程与线性递推方程

    组合数学--特征方程与线性递推方程 大多数计数问题都可以表示成线性的递推关系,而特征方程是解决这些线性递推关系的有利工具. 一个度为 kkk 的 线性齐次常系数递推方程 指的是具有如下形式的方程: a ...

  6. matlab如何仿真递推型dft算法,递推dft算法

    0.7 0.8 0.9 1 0.6 0.7 0.8 0.9 1 伯格(Burg)递推算法 L-D算法缺点: 在计算相关函数估计时,对N个观测数据以 外的数据作零的假设,故谱估计误差较...... 第3 ...

  7. 线性递推数列_学习笔记

    前置知识:线代基础(越多越好 发现了一位老哥写的笔记,精炼得相当到位 (这是博客地址嗷) . 线性递推数列 基本性质 定理1.1. 对于无限数列 { a 0 , a 1 , a 2 . . . } \ ...

  8. 最短线性递推式求解与有理函数重建

    这一算法来自于我们对"线性递推式拟合"的视角转换,其后得到的算法是自然的. 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2 ...

  9. 【学习笔记】线性递推数列

    1.11.11.1 定义:对于无限数列{a0,a1,a2,...}\{a_0,a_1,a_2,...\}{a0​,a1​,a2​,...}和有限非空数列{r0,r1,r2,...,rm−1}\{r_0 ...

最新文章

  1. maven基础概念学习1
  2. 《ASCE1885的源码分析》の跨平台互斥对象Mutex封装类
  3. Genymotion模拟器的安装及常见问题解决方法
  4. Git的commit之后的撤销revert
  5. 二叉索引树 -- 区间信息的维护与查询
  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...
  7. 为Ubuntu安装build-essential软件包
  8. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
  9. Java 8 的这个新特性,用起来真的很爽!
  10. 620安装linux_Linux运维基础 Linux的quot;桑巴quot;
  11. linux安装 wegt_linux 下安装wget
  12. go代码--数据结构
  13. 使用Excel导出.xml文件
  14. 三读《UNIX编程艺术》——UNIX哲学
  15. Unity世界坐标转换屏幕坐标(概览)
  16. 分享快速检测肖特基二极管的小窍门
  17. 基于AKA的IMS接入认证机制
  18. 性格内向不善言辞的求职者在面试中如何展现优势?
  19. 【每周一读】——你的孤独,虽败犹荣
  20. Android中免root的hook框架学习——whale(二)实战hook java方法

热门文章

  1. 携程网宕机事故深度剖析
  2. 结界乱斗服务器维护中,结界乱斗变态版
  3. 数字信号处理翻转课堂笔记1
  4. 最新if,elseif,else最清楚用法解释
  5. 硬盘在电脑上读不出却有声音解决方法
  6. 汇编语言显示“*”符号图案(1)
  7. PaddleSeg 分割模型介绍
  8. 甘肃省职称计算机应用能力要求暂行规定,甘肃省职称评审规定
  9. 《Linux 黑客基础教程》翻译版发布
  10. 一个区块连小白的自传