Mantenimento del valore di un polinomio su un input aggiornato dinamicamente


10

Sia un polinomio su un campo finito fisso. Supponiamo di avere il valore di su un vettore e sul vettore .P(X1,X2,...,Xn)y { 0 , 1 } n yPy{0,1}ny

Vogliamo ora calcolare il valore di su un vettore tale che e differiscano esattamente su una posizione (in altre parole, capovolgiamo esattamente un bit in ). Quali sono i compromessi di spazio e tempo per questo problema?y { 0 , 1 } n y y yPy'{0,1}nyy'y

Ad esempio, se è il numero di monomi in , possiamo memorizzare i coefficienti ei valori di tutti monomi in . Se viene capovolto, fissiamo il valore di ciascun monomio contenente e quindi il valore di utilizzando le informazioni memorizzate. Nel complesso, abbiamo bisogno di tempo e spazio.P P y i y i P ( y ) O ( r )rPPyioyioP(y)O(r)

(Non dico nulla su come identifichiamo i monomi contenenti allo scopo. Puoi scegliere qualsiasi rappresentazione ragionevole di , nell'esempio presumo che memorizziamo un elenco di monomi contenenti per ogni .) P y i iyioPyioio

C'è qualcosa di meglio?

Risposte:


7

La tua idea si generalizza come segue: dato un circuito algebrico (sopra il campo finito) o un circuito booleano (calcolando la rappresentazione bit-saggio dei tuoi elementi di campo finiti) calcolando , quindi mantenendo il valore su ogni gate nel circuito. Quando si modifica l' i -esimo bit di y , è sufficiente propagare quel cambiamento lungo il DAG del circuito, a partire dall'ingresso y i . Se il circuito ha dimensioni s , ciò richiede O ( s ) tempo e spazio. Questo potrebbe essere molto più piccolo del numero di monomi (che corrisponde solo alle dimensioni dei circuiti algebrici di profondità 2).PioyyioSO(S)


1
Non sono sicuro che fosse intenzionale, ma il problema non dice che ci viene dato , solo f ( y ) . yf(y)
Andrew Morgan,

1
@AndrewMorgan Dipende dalla tua domanda, per il mio va bene supporre che ti venga dato. Grazie per il commento!
Tatiana Starikovskaya,

2
@AndrewMorgan: In effetti, sebbene ciò sia tecnicamente vero, il modo in cui la costruzione di esempio nell'OQ è stata formulata sembrava presupporre implicitamente che sia dato . Se y non viene dato, penso che questo problema diventi molto più difficile. (Tatiana, può valere la pena aggiungere questo come chiarimento alla domanda.)yy
Joshua Grochow,

5

È facile modificare il tuo approccio di memorizzazione monomiale in modo che ogni aggiornamento richieda un tempo solo proporzionale al numero di monomi modificati: basta aggiornare il valore polinomiale totale aggiungendo il nuovo valore e sottraendo il vecchio valore per ogni monomio modificato.

Se hai una formula read-once per (cioè ogni variabile appare su una singola foglia dell'albero della formula e ogni nodo interno è un'operazione aritmetica a due input come più o volte), puoi mantenere il valore di P in logaritmico tempo per aggiornamento utilizzando un albero rake-compress sulla formula. Applicando questo approccio a una formula arbitraria, il tempo per aggiornare una variabile che appare k volte sarà O ( k log N ) dove N è la dimensione della formula. Quindi, ad eccezione del fattore log, questo generalizza il limite per il numero di monomi modificati e si applica a tipi più generali di espansione del polinomio in una formula.PPKO(KlogN)N

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.