• Aucun résultat trouvé

Développement de fractions rationnelles

Dans le document Algorithmes Efficaces en Calcul Formel (Page 88-96)

rationnelles et récurrences linéaires

4.4 Développement de fractions rationnelles

Entrée (p0, . . . , pd−1) les coefficients d’une récurrence linéaire; (a0, . . . , ad−1) des conditions initiales ; un entier N.

Sortie Le terme aNde la suite définie par

an+d= pd−1an+d−1+ · · · + p0an.

1. Poser P = Xdpd−1Xd−1− · · · −p0et x = X mod P.

2. Calculer récursivement Q = xN= q0+ q1x + · · · + qd−1xd−1par

xk=        (xk/2)2, si k est pair, x · (xk−12 )2, sinon. 3. Renvoyer q0a0+ · · · + qd−1ad−1.

Algorithme 4.2 – Calcul du N-ième terme d’une srlcc.

Le résultat de complexité est alors le suivant.

Théorème 4.6 Soit (an) une suite récurrente linéaire à coefficients constants, don-née par une récurrence d’ordre d et des conditions initiales a0, . . . , ad−1. Soit N ≥ d. Le calcul du N-ième terme aNpeut se faire en seulement O(M(d) log N) opérations dans A.

Démonstration. La méthode est présentée dans l’Algorithme 4.2. Chaque étape du

calcul récursif a lieu dans A[X]/(P) et coûte O(M(d)) opérations dans A d’après le Corollaire 4.3, le nombre d’étapes est en log N ; la dernière multiplication ne prend que O(d) opérations. La complexité est donc O(M(d) log N). 

4.4 Développement de fractions rationnelles

Il est également possible de calculer efficacement les N premiers éléments d’une suite récurrente linéaire à coefficients constants, ou de manière équivalente, le déve-loppement de Taylor des fractions rationnelles.

Séries rationnelles et suites récurrentes

Ces deux notions sont deux aspects de la même question.

Lemme 4.7 Soit A(X) = P

n≥0anXn la série génératrice de la suite (an)n≥0. Les assertions suivantes sont équivalentes :

i. La suite (an) est une srlcc, ayant P pour polynôme caractéristique, de degré d. ii. A(X) = N0/ ¯P où ¯P = P(1/X)Xd, pour un certain N0∈ K[X] avec deg(N0) < d. De plus, si P est le polynôme minimal de (an), alors d = max{1 + deg(N0), deg( ¯P)} et pgcd(N0, ¯P) = 1.

Démonstration. Supposons que P s’écrive P = gdXd+ · · · + g0. Pour l’équivalence, on utilise uniquement le fait que le coefficient de Xd+i dans ¯P · A(X) est égal à gdai+d+

· · ·+ g0ai et que ¯P(0) = gd, 0.

Soit maintenant P le polynôme minimal de (an). On a deg( ¯P) ≤ d avec égalité si et seulement si g0, 0, c’est-à-dire X - P. Donc d ≥ max{1 + deg(N0), deg( ¯P)}. Supposons par l’absurde que cette inégalité est stricte. Alors X | P et on a que P/X est aussi polynôme caractéristique de (an), ce qui contredit la minimalité de P. Donc d = max{1 + deg(N0), deg( ¯P)}.

Soit enfin u := pgcd(N0, ¯P). Alors Pu := P/ ¯u est un polynôme de degré d − deg(u)

qui est caractéristique de (an), car ¯P/u = ¯Puet ( ¯P/u) · A(X) = N0/u est un polynôme de

degré < d − deg(u). Par la minimalité, cela implique que deg(u) = 0, donc N0et ¯P sont bien premiers entre eux.  Cette équivalence et le Théorème 4.6 ont pour conséquence immédiate un résultat de complexité.

Corollaire 4.8 Soit F(X)/G(X) dans A(X) de degré au plus d, avec G(0) inversible. Le N-ième coefficient du développement en série

F(X)/G(X) =X

n≥0

anXn

peut être calculé en O(M(d) log N) opérations.

Développement

On peut calculer le développement de Taylor à l’ordre N d’une fraction rationnelle de degré d ≤ N en O(M(N)) opérations, en utilisant la méthode de Newton, décrite au Chapitre 3. Mais O(M(N)) est en général beaucoup plus gros que les O(dN) opérations requises par la méthode naïve. Une complexité linéaire en N tout en ne croissant pas trop par rapport à d est en fait possible.

Théorème 4.9 Soit F(X)/G(X) dans A(X) avec numérateur et dénominateur de degrés au plus d, et G(0) inversible. Le développement de Taylor de F(X)/G(X) à précision N ≥ d peut se calculer en O(NM(d)/d) opérations d’anneau (+, −, ×) dans A.

