題目大意:給出乙個
n 次多項式an
xn+a
n−1x
n−1+
...+
a0(a
n≠0)
,判斷這個多項式的函式影象是否軸對稱/中心對稱 n≤
105
定理:n
次多項式(n
≥2)如果軸對稱/中心對稱,其對稱軸/對稱中心的橫座標必為−a
n−1n
∗an
證明:設對稱軸/對稱中心橫座標為
r ,則f(
2r−x
)的n−
1 次項係數為n∗
2r∗(
−1)n
−1+a
n−1∗
(−1)
n−1
若n 為偶數則: f(
x)=f
(2r−
x)=>an
∗n∗2
r∗(−
1)+a
n−1∗
(−1)
=an−
1 若
n 為奇數則: f(
x)+f
(2r−
x)=2
f(r)
=>an
∗n∗2
r+an
−1+a
n−1=
0 解得 r=
−an−
1n∗a
n 已知常數
r ,現在我們要判斷: f(
x)是否等於f(
2r−x
) (
n 為偶數) f(
x)是否等於2f
(r)−
f(2r
−x) (
n 為奇數)
以下做法以
n為偶數為例,
n 為奇數做法類似,不贅述了
做法0:fft多點求值
取兩兩不同的⌊(
n+1)
/2⌋個點
x1,x
2,..
.,xk
(xi,分別判斷是否滿足f(
x)=f
(2r−
x),若均滿足則f(
n)對稱,否則不對稱。
證明:
必要性顯然
充分性: 設g
(x)=
f(2r
−x) ,則f(
xi)=
f(2r
−xi)
=g(x
i)即 f(
x1)=
g(x1
),f(
x2)=
g(x2
),..
.,f(
xk)=
g(xk
) f(
2r−x
1)=g
(2r−
x1),
f(2r
−x2)
=g(2
r−x2
),..
.,f(
2r−x
k)=g
(2r−
xk)
f(r)
=g(r
) 由n
+1個點確定乙個
n 次多項式可知, f(
x)=g
(x)即
f(x)
=f(2
r−x)
證畢。
利用fft多點求值求出這2k
個點的點值,分別判斷,時間複雜度o(
nlog
2n)
做法1:fft直接展開f(
2r−x
) 二項式定理展開,f(
2r−x
) 的
m 次項係數為: ∑n
i=mc
mi(2
r)i−
m(−1
)m=(
−1)m
m!∑n
i=m(
i!)∗
((2r
)i−m
(i−m
)!)
容易發現這是乙個卷積的形式,於是用fft直接求出,時間複雜度o(
nlog
n)
由於上面兩個做法對小朋友很不友好,所以下面我們來介紹一種理論正確率100%的不確定性演算法。。。(什麼鬼)
做法2:schwartz–zippel引理
我們選取乙個隨機的
x ,判斷f(
x)是否等於f(
2r−x
) ,若等於則對稱,否則不對稱
顯然如果不等於那麼鐵定不對稱,但是如果等於,錯誤率是多少?
schwartz–zippel引理:設f(
x1,x
2,..
.,xn
) 為數域
f 上的n元
d 次非零多項式,則隨機取一組x1
,x2,
...,
xn,則f
(x1,
x2,.
..,x
n)=0
的概率≤d
|f|
對於實數域上的多項式
f 來說,|f
|=∞,
d|f|
=0所以正確率是100%【捂臉】
如果覺得不靠譜就多隨機幾個值好了
時間複雜度o(
n)
所以這題出不出來,大家看個樂呵吧【捂臉】
判斷乙個樹是否對稱
使用遞迴的方法判斷樹是否對稱,也讓我更進一步的理解了遞迴。class solution object def ismirror self,left,right if left none and right none 如果左右子樹都為空,則對稱 return true elif left none o...
java實現解一元n次多項式 二
package commonalgorithm public class polynomialsoluter 檢查輸入項長度 private boolean init double matrixa,double arrayb public double getresult double matrix...
資料結構 一元n次多項式模板
一元n次多項式 我把first開到公有了。實驗二 一元多項式的基本運算 實驗目的 掌握用線性表實現一元多項式的基本運算。實驗內容 使用鏈式儲存實現一元多項式的加法 減法 乘法和求導。即 c x a x b x c x a x b x c x a x b x c x a x 選單 1 c 分別建立兩個...