标签:style io strong ar 代码 log 时间 size sp
学渣乱搞系列之后缀数组
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 |
标签:style io strong ar 代码 log 时间 size sp
原文地址:http://www.cnblogs.com/crackpotisback/p/3930828.html