简介
Berlekamp-Massey算法,简称BM算法,可以在 O ( N 2 ) O(N^2) O(N2)时间内求解一个数列的最短线性递推式。
教程
Berlekamp-Massey算法
我们采用增量法构造数列 { a n } \{a_n\} { an}最短线性递推式。
假设现在已经得到了数列 a 1 , a 2 , . . . , a i − 1 a_1,a_2,...,a_{i-1} a1,a2,...,ai−1的最短线性递推式,且在这之前递推式被修改过 c n t cnt cnt次,设第 k k k次修改后的递推式为 R k R_k Rk。
如果在加入 a i a_i ai后原来的递推式仍然满足,也就是有 ∑ k = 1 m r k ∗ a i − k = a i \sum_{k=1}^mr_k*a_{i-k}=a_i k=1∑mrk∗ai−k=ai
那么数列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an的最短线性递推式就是 R c n t R_{cnt} Rcnt。
不然的话,表明第 c n t cnt cnt次修改后的递推式在位置 i i i处出错。定义 f a i l k fail_{k} failk表示第 k k k次修改后的递推式在 f a i l k fail_{k} failk处出错,显然有 f a i l c n t = i fail_{cnt}=i failcnt=i,同时定义 d e l t a c n t = a i − ∑ k = 1 m r k ∗ a i − k delta_{cnt}=a_i-\sum_{k=1}^mr_k*a_{i-k} de