Somma di calcolo dei polinomi sparsi al quadrato in O (n log n) tempo?


18

Supponiamo di avere polinomi di grado al massimo , , in modo tale che il numero totale di coefficienti diversi da zero sia (cioè i polinomi sono scarsi). Sono interessato a un algoritmo efficiente per il calcolo del polinomio: n n > m np1,...,pmnn>mn

ipi(x)2

Poiché questo polinomio ha un grado massimo di , sia la dimensione di input che di output è . Nel caso possiamo calcolare il risultato usando FFT nel tempo . Questo può essere fatto per qualsiasi ? Se fa qualche differenza, sono interessato al caso speciale in cui i coefficienti sono 0 e 1 e il calcolo dovrebbe essere effettuato su numeri interi.O ( n ) m = 1 O ( n log n ) m < n2nO(n)m=1O(nlogn)m<n

Aggiornare. Mi sono reso conto che una soluzione rapida per quanto sopra avrebbe comportato progressi nella rapida moltiplicazione della matrice. In particolare, se allora possiamo leggere come coefficiente di in . Pertanto, calcolare corrisponde al calcolo di un prodotto esterno di due vettori e il calcolo della somma corrisponde al calcolo di un prodotto matrice. Se esiste una soluzione che utilizza il tempo per calcolare allora possiamo moltiplicare due -by- matrici nel tempo a i k b k j x i + n j p k ( x n , m ) pk(x)=i=1naikxi+j=1nbkjxnjaikbkjxi+njp k ( x ) 2 k p k ( x ) 2 f (pk(x)2pk(x)2kpk(x)2f(n,m) n n f ( n 2 , n )kpk(x)2nnf(n2,n), il che significa che per richiederebbe un importante passo avanti. Ma , dove è l'attuale esponente della moltiplicazione di matrici, potrebbe essere possibile. Idee, qualcuno?m n f ( n , m ) = n ω / 2 ωf(n,m)=O(nlogn)mnf(n,m)=nω/2ω


1
Ciao rasmus Penso che tu abbia intenzione di andare sul sito principale. Questo è il meta sito, per domande sul sito.
Suresh Venkat,

Risposte:


3

La quadratura di un polinomio con coefficienti diversi da zero richiede tempo usando la moltiplicazione ordinaria termine per termine, quindi questo dovrebbe essere preferito alla FFT per quei polinomi in cui . Se , il numero di polinomi con maggiore di è , e questi richiederà il tempo per quadrare e combinare (così come i polinomi rimanenti). Questo è un miglioramento rispetto all'ovvio associato quando è . O ( x 2 i ) x i < xiO(xi2)ixi=nxixi<nlognixi=nxi O(nlognO(n 3 / 2 (logn) 1 / 2 )O(mnlogn)mΘ(O(n/logn)O(n3/2(logn)1/2)O(mnlogn)mΘ(n/logn)


1
Quello che mi interessa è un metodo che calcola la somma senza calcolare ogni termine. Fare moltiplicazioni FFT o termine per termine per ogni prodotto sarà troppo lento per l'applicazione che ho in mente.
Rasmus Pagh,

2

Non una risposta completa ma forse utile.

Avvertenza: funziona bene solo se i supporti di sono piccoli.pi2

Per un polinomio , si che sia il suo supporto eessere la dimensione del supporto. Gran parte del sarà scarso, cioè avrà un piccolo supporto.S q = { i a i0 } s q = | S q | p iq=a0+a1x++anxnSq={iai0}sq=|Sq|pi

Esistono algoritmi per moltiplicare sparse polinomi e in tempo quasi-lineare nella dimensione del supporto del prodotto , vedi ad esempio http://arxiv.org/abs/0901.4323b a babab

Il supporto di è (contenuto in) , dove la somma di due insiemi e è definita come . Se i supporti di tutti i prodotti sono piccoli, diciamo, lineari in in totale, allora si può semplicemente calcolare i prodotti e sommare tutti i monomi.S a + S b S T S + T : = { s + t s S , t T } nabSa+SbSTS+T:={s+tsS,tT}n

E 'comunque molto facile da trovare polinomi e tali che la dimensione del supporto di è quadratica nelle dimensioni del supporto di e . In questa particolare applicazione, stiamo quadrando i polinomi. Quindi la domanda è come molto più grande rispetto a . La misura abituale per questo è il numero di raddoppio. Esistono set con numero di raddoppio illimitato. Ma se puoi escludere insiemi con un numero doppio raddoppiato come supporti di , allora puoi ottenere un algoritmo veloce per il tuo problema. b a b a b S + S S | S + S | / | S | p iabababS+SS|S+S|/|S|pi


1
Anche se non ho familiarità con la combinatoria additiva, penso che le progressioni aritmetiche generalizzate e il teorema di Freiman-Ruzsa riguardino insiemi con un piccolo raddoppio.
Tsuyoshi Ito,

@Tsuyoshi: hai ragione, modificherò la mia risposta. Tuttavia, ci sono GAP con una grande costante di raddoppio.
5501

Personalmente non credo che questo approccio sia promettente. Un'implicazione (piuttosto inesatta) del teorema di Freiman-Ruzsa è che | S + S | / | S | è piccolo solo in casi speciali, e quindi la parte "Se è possibile escludere set con un numero di raddoppio maggiore come supporti di p_i" è un if molto grande . Tuttavia, come ho detto, non ho familiarità con la combinatoria additiva, e dovresti prendere le mie parole su di esso con un granello di sale.
Tsuyoshi Ito,

Ovviamente funziona solo se l'applicazione in mente (che non conosco) offre buoni supporti.
5501

Quindi sarebbe più facile da capire se rendi questo assunto più esplicito nella tua risposta. Il modo attuale di scrivere il presupposto nella risposta suggerisce che si considera che il presupposto di un piccolo numero di raddoppio non è un grosso problema.
Tsuyoshi Ito,

2

Volevo solo notare l'algoritmo di approssimazione naturale. Questo però non sfrutta la scarsità.

Puoi usare una sequenza casuale Prendendo possiamo calcolare in time usando FFT. Quindi e . Quindi puoi ottenere un'approssimazione nel tempo .(σi)i[n]X=iσipi(x)X2nlognEX2=ipi(x)2=SVX2=O(S)1+εO(ε2nlogn)


Bel approccio! Ma non hai bisogno di più ripetizioni per ottenere tutti i coefficienti giusti con alta probabilità?
Rasmus Pagh,

@RasmusPagh Giusto, probabilmente otterrai un termine se vuoi che tutti i coefficienti siano preservati con probabilità . 1 - δlog(n/δ)1δ
Thomas Ahle,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.