在两个或三个查询中找到一个多项式


17

黑框表示我可以在任意点求值多项式。f x f(x)f(x)

  • 输入:度为的单项多项式的黑盒。df(x)Z+[x]d

  • 输出:多项式的系数。df(x)

我的算法:

f(x)=xd+ad1xd1++a1x+a0

评价多项式在使用黑盒子的许多点,并得到线性方程的系统。现在,我可以求解线性方程组以获得所需的系数。f(x)d

但是,在这种情况下,我需要许多对黑匣子的查询。我想减少查询数量。有什么方法可以将查询数量减少到两个或三个吗?O(d)


2
您一直在改变问题。也许您应该先决定您的问题,然后再提出。否则,对于答录器可能会有些沮丧。
Yuval Filmus

2
这是什么手段?Z+
md5

1
正整数集
复杂度

1
顺便说一下,对于您的算法,可以使用拉格朗日的封闭公式以代替O n 3计算系数。O(n2)O(n3)
md5

2
确切同样的问题,不同的措辞:math.stackexchange.com/questions/446130/...
Nayuki

Answers:


29

您可以使用两个查询来确定多项式。首先查询的多项式,以获取系数值的上限M。现在,在您选择的x > M处查询多项式,并从基数x展开中读取系数。x=1Mx>Mx

奇怪的是,如果您允许系数为负,那么您做的并不比查询好。确实,我总是可以用零回答您的d 1个查询x 1x d 1,这并不能确定多项式的值,因为x x 1x x d 1x x d与我的答案一致。dd1x1,,xd1(xx1)(xxd1)(xxd)


对于负数,我认为2的补码技巧可能有效。
复杂性

4
在系数的大小上没有上限。这就是我的证明所显示的。
Yuval Filmus

d1x1,,xd1

6
fd1f
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.