看板 Prob_Solve 關於我們 聯絡資訊
※ 引述《willhunting (這些年來)》之銘言: : 如題,請問這樣的問題有O(N*logN)的解法嗎?謝謝各位 在限定所有數字是整數 而且題目只問有沒有的條件下 我是湊出了一個O(N+RlogR)的解法 其中R是數字的範圍 方法如下: 令數列中最小值為m 即最大值為m+R 首先, 用O(N)的時間把這組N個資料轉換成一個R次多項式 f(x) 其中x^k項係數表示這N個資料中k+m有幾個 再來 利用一個有點噁心的O(RlogR)的多項式乘法演算法 (詳情可見Introduction to Algorithm Chap.30 利用到離散傅立葉轉換) 計算g(x) = [f(x)]^2 = f(x) * f(x) 然後將g(x)的x^(-m)到x^(-m+R)項的係數和f(x)的x^0到x^R係數比較 只要兩邊某一項係數都非0就是找到有了 這需要O(R) 總共加起來就是O(N+RlogR) -- 有人喜歡邊玩遊戲上逼; 也有人喜歡邊聽歌打字。 但是,我有個請求, 選字的時候請專心好嗎? -- 改編自「古 火田 任三郎」之開場白 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.84
willhunting:真是前所未聞的高超解法 感謝! 11/01 23:52
FRAXIS:很有創意的方法 不過R有可能比n要來的大.. 11/02 18:48
LPH66:嗯, 所以我不敢說這就是原PO要的nlogn解法 11/03 00:12