( 其他算法与技巧 )【 线性递推 Berlekamp-Massey算法 】
( 其他算法与技巧 )【 线性递推 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算法 】相关推荐
- dls的BM算法模板(线性递推问题,解决矩阵快速幂解决不了的问题)
模板:往里面扔数就可以了(据说>=8个?)%%%dls https://www.cnblogs.com/zzqsblog/p/6877339.html #include<bits/stdc ...
- BM算法(Berlekamp-Massey算法):解决线性递推问题
算法内容 Berlekamp-Massey算法,常简称为BM算法,是用来求解一个数列的最短线性递推式的算法. BM算法可以在O(N2)的时间内求解一个长度为N的数列的最短线性递推式. 算法模板 取模, ...
- [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0,a1,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r ...
- 贪心、递归、递推以及动态规划算法的分析与对比
PS: 头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...
- 组合数学——特征方程与线性递推方程
组合数学--特征方程与线性递推方程 大多数计数问题都可以表示成线性的递推关系,而特征方程是解决这些线性递推关系的有利工具. 一个度为 kkk 的 线性齐次常系数递推方程 指的是具有如下形式的方程: a ...
- matlab如何仿真递推型dft算法,递推dft算法
0.7 0.8 0.9 1 0.6 0.7 0.8 0.9 1 伯格(Burg)递推算法 L-D算法缺点: 在计算相关函数估计时,对N个观测数据以 外的数据作零的假设,故谱估计误差较...... 第3 ...
- 线性递推数列_学习笔记
前置知识:线代基础(越多越好 发现了一位老哥写的笔记,精炼得相当到位 (这是博客地址嗷) . 线性递推数列 基本性质 定理1.1. 对于无限数列 { a 0 , a 1 , a 2 . . . } \ ...
- 最短线性递推式求解与有理函数重建
这一算法来自于我们对"线性递推式拟合"的视角转换,其后得到的算法是自然的. 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1/q1,p2 ...
- 【学习笔记】线性递推数列
1.11.11.1 定义:对于无限数列{a0,a1,a2,...}\{a_0,a_1,a_2,...\}{a0,a1,a2,...}和有限非空数列{r0,r1,r2,...,rm−1}\{r_0 ...
最新文章
- maven基础概念学习1
- 《ASCE1885的源码分析》の跨平台互斥对象Mutex封装类
- Genymotion模拟器的安装及常见问题解决方法
- Git的commit之后的撤销revert
- 二叉索引树 -- 区间信息的维护与查询
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...
- 为Ubuntu安装build-essential软件包
- python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
- Java 8 的这个新特性,用起来真的很爽!
- 620安装linux_Linux运维基础 Linux的quot;桑巴quot;
- linux安装 wegt_linux 下安装wget
- go代码--数据结构
- 使用Excel导出.xml文件
- 三读《UNIX编程艺术》——UNIX哲学
- Unity世界坐标转换屏幕坐标(概览)
- 分享快速检测肖特基二极管的小窍门
- 基于AKA的IMS接入认证机制
- 性格内向不善言辞的求职者在面试中如何展现优势?
- 【每周一读】——你的孤独,虽败犹荣
- Android中免root的hook框架学习——whale(二)实战hook java方法