BM算法 | Personal Blog

BM算法

Berlekamp-Massey算法

BM算法是用来求解一个数列的最短线性递推式的算法 在本文中,BM算法具体被用于求解产生已知序列的线性移位寄存器的特征多项式及级数

一些定义

  • R0={}      //初始递推式

  • cnt       //递推式的修改次数

  • deltai=ai - $\sum_{j=1}^m$ rj*ai-j   //递推式的正确性的判断,其中ri是递推式的元素,m是递推式中元素的个数

  • failk=i      //表示R第k次出错,在ai处出错

  • mul=$delta_i \over delt_{fail_{cnt-1}}$

  • R′={   (i-failcnt-1-1个0)  ,  mul, -mul·Rcnt-1}

  • Rcnt+1=Rcnt+R′  //(按位相加)

计算步骤

\[一、delta_i = \begin{cases} delta_i=0 & 不修改 \\ delta_i\neq0 & 计算fail_{cnt} \end{cases}\] \[二、faila_i=i\begin{cases} cnt=0 & R_{cnt}=\{\overbrace{0,0,···,0}^{i个}\} \\ cnt\neq0 & 转三 \end{cases}\] \[三、cnt\neq0 \begin{cases} mul={delta_i \over delt_{fail_{cnt-1}}\ } & \\ R′=\{\overbrace{0,0,···,0}^{i-fail_{cnt-1}个},mul,-mul·R_{cnt-1}\}&\\ R_{cnt+1}=R_{cnt}+R′(按位相加) \end{cases}\]

实例

令待测序列S=10101111

  • R0={} cnt=0

  • a1=1  delt1=1  fail0=1  R1={0}  cnt=1

  • a2=0  delt2=0   不修改

  • a3=1  delt3=1  fail1=3  mul=1  R′={0,1,0}  R2={0,1,0}  cnt=2

  • a4=0  delt4=0   不修改

  • a5=1  delt5=0   不修改

  • a6=1  delt6=1   fail2=6  mul=1   R′={0,0,1,0} R3={0,1,1,0}  cnt=3

  • a7=1  delt7=0   不修改

  • a8=1  delt8=-1  fail2=8  mul=-1 R′={0,-1,0,1,0} R4={0,0,1,1,0}  cnt=4

综上,由R4={0,0,1,1,0}  cnt=4可知目前为止得到的特征多项式为

1+0·x+0·x2+1·x3+1·x4+0·x5

级数为4.