首页 > 代码库 > 学渣乱搞系列之后缀数组

学渣乱搞系列之后缀数组

学渣乱搞系列之后缀数组

            by 狂徒归来

  后缀数组,其nlogn的构造方法,比较麻烦,十几个循环,基数排序?计数排序?各种排序,各种凌乱,学渣表示鸭梨很大啊!学渣从《挑战程序设计竞赛》中偷学了一点nlog2n的构造方法。

字符串后缀(Suffix)是指从字符串的某个位置开始到其末尾的字符串子串。我们认为原串和空串也是后缀。

后缀数组(Suffix Array)指的是将某个字符的所有后缀按字典序排序后得到的数组。排序方式很多,时间复杂度也不同。有基数排序的倍增法o(nlogn),有DC3构造方法o(n),还有MF构造法等方法。今天我就学学最简洁但是时间复杂度稍高的构造方法,快排+倍增。o(nlog2n)的复杂度。代码量很少。

"abracadabra"对应的后缀数组
isa[i]S[sa[i]...]
011(空字符串)
110a
27abra
30abracadabra
43acadabra
55adabra
68bra
71bracadabra
84cadabra
96dabra
109ra
112racadabra

 

 

学渣乱搞系列之后缀数组