标签:
自己看着大牛的论文学了一下后缀数组,看了好久好久,想了好久好久才懂了一点点皮毛TAT
然后就去刷传说中的后缀数组神题,poj3693是进化版的,需要那个相同情况下字典序最小,搞这个搞了超久的说。
先简单说一下后缀数组。首先有几个重要的数组:
·SA数组(后缀数组):保存所有后缀排序后从小到大的序列。[即SA[i]=j表示排名第i的后缀编号为j]
·rank数组(名次数组):记录后缀的名次。[即rank[i]=j表示编号为i的后缀排名第j]
用倍增算法可以在O(nlogn)时间内得出这两个数组。
具体过程如下:
即每次长度增加一倍,直接用前面算出的排名作为关键字,问题转化为给有两个关键字的序列排序,这里可以用基数排序,每次排序时间为n,一共进行了logn次,所以总共时间复杂度为O(nlogn)。要注意如果一个字符串包含另一个字符串,长度小的较小,那就是说如果没有第二关键字,把第二关键字默认为0即可。具体如下:
【未完待续。。】
【poj3693】Maximum repetition substring(后缀数组+RMQ)
标签:
原文地址:http://www.cnblogs.com/Konjakmoyu/p/5040855.html