码迷,mamicode.com
首页 > 编程语言 > 详细

【poj3693】Maximum repetition substring(后缀数组+RMQ)

时间:2015-12-12 11:02:32      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

        自己看着大牛的论文学了一下后缀数组,看了好久好久,想了好久好久才懂了一点点皮毛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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!