Mantendo o valor de um polinômio sobre uma entrada atualizada dinamicamente

10

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 .P(x1,x2,,xn)Py{0,1}ny

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?Py{0,1}nyyy

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.rPPyiyiP(y)O(r)

(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 .)yiPyii

Existe coisa melhor?

Tatiana Starikovskaya
fonte

Respostas:

7

Sua idéia generaliza da seguinte maneira: dado um circuito algébrico (sobre o campo finito) ou circuito booleano (calculando a representação bit a bit de seus elementos de campo finito) calculando , em seguida, mantenha o valor em cada porta do circuito. Quando você altera o i- ésimo bit de y , basta propagar essa alteração ao longo do DAG do circuito, iniciando na entrada y i . Se o circuito tem tamanho s , este leva O ( s ) tempo e espaço. Isso pode ser muito menor que o número de monômios (que corresponde ao tamanho dos circuitos algébricos de profundidade apenas 2).PiyyisO(s)

Joshua Grochow
fonte
11
Não tenho certeza se isso foi intencional, mas o problema não diz que recebemos , apenas f ( y ) . yf(y)
Andrew Morgan
11
@AndrewMorgan Depende da sua aplicação, para o meu é bom supor que y é dado. Obrigado pelo comentário!
Tatiana Starikovskaya
2
@ AndrewMorgan: De fato, embora isso seja tecnicamente verdadeiro, a maneira como a construção de exemplo no OQ foi formulada parecia implicitamente assumir que é dado. Se y não for fornecido, acho que esse problema se torna muito mais difícil. (Tatiana, pode valer a pena acrescentar isso como um esclarecimento da questão.)yy
Joshua Grochow
5

É 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.PPkO(klogN)N

David Eppstein
fonte