Stage de L3 Complexité de la multiplication de polynômes

publicité
Stage de L3
Complexité de la multiplication de polynômes creux
Lieu : Université de Montpellier, Laboratoire LIRMM
Équipe d’accueil : équipe ECO (http://www.lirmm.fr/eco/)
Encadrants : Bruno Grenet ([email protected])
Pascal Giorgi ([email protected])
L’algorithmique des polynômes est au cœur des systèmes de calcul formel (comme
SageMath ou Maple). Elle a aussi de nombreuses applications, de la cryptographie à
l’algorithmique des graphes.
Informatiquement, les deux manières les plus fréquentes de représenter un polynôme est soit de stocker la liste de ses coefficients (représentation dense), soit de stocker la liste de ses monômes non nuls (représentation creuse). L’algorithmique des polynômes en représentation dense est extrêmement bien comprise aujourd’hui, et on
sait par exemple calculer le produit de deux polynômes denses en complexité quasilinéaire. La situation est très différente pour la représentation creuse. En particulier, on
ne connaît pas d’algorithme de complexité optimale pour la multiplication de deux polynômes creux. L’objet de ce stage est de comprendre l’approche la plus efficace pour
ce calcul, et d’en proposer des améliorations.
Par exemple, on souhaite calculer le produit de f = 20x4913 + 63x3631 + 16x2520 +
1238
26x
par g = 60x4316 − 48x1923 + 78x641 . L’algorithme naïf consiste à effectuer tous les
produits « monôme-monôme ». Ici, on effectue donc 12 tels produits. Dans le pire cas, on
ne peut pas mieux faire car ce nombre de produits correspond au nombre de monômes
du résultat. Cependant, il y a parfois des collisions, ce qui diminue le nombre final de
monômes : ici les produits x3631 × x1923 et x1238 × x4316 donnent le même monôme x5554 .
De plus, il peut également y avoir des annulations qui diminuent encore la taille du
résultat : ici, 26x1238 × (−48x1923 ) + 16x2520 × 78x641 = 0. Ainsi, le résultat final est f ×
g = 1200x9229 + 3780x7947 + 96x5554 − 768x4443 + 4914x4272 + 2028x1879 qui a 6 monômes
et non 12.
L’objectif d’un algorithme optimal de multiplication de polynômes creux est de
réussir à détecter les collisions et les annulations en amont, pour que la complexité totale
de l’algorithme soit linéaire en le nombre de monômes du résultat. Arnold et Roche 1
ont montré comment détecter les collisions. Leur algorithme est linéaire en le nombre
de monômes du résultat s’il n’y avait pas d’annulations (mais uniquement des collisions).
Le stagiaire devra en premier lieu comprendre l’approche d’Arnold et Roche, par
exemple en proposant une implantation de leur algorithme pour observer son comportement en pratique. On cherchera ensuite à trouver une méthode pour détecter les
annulations, et non plus seulement les collisions, en amont du calcul.
1. A. A RNOLD et D. S. R OCHE. « Output-Sensitive Algorithms for Sumset and Sparse Polynomial Multiplication ». Dans : Proc. ISSAC. ACM, 2015, p. 29–36. DOI : 10.1145/2755996.2756653.
1
Téléchargement