如何判断一个n次多项式是否对称?

来源:互联网 发布:淘宝组装机为什么便宜 编辑:程序博客网 时间:2024/05/22 13:59

题目大意:给出一个n次多项式anxn+an1xn1+...+a0 (an0),判断这个多项式的函数图像是否轴对称/中心对称
n105

定理:n次多项式(n2)如果轴对称/中心对称,其对称轴/对称中心的横坐标必为an1nan
证明:设对称轴/对称中心横坐标为r,则f(2rx)n1次项系数为n2r(1)n1+an1(1)n1

n为偶数则:
f(x)=f(2rx)
=> ann2r(1)+an1(1)=an1

n为奇数则:
f(x)+f(2rx)=2f(r)
=> ann2r+an1+an1=0

解得
r=an1nan

已知常数r,现在我们要判断:
f(x)是否等于f(2rx)(n为偶数)
f(x)是否等于2f(r)f(2rx)(n为奇数)

以下做法以n为偶数为例,n为奇数做法类似,不赘述了

做法0:FFT多点求值
取两两不同的(n+1)/2个点x1,x2,...,xk (xi<r),分别判断是否满足f(x)=f(2rx),若均满足则f(n)对称,否则不对称。
证明:
必要性显然
充分性:
g(x)=f(2rx),则f(xi)=f(2rxi)=g(xi)

f(x1)=g(x1),f(x2)=g(x2),...,f(xk)=g(xk)
f(2rx1)=g(2rx1),f(2rx2)=g(2rx2),...,f(2rxk)=g(2rxk)
f(r)=g(r)
n+1个点确定一个n次多项式可知,
f(x)=g(x)

f(x)=f(2rx)
证毕。
利用FFT多点求值求出这2k个点的点值,分别判断,时间复杂度O(nlog2n)

做法1:FFT直接展开f(2rx)
二项式定理展开,f(2rx)m次项系数为:
ni=mCmi(2r)im(1)m
=(1)mm!ni=m(i!)((2r)im(im)!)
容易发现这是一个卷积的形式,于是用FFT直接求出,时间复杂度O(nlogn)

由于上面两个做法对小朋友很不友好,所以下面我们来介绍一种理论正确率100%的不确定性算法。。。(什么鬼)

做法2:Schwartz–Zippel引理
我们选取一个随机的x,判断f(x)是否等于f(2rx),若等于则对称,否则不对称
显然如果不等于那么铁定不对称,但是如果等于,错误率是多少?
Schwartz–Zippel引理:设f(x1,x2,...,xn)为数域F上的nd次非零多项式,则随机取一组x1,x2,...,xn,则f(x1,x2,...,xn)=0的概率d|F|
对于实数域上的多项式f来说,|F|=d|F|=0
所以正确率是100%【捂脸】

如果觉得不靠谱就多随机几个值好了
时间复杂度O(n)

所以这题出不出来,大家看个乐呵吧【捂脸】

1 1
原创粉丝点击