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


17

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

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

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

我的算法:让

f(x)=xd+ad−1xd−1+⋯+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 1,… ,x d − 1,这并不能确定多项式的值,因为(x − x 1)⋯ (x − x d − 1)(x − x d)与我的答案一致。dd−1x1,…,xd−1(x−x1)⋯(x−xd−1)(x−xd)


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

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

d−1x1,…,xd−1

6
fd−1f
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.