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

题目大意:给出一个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)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章