#13145: O(n) 演算法


xavier13540 (柊 四千)

學校 : 國立臺灣大學
編號 : 21783
來源 : [36.230.29.43]
最後登入時間 :
2024-07-06 14:41:17
c425. 字典序第K小旋轉 | From: [140.112.229.87] | 發表日期 : 2017-12-17 20:03

將輸入的原字串s[1n]和自身做concatenation 得到t[12n]=s[1]s[2]s[n]s[1]s[2]s[n]
我們要找一個1in使得t[i2n]t[12n],t[22n],,t[n2n]中字典序第K小的
這可以透過對t做suffix array (SA)得到
只要在O(n)時間建立好SA 這題應該都能在5秒內跑完
我的SAIS演算法跑了1.3初音島IIIDC3演算法跑了3.9

使用doubling建立SA 時間複雜度是O(nlogn) 經過測試確定在ZJ上無法在30秒內跑完
另外 雖然我沒有測試suffix tree的建立時間 因為它的時間複雜度是O(|Σ|n)(其中Σ為字元集) 應該也是會TLE的

由於坊間(?)要用到SA的題目 大多用O(nlogn)的演算法便綽綽有餘 決定放這題上來
如果有人有SA以外的做法也歡迎提出

 
ZeroJudge Forum