Beibehalten des Werts eines Polynoms über eine dynamisch aktualisierte Eingabe

10

Sei ein Polynom über einem festen endlichen Feld. Angenommen, wir erhalten den Wert von P für einen Vektor y { 0 , 1 } n und den Vektor y .P(x1,x2,,xn)Py{0,1}ny

Wir wollen nun den Wert von auf einem Vektor y '{ 0 , 1 } n so berechnen , dass sich y und y ' an genau einer Position unterscheiden (mit anderen Worten, wir drehen genau ein Bit in y ). Was sind die räumlichen und zeitlichen Kompromisse für dieses Problem?Py{0,1}nyyy

Wenn beispielsweise die Anzahl der Monome in P ist , können wir die Koeffizienten und die Werte aller Monome in P speichern . Wenn y i umgedreht wird, legen wir den Wert jedes Monoms, das y i enthält, und dann den Wert von P ( y ) unter Verwendung der gespeicherten Informationen fest. Insgesamt brauchen wir O ( r ) Zeit und Raum.rPPyiyiP(y)O(r)

(Ich sage nichts darüber, wie wir die Monome, die zu diesem Zweck identifizieren . Sie können eine vernünftige Darstellung von P wählen. In dem Beispiel gehe ich davon aus, dass wir für jedes i eine Liste von Monomen speichern, die y i enthalten .)yiPyii

Gibt es etwas Besseres?

Tatiana Starikovskaya
quelle

Antworten:

7

PiyyisO(s)

Joshua Grochow
quelle
1
yf(y)
1
@AndrewMorgan Abhängig von Ihrer Bewerbung, für meine ist es in Ordnung anzunehmen, dass y gegeben ist. Danke für den Kommentar!
Tatiana Starikovskaya
2
yy
5

Es ist einfach, Ihren Ansatz zum Speichern von Monomen so zu ändern, dass jede Aktualisierung nur proportional zur Anzahl der geänderten Monome dauert: Aktualisieren Sie einfach den gesamten Polynomwert, indem Sie den neuen Wert addieren und den alten Wert für jedes geänderte Monom subtrahieren.

PPkO(klogN)N

David Eppstein
quelle