倍增算法求解字符串的后缀数组

来源:互联网 发布:软件开发者路线图 pdf 编辑:程序博客网 时间:2024/04/30 15:53

    今天完成了使用倍增算法求解字符串的后缀数组的程序。倍增算法的主要思想是:

对每个字符开始的长度为2k的子字符串进行排序,求出排名,即Rank值。k0开始,每次加1,当2k大于n以后,每个字符开始的长度为2k的子字符串便相当于所有的后缀。并且这些子字符串都一定已经比较出大小,即Rank值中没有相同的值,那么此时的Rank值就是最后的结果。每一次排序都利用上次长度为2k-1的字符串的Rank值,那么长度为2k的字符串就可以用两个长度为2k-1的字符串的排名作为关键字表示,然后进行基数排序,便得出了长度为2k的字符串的Rank值。

因为我们知道有Rank[i] = j 等价于 SA[j] = i;故可以利用这一点求出相应字符串的后缀数组。其时间复杂度是O(nlogn)。

 

 

 

该程序实现了后缀数组的O(nlogn)时间复杂度的求解。唯一的问题就是空间复杂度比paper中提到的要高。

原创粉丝点击