【技术实现步骤摘要】
本专利技术涉及一种字符串后缀数组构造方法,尤其涉及一种通过计算机在线性时间内自动完成字符串后缀数组构造的方法。
技术介绍
字符串后缀数组是后缀树的一个节省空间的替代型数据结构,最先由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[j]组成的字符串。后缀字符串S的一个后缀 ...
【技术保护点】
一种后缀数组构造方法,其特征在于,它包括:步骤1)标记字符串中每个字符和后缀的类型:从右向左扫描一遍字符串S,按照后缀类型的定义比较当前扫描的两个相邻字符S[i]和S[i+1], 得出每一个字符和后缀的类型,用数组t来记录;步骤2)从左向右扫描一遍数组t,找出所有LMS字符出现的位置,从而获取所有LMS子串的首字母指针,用P1来记录每一个LMS子串的指针;步骤3)通过LMS子串指针数组P1、数组 B和SA来对S中所有的LMS子串进行排序;步骤4)根据步骤3)排序的结果重新命名字符串S中的各个LMS子串,形成一个缩短了的新串S1;步骤5)如果S1的每个字符都是唯一的,则直接排 ...
【技术特征摘要】
1.一种后缀数组构造方法,其特征在于,它包括:步骤1)标记字符串中每个字符和后缀的类型:从右向左扫描一遍字符串S,按照后缀类型的定义比较当前扫描的两个相邻字符S[i]和S[i+1], 得出每一个字符和后缀的类型,用数组t来记录;步骤2)从左向右扫描一遍数组t,找出所有LMS字符出现的位置,从而获取所有LMS子串的首字母指针,用P1来记录每一个LMS子串的指针;步骤3)通过LMS子串指针数组P1、数组 B和SA来对S中所有的LMS子串进行排序;步骤4)根据步骤3)排序的结果重新命名字符串S中的各个LMS子串,形成一个缩短了的新串S1;步骤5)如果S1的每个字符都是唯一的,则直接排序S1的各后缀来计算S1的后缀数组SA1,否则以S1和SA1作为输入参数递归调用SA-IS算法,即SA-IS(S1, SA1);步骤6)根据步骤5)中获得的S1的后缀数组 SA1归纳计算S的后缀数组SA;步骤7)返回。2.根据权利要求1所述的后缀数组构造方法,其特征在于,所述步骤 3)中对S中所有LMS子串进行排序的过程包括:31)初始化SA的所有元素为-1,找出S中所有后缀在SA中所属各桶的结束位置,从左向右扫描S一次,依次把扫描到的LMS后缀填入其在SA中所属桶的当前结束位置,然后再把该桶的结束位置向左移动一格;32)找出S中所有后缀在SA中所属各桶的起始位置,从左向右扫描SA数组,对于扫描到的每个不为-1的元素SA[i],如果S[SA[i]-1]是L型,则把SA[i]-1这个数值填入suf(S, SA[i]-1)这个后缀在SA中所属桶的当前起始位置,然后再把该桶的起始位置向右移动一格;33)找出S中所有后缀在SA中所属各桶的结束位置,从右向左扫描SA数组, 对于扫描到的每个元素SA[i],如果S[SA[i]-1]是S型,则把SA[i]-1这个数值填入su...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。