如何判斷一個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)

所以這題出不出來,大家看個樂呵吧【捂臉】

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