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