后缀数组

1.简介

       后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个很是精巧的替代品,它比后缀树容易编程实现,可以实现后缀树的不少功能而时间复杂度也并不逊色,并且它比后缀树所占用的内存空间小不少。能够说,在信息学竞赛中后缀数组比后缀树要更为实用。html

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工具


INBUILDINGspa

相关文章
相关标签/搜索