后缀数组

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的字符串的两个关键字 。

后缀数组_第1张图片





2.2构建height数组


3.后缀数组的使用


4.参考文章

后缀数组——处理字符串的有力工具

nocow

http://www.cnblogs.com/staginner/archive/2012/02/02/2335600.html


INBUILDING

你可能感兴趣的:(后缀数组,TODO)