后缀数组
1.简介
后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。
2.后缀数组的构建
2.1构建后缀与名次数组
2.1.1倍增算法
倍增算法的主要思路是:用倍增的方法对每个字符开始的长度为 2^k的子字符串进行排序,求出排名,即 rank 值。k 从 0 开始,每次加 1,当 2^k大于 n 以后,每个字符开始的长度为 2^k的子字符串便相当于所有的后缀。并且这些子字符串都一定已经比较出大小,即 rank 值中没有相同的值,那么此时的 rank 值就是最后的结果。每一次排序都利用上次长度为 2^(k-1)的字符串的 rank 值,那么长度为 2^k的字符串就可以用两个长度为 2^(k-1)的字符串的排名作为关键字表示,然后进行基数排序,便得出了长度为 2^k的字符串的 rank 值。以字符串“aabaaaab”为例,整个过程如图 2 所示。其中 x、y 是表示长度为 2^k的字符串的两个关键字 。
2.2构建height数组
3.后缀数组的使用
4.参考文章
后缀数组——处理字符串的有力工具
nocow
http://www.cnblogs.com/staginner/archive/2012/02/02/2335600.html
INBUILDING
转载于:https://my.oschina.net/u/572632/blog/265324