Si l’anneau A permet la FFT, cette estimation de complexité devient O(N log d) ce qui est quasi-optimal, simultanément vis-à-vis de N et de d.

Le point de départ est le Corollaire 4.5 qui montre comment calculer un coefficient de la suite en fonction de coefficients distants. L’idée est de calculer les coefficients par tranches de longueur d. Il ne suffit pas d’utiliser d fois le corollaire, mais il faut encore une fois exploiter une structure supplémentaire, qui provient ici de ce que les coefficients cherchés sont consécutifs. Cette idée est résumée par le résultat suivant.

Lemme 4.10 Soit F(X)/G(X) dans A(X) avec G(0) inversible. Soit d le degré de G et soit k ≥ 0. Alors les coefficients ak, ak+1, . . . , ak+d−1du développement de

4.5 Applications 89

Entrée Deux polynômes F(X), G(X) avec

deg G = d, G(0) , 0 et deg F < d, un entier N > d. Sortie Les coefficients a0, . . . , aNdu développement

F(X)/G(X) =P

n≥0anXn.

1. Calculer les 2d − 1 premiers coefficients a0, . . . , a2d−2. 2. Poser y1= Xd−1mod ¯G(X) et y?= Xd mod ¯G(X),

où ¯G(X) = XdG(1/X). 3. Pour i = 2, . . . , dN/de :

