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}nyy′y

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(klog⁡N)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.