首页 > 代码库 > 学渣乱搞系列之后缀数组
学渣乱搞系列之后缀数组
学渣乱搞系列之后缀数组
by 狂徒归来
后缀数组,其nlogn的构造方法,比较麻烦,十几个循环,基数排序?计数排序?各种排序,各种凌乱,学渣表示鸭梨很大啊!学渣从《挑战程序设计竞赛》中偷学了一点nlog2n的构造方法。
字符串后缀(Suffix)是指从字符串的某个位置开始到其末尾的字符串子串。我们认为原串和空串也是后缀。
后缀数组(Suffix Array)指的是将某个字符的所有后缀按字典序排序后得到的数组。排序方式很多,时间复杂度也不同。有基数排序的倍增法o(nlogn),有DC3构造方法o(n),还有MF构造法等方法。今天我就学学最简洁但是时间复杂度稍高的构造方法,快排+倍增。o(nlog2n)的复杂度。代码量很少。
i | sa[i] | S[sa[i]...] |
0 | 11 | (空字符串) |
1 | 10 | a |
2 | 7 | abra |
3 | 0 | abracadabra |
4 | 3 | acadabra |
5 | 5 | adabra |
6 | 8 | bra |
7 | 1 | bracadabra |
8 | 4 | cadabra |
9 | 6 | dabra |
10 | 9 | ra |
11 | 2 | racadabra |
学渣乱搞系列之后缀数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。