Seja um polinômio sobre um campo finito fixo. Suponha que recebamos o valor de P em algum vetor y ∈ { 0 , 1 } n e no vetor y .
Agora queremos calcular o valor de em um vetor y ' ∈ { 0 , 1 } n tal que y e y ' diferem em exatamente uma posição (em outras palavras, nós virar exatamente um bit em y ). Quais são as compensações de espaço e tempo para esse problema?
Por exemplo, se é o número de monomios em P , que pode armazenar os coeficientes e os valores de todos os monomios em P . Se y i for invertido, fixamos o valor de cada monômio que contém y ie o valor de P ( y ) usando as informações armazenadas. No geral, precisamos de O ( r ) tempo e espaço.
(Não digo nada sobre como identificamos os monômeros que contêm para fins. Você pode escolher qualquer representação razoável de P , no exemplo, presumo que armazenamos uma lista de monômios que contêm y i para cada i .)
Existe coisa melhor?
fonte
É fácil modificar sua abordagem de armazenamento monomial para que cada atualização leve tempo apenas proporcional ao número de monômios alterados: basta atualizar o valor polinomial total adicionando o novo valor e subtraindo o valor antigo de cada monômio alterado.
Se você possui uma fórmula de leitura única para (ou seja, todas as variáveis aparecem em uma única folha da árvore de fórmulas e cada nó interno é uma operação aritmética de duas entradas, como mais ou vezes), você pode manter o valor de P em logarítmica tempo por atualização usando uma árvore rake-compress sobre a fórmula. Aplicando essa abordagem a uma fórmula arbitrária, o tempo para atualizar uma variável que aparece k vezes será O ( k log N ) em que N é o tamanho da fórmula. Portanto, exceto pelo fator de log, isso generaliza o limite para o número de monômios alterados e se aplica a tipos mais gerais de expansão do polinômio em uma fórmula.P P k O(klogN) N
fonte