【技术实现步骤摘要】
本专利技术涉及一种字符串后缀数组构造方法,尤其涉及一种通过计算机在线性时间内利用基数排序自动完成字符串后缀数组构造的方法。
技术介绍
字符串后缀数组是后缀树的一个节省空间的替代型数据结构,最先由Manber和Myers在文献【1,2】中提出,可以在更小的空间内实现等同后缀树的算法。后缀数组在数据索引和模式匹配等应用中有广泛用途。本文专利技术了一个新的后缀数组构造算法,利用基数排序和“切分-合并”方法在线性时间内为任意给定的字符串构造其后缀数组。在本文的陈述中用到以下术语:字符集一个字符集∑是一个建立了全序关系的集合,即∑中任意两个不同的元素α和β都可以比较大小,要么α<β,要么α>β。字符集∑中的元素称为字符,其中最小的字符为‘$’。本文所涉及的字符集大小假设为一个常数O(1)。字符串一个长度为n的字符串S是将n个属于字符集∑中的字符按其位置依次排列形成的数组S[0..n-1],S的结束符固定为‘$’,并且‘$’不在S中的其它位置出现。子串字符串S的子串S[i..j],i≤j,表示S串中从位置i到位置j的一段字符串,也就是由字符S[i],S[i+1],...,S ...
【技术保护点】
一种基于基数排序的字符串后缀数组构造方法,其特征在于,它包括:1)标记字符串中每个字符和后缀的类型,从右向左扫描一遍字符串S,按照后缀类型的定义比较当前扫描的两个相邻字符S[i]和S[i+1], 得出每一个字符和后缀的类型,用数组t来记录;2)从左向右扫描一遍数组t,找出所有d-字符出现的位置,从而获取所有d-子串的首字母指针,用P1来记录每一个d-子串的指针;3)通过d-子串指针数组P1、数组 B和SA来对S中所有的d-加权子串进行基数排序;4)根据3)排序的结果重新命名字符串S中的各个d-加权子串,形成一个缩短了的新串S1;5)如果S1的每个字符都是唯一的,则直接排序S ...
【技术特征摘要】
1.一种基于基数排序的字符串后缀数组构造方法,其特征在于,它包括:1)标记字符串中每个字符和后缀的类型,从右向左扫描一遍字符串S,按照后缀类型的定义比较当前扫描的两个相邻字符S[i]和S[i+1], 得出每一个字符和后缀的类型,用数组t来记录;2)从左向右扫描一遍数组t,找出所有d-字符出现的位置,从而获取所有d-子串的首字母指针,用P1来记录每一个d-子串的指针;3)通过d-子串指针数组P1、数组 B和SA来对S中所有的d-加权子串进行基数排序;4)根据3)排序的结果重新命名字符串S中的各个d-加权子串,形成一个缩短了的新串S1;5)如果S1的每个字符都是唯一的,则直接排序S1的各后缀来计算S1的后缀数组SA1,否则以S1和SA1作为输入参数递归调用SA-IS算法,即SA-DS(S1, SA1);6)根据5)中获得的S1的后缀数组 SA1归纳计算S的后缀数组SA;7)返回。2.根据权利要求1所述的基于基数排序的字符串后缀数组构造方法,其特征在于,所述步骤 3)中对S中所有d-加权子串进行基数排序的过程包括:31)对所有d-加权子串的最后一个字符进行两轮基数排序:先根据每个字符的类型进行基数排序,然后再根据每个字符的大小进行基数排序;32)在步骤31)的排序结果上,继续对所有d-加权子串根据它们的前d+1个字符进行基数排序:从每个d-加权子串的倒数第二个字符开始到第一个字符结束,每轮根据一个字符排序,总共排d+1轮。3.根据权利要求2所述的基于基数排序的字符串后缀数组构造方法,其特征在于,所述步骤 4)中计算新字符串S1的步骤包括:41)从左向右扫描SA数组中已排序的所有d-加...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。