3 Algorithme de Bostan-Salvy-Schost
3.1 Conversion transpos´ ee et composition
On observe queCtoMnappliqu´e au vecteurℓ= (1, . . . , 𝑡𝑛−1)donne les coefficients (en𝑥) du polyn^ome ∑𝑛𝑘=−01′𝑇𝑘(𝑥)𝑡𝑘. En effet, si on nomme 𝑇𝑖,𝑗 les coefficients tels que 𝑇𝑖(𝑥) =
∑𝑖𝑖=0𝑇𝑖,𝑗𝑥𝑗, l’applicationCtoMn(ℓ)donne le vecteur (
𝑛−1
∑
𝑖=0
𝑇𝑖,0𝑡𝑖, . . . ,
𝑛−1
∑
𝑖=0
𝑇𝑖,𝑛−1𝑡𝑖).
Il vient tout de suite que l’image du vecteurℓ̃= (1, . . . , 𝑥𝑛−1) par la conversion trans-pos´eeCtoMtnest le vecteur des coefficients en𝑡du m^eme polyn^ome. L’applicationCtoMtn(̃ℓ)
3. ALGORITHME DE BOSTAN-SALVY-SCHOST 37
donne D´efinissons la famille de fonctions𝐶𝑖 par :
∑
𝑘⩾0
′𝑇𝑘(𝑥)𝑡𝑘= ∑
𝑖⩾0
′𝐶𝑖(𝑡)𝑥𝑖. (3.7)
On obtient cette famille (unique) en d´eveloppant par rapport `a𝑥 la s´erie g´en´eratrice des polyn^omes de Tchebychev. Ainsi, par unicit´e des 𝐶𝑖, la conversion transpos´ee CtoMtn est l’application lin´eaire :
(𝑓0, . . . , 𝑓𝑛−1) ∈K𝑛↦𝑓0
2𝐶0(𝑡) +𝑓1𝐶1(𝑡)⋯ +𝑓𝑛−1𝐶𝑛−1(𝑡) mod𝑡𝑛.
L’id´ee de base de la m´ethode pr´esent´ee dans [BSS10] est que si la s´erie g´en´eratrice des 𝐶𝑖 est de la forme :
Cette ´egalit´e s’obtient en d´eveloppant par rapport `a 𝑥 les membres de l’´equation (3.8).
Partant de la s´erie g´en´eratrice des polyn^omes de Tchebychev (2.15) page21 et de la d´efinition des𝐶𝑖 (3.7), on observe que
𝑣(𝑡) = 1 2
1−𝑡2
1+𝑡2 et ℎ(𝑡) = 2𝑡 1+𝑡2,
sont bien d´efinis pour l’´equation (3.8). On obtient alors la factorisation
CtoMtn=𝑚𝑢𝑙(⋅, 𝑣) ○eval(⋅, ℎ), (3.9)
L’algorithme calculant la conversion se d´eduit en transposant chaque op´eration. On obtient alors l’algorithme3.5.
La suite de cette section montre comment effectuer chaque ´etape efficacement.
Entr´ee: 𝑝∶= (𝑝0, 𝑝1, . . . , 𝑝𝑛) tels que𝑝𝑖∈K
Sortie: 𝑏∶= (𝑏0, 𝑏1, . . . , 𝑏𝑛) tels que ∑′𝑝𝑖𝑇𝑖(𝑥) = ∑𝑏𝑖𝑥𝑖
1: 𝑎∶=mul𝑡(𝑝, 𝑣)
2: renvoyer 𝑏∶=eval𝑡(𝑎, ℎ)
Algorithme 3.5: CtoMn
3.2 Algorithmes rapides pour la composition avec 12𝑡+𝑡2
Avant de donner les algorithmes transpos´es, il est n´ecessaire de pr´esenter les algorithmes directs.
Toujours dans l’article [BSS08], une m´ethode permettant de calculer rapidement cer-taines compositions de polyn^omes par des s´eries est expliqu´ee. La composition d’un polyn^ome quelconque par la s´erie ℎ= 2𝑡
1+𝑡2 en est un cas particulier.
Le principe fondamental de cette m´ethode est d’isoler la variable𝑥 dans l’´ecriture de la s´erie g´en´eratriceℎ. Pour ℎ par exemple, l’isolation de la variable se ram`ene `a l’´ecriture suivante :
ℎ(𝑥) = 2𝑥 1+𝑥2 =
}︂
1− ( 2
1+𝑥2 −1)
2
. (3.10)
Pour l’algorithme 3.3, Pan avait d´ej`a utilis´e cette id´ee d’isolation de la variable quand il a ´ecrit la fraction 𝑎𝑥𝑐𝑥++𝑑𝑏 comme 𝑎𝑐(1+ 𝑏𝑐−𝑑𝑎
𝑑𝑎(𝑐𝑑𝑥+1)). En fait Bostan et coauteurs proposent une g´en´eralisation de l’algorithme de Pan qui ´etait lui m^eme une g´en´eralisation de l’algorithme de d´ecalage.
Par l’´equation (3.10), le calcul de l’applicationeval(⋅, ℎ)se ram`ene aux calculs d’applica-tionssimplesde compositions par(𝑎𝑥+𝑏), par 𝑥1, par𝑥2 ou encore par⌋︂
𝑥. L’algorithme3.6 effectue ce calcul en n’utilisant que ces compositions.
Proposition 3.6. Soit 𝑝 un polyn^ome de degr´e 𝑛−1, l’algorithme 3.6permet de calculer 𝑝( 2𝑥
1+𝑥2)en 4M(𝑛) +4M(𝑛
2) + 𝒪(𝑛) op´erations arithm´etiques.
Remarque 3.7. La fonction M(𝑛) est au mieux lin´eaire : 2M(𝑛
2) ⩽M(𝑛). La complexit´e est donc major´ee par 6M(𝑛) + 𝒪(𝑛) op´erations arithm´etiques.
Pour d´emontrer cette proposition, on a besoin du lemme suivant, qui affirme que la multiplication d’une s´erie par une fraction rationnelle peut s’effectuer en temps lin´eaire.
M^eme si ce r´esultat para^ıt simple, je ne l’ai pas trouv´e dans la litt´erature.
Lemme 3.8. Si 𝑓 ∈K(𝑥) a un num´erateur et un d´enominateur de degr´e𝒪(1) et n’a pas de p^ole en 0, alors pour toute s´erie formelle 𝑔 `a coefficients dans K, la s´erie tronqu´ee𝑓 𝑔 mod𝑥𝑛 peut se calculer en𝒪(𝑛) op´erations arithm´etiques.
D´emonstration. On d´efinit d’abord les polyn^omes 𝑎et𝑏de degr´e constant tels que 𝑓 = 𝑎𝑏. En utilisant un algorithme na¨ıf, c’est-`a-dire en multipliant terme `a terme, le produit tronqu´e𝑔(𝑥)𝑎(𝑥) mod𝑥𝑛 se r´ealise en𝒪(𝑛)op´erations arithm´etiques, cette complexit´e s’explique par le degr´e constant de𝑎.
3. ALGORITHME DE BOSTAN-SALVY-SCHOST 39
Entr´ee: 𝑝(𝑥) ∈K(︀𝑥⌋︀ avec deg(𝑝, 𝑥) <𝑛, Sortie: 𝑝( 2𝑥
1+𝑥2) mod 𝑥𝑛
1: Calculer 𝑝1,0 et𝑝1,1 tel que𝑝(𝑥) =𝑝1,0(𝑥2) +𝑥𝑝1,1(𝑥2)
2: pour𝑖∈ {0,1} faire
3: 𝑑𝑖∶=deg(𝑝1,𝑖(𝑥), 𝑥)
4: 𝑝2,𝑖(𝑥) ∶=𝑝1,𝑖(1−𝑥)
5: 𝑝3,𝑖(𝑥) ∶=𝑝2,𝑖(𝑥2)
6: 𝑝4,𝑖(𝑥) ∶=𝑝3,𝑖(−2𝑥+1)
7: 𝑝5,𝑖(𝑥) ∶=p4,𝑖(1
𝑥)𝑥2𝑑𝑖
8: 𝑝6,𝑖(𝑥) ∶=𝑝5,𝑖(1+𝑥)
9: 𝑝7,𝑖(𝑥) ∶= (1+𝑥)−2𝑑𝑖𝑝6,𝑖(𝑥) mod𝑥𝑑𝑖
10: 𝑝8,𝑖(𝑥) ∶=𝑝7,𝑖(𝑥2)
11: fin pour
12: renvoyer 𝑝8,0(𝑥) + 2𝑥
1+𝑥2𝑝8,1(𝑥) mod𝑥𝑛
Algorithme 3.6: eval(⋅,1+2𝑡𝑡2)
Commeℎ=𝑓 𝑔, alors𝑏ℎ=𝑎𝑔. L’extraction du coefficient𝑥𝑖 donne donc une r´ecurrence lin´eaire inhomog`ene d’ordre le degr´e de 𝑏. En effet, en notantℎ𝑖 et𝑏𝑖 les coefficients de ℎ et𝑏. Le produit ℎ𝑏 donne
ℎ𝑏=
𝑛−1
∑
𝑖 𝑖
∑
𝑟=𝑖−deg(𝑏)
ℎ𝑟𝑏𝑖−𝑟𝑥𝑖.
`A partir de cette r´ecurrence, le calcul desℎ𝑖s’effectue en𝒪(𝑛)op´erations arithm´etiques.
D´emonstration de la proposition 3.6. La correction de l’algorithme se d´eduit de l’´ecriture dans l’´equation (3.10) de la fonction ℎ. En effet, les compositions successives de cet algorithme assurent que le polyn^ome retourn´e est bien
𝑝⎛
⎝ }︂
1− ( 2
1+𝑥2 −1)
2⎞
⎠ mod𝑥𝑛=𝑝( 2𝑥
1+𝑥2) mod 𝑥𝑛.
Il reste `a donner le co^ut de chaque op´eration. Beaucoup de ces op´erations se calculent en temps lin´eaire. C’est le cas des ´etapes 1, 5, 7 et 10 qui ne sont que des r´e´ecritures directes des coefficients. La multiplication effectu´ee `a l’´etape12s’effectue aussi en un temps lin´eaire. Cette propri´et´e est donn´ee par le lemme 3.8. Les op´erations non ´el´ementaires sont les d´ecalages effectu´es aux lignes 4,6 et 8et la multiplication `a la ligne 4. L’algorithme3.2 permet de calculer le polyn^ome d´ecal´e d’un polyn^ome de degr´e plus petit que 𝑛 enM(𝑛) op´erations arithm´etiques. `A la ligne4, ces d´ecalages sont effectu´es sur des polyn^omes de degr´e au plus 𝑛2 et les autres ´etapes d´ecalent des polyn^omes de degr´e au plus 𝑛, on obtient donc une complexit´e de 4M(𝑛) +2M(𝑛
2)op´erations arithm´etiques pour effectuer l’ensemble de ces op´erations.
Entr´ee: 𝑝(𝑥) ∈K(︀𝑥⌋︀de degr´e au plus 𝑛−1 Sortie: eval𝑡(𝑝, ℎ)
1: Calculer𝑝7,0 et𝑝∗7,1 tels que𝑝(𝑥) =𝑝7,0(𝑥2) +𝑥𝑝∗7,1(𝑥2)
2: 𝑑0∶=degr´ee(𝑝7,0, 𝑥) et𝑑1 ∶=degr´ee(𝑝∗7,1, 𝑥)
3: 𝑝7,1(𝑥) ∶=mul𝑡(𝑝∗7,1,(1+2𝑥), 𝑑1)
4: pour𝑖∈ {0,1} faire
5: 𝑝6,𝑖(𝑥) ∶=mul𝑡(𝑝7,𝑖,(1+𝑥)2𝑑𝑖)
6: 𝑝5,𝑖(𝑥) ∶=shift𝑡(𝑝6,𝑖(𝑥) + ∑𝑛𝑖=−𝑑1
𝑖+10𝑥𝑖)
7: 𝑝4,𝑖(𝑥) ∶=𝑥𝑛−1𝑝5,𝑖(1
𝑥)
8: 𝑝3,𝑖(𝑥) ∶=shift𝑡(𝑝4,𝑖(−2𝑥))
9: 𝑝2,𝑖(𝑥) ∶=12(𝑝3,𝑖(𝑥) +𝑝3,𝑖(−𝑥))
10: 𝑝1,𝑖(𝑥2) ∶=shift𝑡(𝑝2,𝑖(−𝑥))
11: fin pour
12: renvoyer 𝑝1,0(𝑥2) +𝑥𝑝1,1(𝑥2)
Algorithme 3.7: eval𝑡(⋅,1+2𝑡𝑡2)
Il ne reste plus qu’`a expliciter le co^ut des op´erations r´ealis´ees `a la ligne9. Les coefficients du d´eveloppement en s´erie de la fonction (1+𝑥2)−𝑑 v´erifient la r´ecurrence :
(2𝑑+𝑛)𝑢𝑛+ (𝑛+2)𝑢𝑛+2=0,
avec les conditions initiales 𝑢0=1 et𝑢1=0. Calculer les 𝑛⇑2 premiers coefficients s’effectue en𝒪(𝑛) op´erations arithm´etiques en d´eroulant cette r´ecurrence. Le co^ut de l’´etape9 n’est donc que le co^ut de la multiplication entre deux polyn^omes de degr´e aux plus 𝑛2. On r´ealise deux fois cette ´etape, la complexit´e est donc de 2M(𝑛
2)op´erations.
On retrouve alors la complexit´e de 4M(𝑛) +4M(𝑛2) op´erations arithm´etiques annonc´ee.