Algorithmique 2 : Séries Formelles

Séries Formelles

Pn0pnXn

où :

  • on a expression explicite de pn, du genre pnn2
  • OU : on a une équation de récurrence, du genre pn+1=f(pn,pn1)

Question : Est-ce que Q tq PQ=1 ?

Condition nécessaire : p0 inversible : p01=q0

⟶ il faut satisfaire

p0qn+p1qn1++pnq0=0qn=q0(p1qn1++pnq0)

⟹ Condition nécessaire et suffisante que p01=q0

  • Algo naïf en O(n2) pour le calcul des n premiers termes.

⟶ on va pour faire en O(nlognloglogn)


n puissance de 2.

P=P0i<n/2piXi+P1n/2i<npiXi+P2

et

Q=Q0i<n/2qiXi+Q1n/2i<nqiXi+Q2 PQ0+PQ1+PQ2=1PQ0=1PQ1PQ2PQ02=Q0PQ0Q1PQ0Q2PQ02=Q0(1PQ1PQ2)Q1PQ0Q2PQ02=Q0Q1+PQ12+PQ1Q2PQ0Q2 Q1=Q0+PQ12+PQ1Q2PQ0Q2PQ02

Soit,

  • pour les n/2 premiers termes :

    Q1=Q0PQ02
  • pour les termes entre n/2 (large) et n (strict) :

    Q1=PQ02

Soit, pour les n premiers termes :

Q1=(P0+P1)Q02

NB : l’intuition vient de q1=p1q02

Inversion de série formelle

def Inverse(P,n):
  if n==1:
    renvoyer P_0^{-1}
  else:
    Q_0 = Inverse(P, n//2)
    R = Produit(Q_0, Q_0, n//2)
    return Produit(-(P_0 + P_1), R)
T(n)T(n/2)+cnlog(n)loglogncnlog(n)loglogn+c(n/2)log(n/2)loglog(n/2)+...2cnlog(n)loglogn

Division Euclidienne

  • P de degré n
  • D de degré m, dm inversible
P=QD+R

Algo naïf en O((nm+1)m)

Si m=n/2 : quadratique !

⟶ on peut faire mieux


On introduit une autre indéterminée :

T1X

PXn=QXnDXn+RXn PXn=inpiXin=inpniTi

Donc

  • PXn : polynôme en T de degré n

  • QXn : polynôme en T de degré nm

  • DXn : polynôme en T de degré m

  • RXn : polynôme en T de degré n

P~=Q~D~+R~

Avec d0~=dm

P~D~1=Q~degnm+R~D~1 coeff de degré supérieur à nm+1

⟶ On fait la division euclidienne en O(nlognloglogn)

Q~=P~D~1

réduit aux nm+1 premiers termes

Puis : une fois qu’on a Q à partir de Q~, on retrouve R=PQD

Leave a comment