a. Calculer yi= y?yi−1mod ¯G(X). b. Calculer P = (a2d−2+ · · · + a0X2d−2yi.

c. Extraire aid−1, aid, . . . , a(i+1)d−2 les coefficients des mo-nômes X2d−2, . . . , Xd, Xd−1dans P.

4. Renvoyer a0, . . . , aN.

Algorithme 4.3 – Développement en série d’une fraction rationnelle.

F(X)/G(X) =P

iaiXi sont les coefficients de X2d−2, . . . , Xd, Xd−1du produit 

a2d−2+ · · · + a0X2d−2Xk mod G(1/X)Xd.

Démonstration. Le polynôme G(1/X)Xdest polynôme caractéristique de la suite des coefficients d’après le Lemme 4.7. Le coefficient de Xk+i pour i = 0, . . . , d − 1 dans le produit ci-dessus est égal au produit scalaire (Ai|Vk) où Ai= (ai, . . . , ad+i−1), d’après

le Corollaire 4.5. 

Preuve du Théorème 4.9. La méthode est résumée dans l’Algorithme 4.3. La première

étape se calcule par itération de Newton en O(M(d)) opérations dans A, ce qui repré-sente un coût négligeable sur l’ensemble. L’obtention de y?est une récriture à partir de ¯G et ne demande pas d’opération. Ensuite, chaque itération utilise un produit dans A[X]/( ¯G) et un produit d’un polynôme de degré 2d − 2 par un polynôme de degré d − 1. Au total, sont donc effectuées O(NM(d)/d) opérations dans A.  La traduction de ce résultat au niveau des srlcc est immédiate.

Corollaire 4.11 Soit (an) une suite récurrente linéaire à coefficients constants, donnée par une récurrence d’ordre d, et des conditions initiales a0, . . . , ad−1. Soit N ≥ d. Alors, les termes a0, . . . , aNpeuvent être calculés en O (NM(d)/d) opérations dans A.

4.5 Applications

Évaluation d’un polynôme sur une progression arithmétique

Corollaire 4.12 Un polynôme P de degré d peut être évalué aux N + 1  d points

Démonstration. L’opérateur ∆a(P) = P(X + a) − P(X) fait décroître le degré des poly-nômes. Il s’ensuit que ∆d+1

a P = 0 et donc P(an + b) est une suite récurrente linéaire d’ordre d + 1 et de polynôme caractéristique (X − 1)d+1.  Propriétés de clôture

La classe des srlcc admet de nombreuses propriétés de clôture : si a = (an)n et b= (bn)nsont deux srlcc de polynômes caractéristiques P et Q, alors

1. la somme a + b = (an+ bn)net le produit de Cauchy a ?Cb, dont le terme général estPn

i=0aibn−i, sont deux srlcc de polynôme caractéristique PQ ;

2. le produit d’Hadamard a b = (anbn)nest une srlcc de polynôme caractéristique égal au produit composé P ⊗ Q défini au Chapitre 3 ;

3. la suitePn

i=0 niaibn−i



n est une srlcc de polynôme caractéristique égal à la somme composée P ⊕ Q définie au Chapitre 3.

Ils se calculent donc tous en bonne complexité (quasi-linéaire en la taille de la sor-tie).

Exercice 4.5 Prouver les assertions précédentes. 

Tests de primalité

Une application du calcul rapide d’un terme d’une récurrence est une famille de tests probabilistes de primalité, de complexité polynomiale. L’idée est de construire une suite récurrente (an) d’entiers telle que la primalité de n soit équivalente (ou presque équivalente) à an0 mod n.

Un cas particulier important en estle test de Fermat (pour lequel an= an−1−1) implanté dans la plupart des systèmes de calcul formel. Bien qu’il soit probabiliste (si n ne passe pas le test, n est composé, mais si n passe le test, alors il est premier seule-ment avec une grande probabilité), sa grande simplicité le rend souvent préférable à d’autres algorithmes sophistiqués.

Exercice 4.6 Soit (an) une srlcc d’ordre d. Montrer qu’il existe des constantes entières

c0, c1, . . . , cd telles que p divise c0+ c1ap−1+ · · · + cdap−d dès lors que p est un nombre premier. De plus, pour tout premier p, les constantes ci mod p peuvent être trouvées en O(M(d)) opérations arithmétiques dans A = Z/pZ. [Indication : pour A une matrice carrée d’entiers et p un nombre premier, la trace de Ap et celle de A sont congrues

modulo p.] 

Par exemple, si (Fn) est la suite de Fibonacci, alors p divise Fp−2+ 3Fp−1−1 dès lors que p est premier et la réciproque est vraie avec une bonne probabilité. L’exercice précédent fournit un test de primalité similaire au test de Fermat. D’après le Théo-rème 4.6, son coût est de O(M(d) log p) opérations arithmétiques dans Z/pZ, soit O(M(d)MZ(log p) log p) opérations binaires.

Exercice 4.7 Soient a et N deux entiers premiers entre eux. Montrer que N est premiersi et seulement si XN+ a = (X + a)N mod N dans Z[X]. 

4.5 Applications 91

(X + a)Nmod P(X) dans Z/NZ[X] ; si de plus, P(X) est de degré r = O(logcN), pour un

c > 0, alors cette égalité peut être testée « en temps polynomial », c’est-à-dire en un

nombre d’opérations binaires polynomial en log N. 

Notes

La suite de Fibonacci, introduite en 1202 par Leonardo Pisano (mieux connu sous le pseudonyme de Fibonacci) dans un problème récréatif décrivant la croissance d’une population de lapins jouit de riches propriétés algébriques, arithmétiques et combinatoires. Par exemple : (a) Fnest le nombre de façons différentes de paver un rectangle 2 × (n − 1) au moyen de dominos 2 × 1 ; (b) (Fn)nest unesuite de divisibilité,

c’est-à-dire que Fndivise Fmdès lors que n divise m ; (c) si n est impair, alors

Fn= 2n−1 n−1 2 Y k=1 1 4+ cos 2 n ! .

Exercice 4.9 Prouver les assertions (a)–(c). 

Malgré sa simplicité, la suite de Fibonacci fait l’objet de nombreux problèmes ouverts. Par exemple, on ignore s’il existe une infinité de nombres de Fibonacci premiers. Les nombres de Fibonacci sont omniprésents en mathématiques et en informatique2 : ils interviennent aussi bien dans l’analyse de l’algorithme d’Euclide pour le calcul du plus grand commun diviseur de deux entiers, que dans la solution négative du dixième problème de Hilbert par Matiyasevich3.

Historiquement, le premier algorithme rapide pour la division des polynômes est dû à Moenck et Borodin [MB72]. Son point clé est quele quotient de la division euclidienne de deux polynômes ne dépend que de leurs coefficients de poids fort. Cette

remarque est également à la base du calcul rapide de pgcd, étudié au Chapitre 6. La paternité de l’algorithme de la Section 4.2 revient à Strassen [Str73]. Une alternative, de même complexité asymptotique, à l’algorithme esquissé en Section 4.2 pour les calculs modulaires a été proposée par Montgomery [Mon85].

Calculer les N premiers termes d’une srlcc de polynôme caractéristique fixé est une opération linéaire en les conditions initiales ; c’est ledual de l’opération de division

d’un polynôme de degré N par un polynôme fixé. Les conséquences algorithmiques de ce fait seront décrites au Chapitre 12.

Le théorème de Skolem–Mahler affirme que pour toute srlcc (an), l’ensemble de ses zéros (les indices i pour lesquels ai= 0) est la réunion d’un ensemble fini et d’un nombre fini de suites arithmétiques. Son étude est une question subtile. Par exemple, déterminer si l’ensemble des zéros est vide est un problème NP-difficile [BP02]. Le livre d’Everest, van der Poorten, Shparlinski et Ward [Eve+03] est une excellente référence pour en savoir plus sur les questions reliées aux srlcc. Sur ces questions, il existe aussi quelques articles synthétiques et bien écrits [CMP87 ; Poo89].

2. Le journalThe Fibonacci Quarterly est entièrement dédié à l’étude de leurs propriétés.

3. Ce problème proposait de trouver un algorithme pour décider si un système d’équations diophan-tiennes (polynômes à coefficients entiers) admet une solution en nombres entiers.

L’Exercice 4.1 est le point clé de la méthode de Wiedemann pour la résolution de systèmes linéaires creux, traitée au Chapitre 9.

Le calcul rapide d’un terme de la suite de Fibonacci par exponentiation binaire de la matrice compagnon associée relève du folklore mathématique. Sa généralisation (Exercice 4.4) est décrite par Miller et Brown [MB66], mais était probablement connue bien avant.

Le Théorème 4.9 et le Corollaire 4.11 sont dus à Fiduccia [Fid85] et Shoup [Sho91a]. Leur récente généralisation au cas des matrices polynomiales est à la base du meilleur algorithme pour la résolution de systèmes linéaires à coefficients polynomiaux, exposé au Chapitre 11.

Il n’existe pas de test déterministe de primalité basés sur le test modulaire d’un terme d’une récurrence à coefficients constants. Par contre, on peut caractériser un nombre premier N à l’aide de suites qui vérifient des récurrences à coefficients poly-nomiaux (comme la factorielle, via le test de Wilson (N − 1)! = −1 mod N). Malheureu-sement, cela ne fournit pas d’algorithme efficace. Le premier algorithme déterministe qui prouve la primalité en temps polynomial est très récent [AKS04] ; il part de la caractérisation de type Fermat donnée dans l’Exercice 4.8, et exhibe une constante

c et un polynôme P tels que la primalité de N est impliquée par la vérification de

l’identité de l’Exercice 4.8 pour seulement r1/2log N valeurs de a.

Bibliographie

AKS04 Agrawal, Manindra, Neeraj Kayal et Nitin Saxena (2004). « PRIMES is in P ». In :Annals of Mathematics. Second Series, vol. 160, n2, p. 781–793. BP02 Blondel, Vincent D. et Natacha Portier (2002). « The presence of a zero

in an integer linear recurrent sequence is NP-hard to decide ». In :Linear Algebra and its Applications, vol. 351/352. Fourth special issue on linear

systems and control, p. 91–98.

CMP87 Cerlienco, L., M. Mignotte et F. Piras (1987). « Suites récurrentes li-néaires. Propriétés algébriques et arithmétiques ». In : L’Enseignement Mathématique. II, vol. 33, p. 67–108.

Eve+03 Everest, Graham, Alf van der Poorten, Igor Shparlinski et Thomas Ward (2003).Recurrence sequences. Vol. 104. Mathematical Surveys and

Mono-graphs. American Mathematical Society.

Fid85 Fiduccia, C. M. (1985). « An efficient formula for linear recurrences ». In :

SIAM Journal on Computing, vol. 14, n1, p. 106–112.

MB66 Miller, J. C. P. et D. J. Spencer Brown (1966). « An algorithm for eva-luation of remote terms in a linear recurrence sequence ». In :Computer Journal, vol. 9, p. 188–190.

MB72 Moenck, R. T. et A. Borodin (1972). « Fast modular transforms via divi-sion ». In :Thirteenth Annual IEEE Symposium on Switching and Automata Theory, p. 90–96.

Mon85 Montgomery, Peter L. (1985). « Modular multiplication without trial division ». In :Mathematics of Computation, vol. 44, n

4.5 Applications 93

Poo89 Poorten, A. J. van der (1989). « Some facts that should be better known, especially about rational functions ». In :Number theory and applications.

Proceedings of a Conference held at Banff, AB, 1988. Dordrecht : Kluwer, p. 497–528.

Sho91a Shoup, V. (1991). « A fast deterministic algorithm for factoring polyno-mials over finite fields of small characteristic ». In :ISSAC’91 : International Symposium on Symbolic and Algebraic Computation. ACM Press, p. 14–21.

Str73 Strassen, V. (1972/73). « Die Berechnungskomplexität von elementar-symmetrischen Funktionen und von Interpolationskoeffizienten ». In :

5. Calculs modulaires, évaluation et

Dans le document Algorithmes Efficaces en Calcul Formel (Page 88-96)