Sea un polinomio sobre un campo finito fijo. Supongamos que se nos da el valor de en algún vector y el vector .
Ahora queremos calcular el valor de en un vector manera que e difieran exactamente en una posición (en otras palabras, volteamos exactamente un bit en ). ¿Cuáles son las compensaciones de espacio y tiempo para este problema?
Por ejemplo, si es el número de monomios en , que puede almacenar los coeficientes y los valores de todos los monomios en . Si se voltea , fijamos el valor de cada monomio que contiene y luego el valor de usando la información almacenada. En general, necesitamos tiempo y espacio.
(No digo nada acerca de cómo identificamos los monomios que contienen para su propósito. Puede elegir cualquier representación razonable de , en el ejemplo asumo que almacenamos una lista de monomios que contienen para cada .)
¿Hay algo mejor?
fuente
Es fácil modificar su enfoque de almacenamiento de monomios para que cada actualización lleve tiempo solo proporcional al número de monomios cambiados: simplemente actualice el valor polinomial total sumando el nuevo valor y restando el valor anterior para cada monomio modificado.
Si tiene una fórmula de lectura única para (es decir, cada variable aparece en una sola hoja del árbol de fórmulas, y cada nodo interno es una operación aritmética de dos entradas como más o veces), entonces puede mantener el valor de P en logarítmico tiempo por actualización usando un árbol rake-compress sobre la fórmula. Aplicando este enfoque a una fórmula arbitraria, el tiempo para actualizar una variable que aparece k veces será O ( k log N ) donde N es el tamaño de la fórmula. Entonces, a excepción del factor log, esto generaliza el límite para el número de monomios cambiados, y se aplica a tipos más generales de expansión del polinomio en una fórmula.PAG PAG k O ( k lognorte) norte
fuente