Supposons que nous ayons polynômes de degré au plus , , de sorte que le nombre total de coefficients non nuls est (c'est-à-dire que les polynômes sont rares). Je suis intéressé par un algorithme efficace pour calculer le polynôme:
Puisque ce polynôme a un degré au plus , la taille d'entrée et de sortie est . Dans le cas nous pouvons calculer le résultat en utilisant FFT dans le temps . Cela peut-il être fait pour tout ? Si cela fait une différence, je suis intéressé par le cas spécial où les coefficients sont 0 et 1, et le calcul doit être effectué sur les entiers.O ( n ) m = 1 O ( n log n ) m < n
Mise à jour. J'ai réalisé qu'une solution rapide pour ce qui précède impliquerait des progrès dans la multiplication matricielle rapide. En particulier, si alors nous pouvons lire comme coefficient de dans . Ainsi, le calcul de correspond au calcul d'un produit externe de deux vecteurs, et le calcul de la somme correspond au calcul d'un produit matriciel. S'il existe une solution utilisant le temps pour calculer alors nous pouvons multiplier deux matrices par- dans le temps a i k b k j x i + n j p k ( x ) 2 p k ( x ) 2 ∑ k p k ( x ) 2 f (∑ k p k ( x ) 2 n n f ( n 2 , n ), ce qui signifie que pour nécessiterait une percée majeure. Mais , où est l'exposant actuel de la multiplication matricielle, pourrait être possible. Des idées, n'importe qui?m ≤ n f ( n , m ) = n ω / 2 ω
la source
Réponses:
La quadrature d'un polynôme avec des coefficients non nuls prend du temps utilisant la multiplication ordinaire terme par terme, donc cela devrait être préféré à la FFT pour les polynômes où . Si O ( x 2 i ) x i < √xi O(x2i) xi<nlogn−−−−−√ , alors le nombre de polynômes avec x i supérieur à √∑ixi=n xi estO( √nlogn−−−−−√ , et ceuxci prennenttempsO(n trois / 2 (logn) 1 / 2 )àcase et combiner (même que les polynômes restants). Il s'agit d'une amélioration par rapport à laborneO(mnlogn)évidentelorsquemestΘ( √O(n/logn−−−−−−√) O(n3/2(logn)1/2) O(mnlogn) m .Θ(n/logn−−−−−−√)
la source
Pas une réponse complète mais peut-être utile.
Attention: cela ne fonctionne bien que si les supports du sont petits.p2je
Pour un polynôme , soit S q = { i ∣ a i ≠ 0 } son support et s q = | S q | être la taille du support. La plupart des p i seront clairsemés, c'est-à-dire auront un petit support.q= a0+ a1x + ⋯ + anXn Sq= { i ∣ aje≠ 0 } sq= | Sq| pje
Il existe des algorithmes pour multiplier les polynômes clairsemés et b en temps quasi-linéaire dans la taille du support du produit a b , voir par exemple http://arxiv.org/abs/0901.4323une b a b
Le support de est (contenu dans) S a + S b , où la somme de deux ensembles S et T est définie comme S + T : = { s + t ∣ s ∈ S , t ∈ T } . Si les supports de tous les produits sont petits, disons linéaires en n au total, alors on peut simplement calculer les produits et additionner tous les monômes.a b Sune+ Sb S T S+ T: = { s + t ∣ s ∈ S,t∈T} n
Il est cependant très facile de trouver des polynômes et b tels que la taille du support de a b soit quadratique dans les tailles de support de a et b . Dans cette application particulière, nous mettons au carré des polynômes. La question est de savoir combien plus S + S par rapport à S . La mesure habituelle est le doublement du nombre | S + S | / | S | . Il existe des ensembles avec un nombre de doublage illimité. Mais si vous pouvez exclure des ensembles avec un grand nombre doublant comme supports du p ia b ab a b S+S S |S+S|/|S| pi , vous pouvez alors obtenir un algorithme rapide pour votre problème.
la source
Je voulais juste noter l'algorithme d'approximation naturelle. Cela ne profite cependant pas de la rareté.
Vous pouvez utiliser une séquence aléatoire(σi)i∈[n]
En prenant X=∑iσipi(x) nous pouvons calculer X2 en nlogn temps en utilisant FFT. Alors EX2=∑ipi(x)2=S et VX2−−−−√=O(S) . Vous pouvez donc obtenir uneapproximation1+ε dans le tempsO(ε−2nlogn) .
la source