Re: [問題] 第 k 大連續子陣列和

作者: DJWS (...)   2015-02-28 08:06:47
推 suhorng: 對答案二分搜 02/27 23:16
→ suhorng: O(n log n log RANGE), 不能說是 o(n^2) 就是... 02/27 23:18
→ suhorng: http://tioj.ck.tp.edu.tw/problems/1208 這裡可以傳~ 02/27 23:18
→ suhorng: ^^^^^ 這邊不確定一個 log 還兩個 log 02/28 02:07
→ FRAXIS: 應該是一個log 沒錯 02/28 02:21
說到 RANGE
最近剛好有學到一個 fourier transform 的方法 分享一下
時間複雜度是 O(n + RANGE log RANGE)
首先計算前綴和 prefix_sum(x) = a[0] + ... + a[x]
連續和就是 prefix_sum(j) - prefix_sum(i-1) 兩數相減的形式
這個東西可以套用 pairwise sum problem
http://en.wikipedia.org/wiki/Pairwise_summation
把第二個陣列頭尾顛倒一下,另外扣個常數,就是兩數相減的形式了
演算法大概是這樣:
1. 先用 O(n) 算前綴和
2. 再用 O(n + RANGE) 從循序儲存,換成索引儲存(counting sort那樣子)
3. 跑個 fourier transform 換到頻域去算,再換回來,總共 O(RANGE log RANGE)
然後這個板之前有個問題也可以這樣解
┌─────────────────────────────────────┐
│ 文章代碼(AID): #1FP0xbjA (Prob_Solve) [ptt.cc] [問題] 貌似Facebook面試題 │
│ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1331957477.A.B4A.html │
│ 這一篇文章值 39 Ptt幣 │
└─────────────────────────────────────┘
作者: suhorng ( )   2014-02-27 23:16:00
對答案二分搜O(n log n log RANGE), 不能說是 o(n^2) 就是...http://tioj.ck.tp.edu.tw/problems/1208 這裡可以傳~^^^^^ 這邊不確定一個 log 還兩個 log
作者: FRAXIS (喔喔)   2014-02-28 02:21:00
應該是一個log 沒錯
作者: DJWS (...)   2015-03-02 08:07:00
http://ppt.cc/voTH 用FFT算兩兩和是Jeff Erickson提的然後算法競賽有一些相關題目 用關鍵字FFT去找可以找到一些其他的我就不知道了 我沒有追蹤論文

Links booklink

Contact Us: admin [ a t ] ucptt.com