Berlekamp-Massey algorithm
https://www.cnblogs.com/zzqsblog/p/6877339.html
https://blog.csdn.net/qq_39972971/article/details/80725873
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 3005;
const int MOD = 1E9 + 7;
inline int Add(int a, int b) {
return (a + b >= MOD) ? (a + b - MOD) : (a + b);
}
inline int Sub(int a, int b) {
return (a >= b) ? (a - b) : (a - b + MOD);
}
inline int Mul(int a, int b) {
return (LL)a * b % MOD;
}
inline int Pow(int a, int b) {
int c = 1;
for (; b; a = Mul(a, a), b >>= 1)
if (b & 1) c = Mul(c, a);
return c;
}
int n;
int a[N], b[N], c[N], d[N];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
int m = 0, fa = 0, dt = 0, k = 0;
for (int i = 1; i <= n; ++i) {
int t = a[i];
for (int j = 1; j <= m; ++j)
t = Sub(t, Mul(b[j], a[i - j]));
if (!t) continue;
if (!fa) {
k = m;
m = i;
fa = i;
dt = t;
continue;
}
copy(b + 1, b + m + 1, d + 1);
int x = i - 1 - fa, v = Mul(t, Pow(dt, MOD - 2)), nm = max(m, x + k + 1);
b[x + 1] = Add(b[x + 1], v);
for (int j = 1; j <= k; ++j)
b[x + j + 1] = Sub(b[x + j + 1], Mul(c[j], v));
if (i - m > fa - k) {
copy(d + 1, d + m + 1, c + 1);
fa = i;
dt = t;
k = m;
}
m = nm;
}
// for (int i = m + 1; i <= n; ++i) {
// int t = a[i];
// for (int j = 1; j <= m; ++j)
// t = Sub(t, Mul(a[i - j], b[j]));
// if (t) {
// cerr << i << endl;
// throw;
// }
// }
printf("%d\n", m);
for (int i = 1; i <= m; ++i)
printf("%d ", b[i]);
puts("");
return 0;
}
Berlekamp-Massey algorithm的更多相关文章
- Berlekamp Massey算法求线性递推式
BM算法求求线性递推式 P5487 线性递推+BM算法 待AC. Poor God Water // 题目来源:ACM-ICPC 2018 焦作赛区网络预赛 题意 God Wate ...
- 【hdu 6172】Array Challenge(数列、找规律)
多校10 1002 HDU 6172 Array Challenge 题意 There's an array that is generated by following rule. \(h_0=2, ...
- 线性齐次递推式快速求第n项 学习笔记
定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\l ...
- Factorization
Factorization or factoring consists of writing a number or another mathematical object as a product ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- PE Checksum Algorithm的较简实现
这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...
- [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...
- [Algorithm] 使用SimHash进行海量文本去重
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...
- Backtracking algorithm: rat in maze
Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...
- [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...
随机推荐
- LoadRunner遇到的问题
1. :
- vue中关于checkbox数据绑定v-model指令的个人理解
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type=&qu ...
- 微信小程序---设备信息
1.学习大纲: 2.获取系统信息: wx.getSystemInfo({ success: function(res) { // success console.log(res) } }) } 3.获 ...
- this引用逸出
1.定义 public class UnsafeClass { public UnsafeClass(Button button) { button.addActionListener(new Act ...
- mnist数据集下载——mnist数据集提供百度网盘下载地址
mnist数据集是由深度学习大神 LeCun等人制作完成的数据集,mnist数据集也常认为是深度学习的“ Hello World!”. 官网:http://yann.lecun.com/exdb/mn ...
- java读取文件完整版
public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in ...
- python 并发编程 多线程 Thread对象的其他属性或方法
介绍 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. threading模块提供的一些方法: ...
- 什么是SQL注入以及mybatis中#{}为什么能防止SQL注入而${}为什么不能防止SQL注入
1.什么是SQL注入 答:SQL注入是通过把SQL命令插入到web表单提交或通过页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL指令. 注入攻击的本质是把用户输入的数据当做代码执行. 举例如: ...
- Zookeeper 和Eureka比较
作为服务注册中心,Eureka比Zookeeper好在哪里著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性P在是分布式系统中必须要保证的, ...
- 问题:C++类的静态成员变量如何初始化
C++类的静态成员变量属于该类,在该类所有的对象间共享. 要弄清如何初始化,首先要明白声明.定义.初始化三个概念的不同. 声明:指定变量的名字和类型,可以多次声明. 定义:为该成员变量分配存储空间,有 ...