急求c语言实现B-M算法求线性复杂度及极小多项式
麻烦用c语言实现以下步骤 共两个算法 万分感谢 急用 望高手相助B-M算法 步骤如下
输入:N长的序列sN=s0s1s2…s?N-1。
目的:求出序列sN的最短的线性递归关系。
步骤1 设n0是一个非负整数,使得
s0=s1=s2=…s?N-1=0;sn0不等于0
取初始值 d0=d1=d2=…dn0-1=0;dn0=sn0
令f1(x)=f2(x)=…=fn0(x)=1; l1=l2=…=ln0=0
再取 fn0+1(x)=1-dn0xn0+1; ln0+1=n0+1
步骤2 设{(fj(x),lj);j=1,2,…,n}已经求出。如果n=N,则直接转步骤3;否则计算
dn=f(E)sn
如果dn=0,则令fn+1(x)=fn(x);转步骤2.
如果dn!=0,则找出m使得
Lm<lm+1=lm+2=…=ln
令fn+1=fn(x)-dnd-1nfm(x);ln+1=max{ln,n+1-ln};转步骤2.
步骤3 设得到了(fN(x),lN).则fN(E)就是序列sN的一个最短的齐次线性递归关系;该齐次线性递归关系的长度为lN。
Games-Chan算法如下
输入:N=2n,N长的序列s=s0s1s2…sN-1;Lc=0;f(x)=1。
步骤1 令L=(s0,s1,s2,…,sN/2-1); R=(sN/2,sN/2+1,sN/2+2,…,sN-1);计算B=L+R
步骤2 如果B≠0,则令Lc=Lc+N/2,f(x)=f(x)(1-x)N/2,s=B,转步骤3;如果B=0,则令s=L,转步骤3.
步骤3 令N=N/2.
步骤4 如果N=1,B≠0,则输出(Lc,f(x)),停止;如果N=1,B=0,s≠0,则令Lc?=Lc+1,f(x)=f(x)(1-x),输出(Lc,f(x)),停止;如果N≠1,则转步骤1.
最后输出的(Lc,f(x))是序列S∞线性复杂度和极小多项式。