Home Online Manual
Back: polyInterpolation
Forward: sparseInterpolation
Up: ffmodstd_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

D.15.9.3 BerlekampMassey

Procedure from library ffmodstd.lib (see ffmodstd_lib).

BerlekampMassey(L, i[, M]); L list, i int, M list

a list Tr where f:=Tr[1] is the minimal polynomial (w.r.t. the i-th variable) generated by the sequence (L[j]), 1<=j<= Tr[2], if the length of the sequence is long enough. In this case, the coefficients c_i of the polynomial f satisfy the relation -L[j+t] = c_0*L[j] + ... + c_{t-1}*L[j+t-1] for all j >=1 where t=deg(f).

The procedure applies the Berlekamp/Massey algorithm to the sequence L[j] (elements from the field Q) for j>0 and returns a polynomial f. If the polynomial f splits into linear factors with no multiplicity greater than one, then we say that the length of the sequence L is long enough. If this polynomial does not split into linear factors, an optional parameter M = BerlekampMassey(L',i) can be provided to add more elements to the sequence.


[1] E. Kaltofen and W.-s. Lee: Early termination in sparse interpolation algorithms. J. Symb. Comput. 36, 365-400 (2003).
[2] E. Kaltofen, W.-s. Lee and A. A. Lobo: Early termination in Ben-Or/Tiwari sparse interpolation and a hybrid of Zippel's algorithm. Proc. ISSAC (ISSAC '00), 192-201 (2000).

LIB "ffmodstd.lib";
ring rr=0,x,dp;
list L = 150,3204,79272,2245968;
list Tr = BerlekampMassey(L,1);
==> 117288/209x2-10662/209x+1
factorize(Tr[1]); //not linearly factored
==> [1]:
==>    _[1]=1/209
==>    _[2]=117288x2-10662x+209
==> [2]:
==>    1,1
list L1 = 70411680, 2352815424, 81496927872;
Tr = BerlekampMassey(L1,1,Tr); // increase the length of L by size(L1)
==> x3-66x2+1296x-7776
factorize(Tr[1]); //linearly factored and has distinct roots
==> [1]:
==>    _[1]=1
==>    _[2]=x-18
==>    _[3]=x-36
==>    _[4]=x-12
==> [2]:
==>    1,1,1,1
Tr[2]; //the length of the sequence required to generate Tr[1]
==> 6