Maintenir la valeur d'un polynôme sur une entrée mise à jour dynamiquement


10

Soit un polynôme sur un champ fini fixe. Supposons qu'on nous donne la valeur de P sur un vecteur y { 0 , 1 } n et le vecteur y .P(x1,x2,,xn)Py{0,1}ny

Nous voulons maintenant calculer la valeur de sur un vecteur y { 0 , 1 } n de telle sorte que y et y diffèrent sur exactement une position (en d'autres termes, nous inversons exactement un bit en y ). Quels sont l'espace et les compromis temporels pour ce problème?Py{0,1}nyyy

Par exemple, si est le nombre de monômes en P , nous pouvons stocker les coefficients et les valeurs de tous les monômes en P . Si y i est inversé, nous fixons la valeur de chaque monôme contenant y i puis la valeur de P ( y ) en utilisant les informations stockées. Dans l'ensemble, nous avons besoin de temps et d'espace O ( r ) .rPPyiyiP(y)O(r)

(Je ne dis rien sur la façon dont nous identifions les monômes contenant à des fins spécifiques. Vous pouvez choisir n'importe quelle représentation raisonnable de P , dans l'exemple, je suppose que nous stockons une liste de monômes contenant y i pour chaque i .)yiPyii

Y a-t-il quelque chose de mieux?

Réponses:


7

Votre idée se généralise comme suit: étant donné un circuit algébrique (sur le champ fini) ou un circuit booléen (calculant la représentation bit à bit de vos éléments de champ fini) calculant , puis maintenez la valeur à chaque porte du circuit. Lorsque vous modifiez le i- ème bit de y , propagez simplement ce changement le long du DAG du circuit, en commençant par l'entrée y i . Si le circuit a une taille s , cela prend du temps et de l'espace O ( s ) . Cela pourrait être beaucoup plus petit que le nombre de monômes (ce qui correspond à la taille des circuits algébriques de profondeur seulement 2).PiyyisO(s)


1
Je ne sais pas si c'était intentionnel, mais le problème ne dit pas qu'on nous donne , juste f ( y ) . yf(y)
Andrew Morgan

1
@AndrewMorgan Dépend de votre application, pour la mienne, il est bon de supposer que y est donné. Merci pour le commentaire!
Tatiana Starikovskaya

2
yy

5

Il est facile de modifier votre approche de stockage des monômes afin que chaque mise à jour ne prenne du temps que proportionnellement au nombre de monômes modifiés: il suffit de mettre à jour la valeur totale du polynôme en ajoutant la nouvelle valeur et en soustrayant l'ancienne valeur pour chaque monôme modifié.

PPkO(klogN)N

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.