zoukankan      html  css  js  c++  java
  • 线性递推(Berlekamp-Massey 算法)

    线性递推的求解

    参考文献:2019集训队论文,钟子谦《两类递推数列的性质和应用》

    这篇文章介绍如何求解,线性递推的应用更多在这里

    数列({a_0,a_1,cdots })

    向量序列({v_0,v_1,cdots})

    矩阵序列({M_0,M_1,cdots})

    的线性递推

    序列(a_0,a_1,cdots,a_n)的线性递推的定义应当是

    对于一个常数列(r_0,r_1,cdots,r_m(r_0=1))

    为了便于表示,令

    (lambda(i,r)=sum_{j=1}^{m}a_{i-j}r_j)

    (Delta(i,r)=sum_{j=0}^m a_{i-j})

    满足(forall ige m,Delta(i,r)=0)

    这似乎与与平常的认知有一些冲突

    [ ]

    求解序列的最短线性递推: Berlekamp-Massey 算法

    对于一个(n)个元素的数列(a_{1,cdots, n}),求出它的最短线性递推式

    为了便于理解约定下文求出的是最小的(m)和对应的(r_1,cdots r_m)使得(forall iin [m+1,n],a_i=sum_{j=1}^{m}a_{i-j}r_j)

    很显然使用高斯消元可以在(O(n^3))的时间内求解

    ( ext{Berlekamp-Massey(BM)})算法是通过依次对于前(i)项构造,

    添加每一项时在(O(n))的时间内找到一个可行的构造方法,将复杂度降低到了(O(n^2))

    [ ]

    [ ]

    算法过程

    为了更好描述,设(r)的阶为(d(r))

    考虑依次加入每个数(a_i),设当前(d(r)=m),上一次的递推是(p),(p)出现不匹配的位置是(f)

    特别的,初始状态的递推是(r={},f=0)

    (1.Delta(i,r)=0),那么不需要扩展

    2.(Delta(i,r) e 0)

    ( ext{i}.m=0),此时只有一种情况即插入了第一个(a_i e 0),唯一的递推序列就是(d(r')=i,r_j=0(j>0)),此时显然成立

    ( ext{ii}.m e 0)

    构造思路是找到一个(r')使得(forall jin[d(r'),i-1],lambda(j,r')=0and lambda (n,r')=Delta(i-1,r))

    那么当前合法的转移就是(r+r')

    (t=frac{Delta(n,r)}{Delta(f,p)})

    构造(r'=t cdot x^{i-f-1}(1-p))

    写出来就是

    (r'={underbrace{0,cdots,0},tcdot (1-p)})

    $ i-f-1$个(0)

    (r'={underbrace{0,cdots,0},t,-tcdot p_{1},-tcdot p_{2}cdots,-tcdot p_{d(p)}})

    $ i-f-1$个(0)

    此时,(d(r')=i-f+d(p))

    (jin [d(r')+1,i-1])时,(lambda(j,r')=sum_{k=i-f}^{d(r')}a_{j-k}r'_k)

    (=tcdot( a_{j-(i-f)}-lambda(j-(i-f),p)))

    由于(p)对于(jin[d(r')+1-(i-f),i-1-(i-f)]=[d(p)+1,f-1])(p)这个递推式成立

    (lambda(j,r')=0)

    (j=i)时,

    (lambda(i,r')=tcdot (a_{i-(i-f)}+lambda(i-(i-f),p))=tcdot Delta(f,p))

    (lambda (i,r')=Delta(n,r))

    完成了我们想要的构造,所以每次记录上一次的失配位置,即可找到最小递推式

    关于为什么求得的就是最小递推,可以看论文里的证明

    求解向量序列的线性递推

    对于长度为(n)的向量序列({v_0,v_1,cdots})

    在模(P)意义下,随机一个向量(u),构造标量序列({v_0u,v_1u,cdots})

    构造和求解这个标量序列的线性递推,复杂度均为(O(n^2))

    求得的线性递推也为向量序列的线性递推的概率为(1-frac{n}{P}),通常认为不会错

    (可以认为复杂度与读入同阶?)

    [ ]

    求解矩阵序列的线性递推

    对于长度为(n)的矩阵序列({M_0,M_1,cdots})

    同样在模(P)意义下,随机两个向量(u,v),构造标量序列({uM_0v,uM_1v,cdots})

    求解线性递推的复杂度为(O(n^2))

    但是构造标量序列需要计算(n)次向量与矩阵的乘法,复杂度为(O(n^3))

    (可以认为复杂度与读入同阶?)

  • 相关阅读:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files/编译错误
    连接数据库配置 System.Data.Common.DbProviderFactory
    c# socket 发送邮件
    code first 数据迁移
    adb shell monkey
    汇编语言学习小总结
    zookeeper快速安装配置
    编译自己的Hadoop Eclipse插件
    在Windos上使用Eclipse进行Hadoop开发的环境搭建
    Hive安装配置以及整合HBase和hadoop
  • 原文地址:https://www.cnblogs.com/chasedeath/p/13101035.html
Copyright © 2011-2022 走看看