[发明专利]基于基数排序的字符串后缀数组构造方法无效
申请号: | 201110029013.8 | 申请日: | 2011-01-27 |
公开(公告)号: | CN102073740A | 公开(公告)日: | 2011-05-25 |
发明(设计)人: | 农革 | 申请(专利权)人: | 农革 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 广州凯东知识产权代理有限公司 44259 | 代理人: | 宋冬涛 |
地址: | 510630 广东省广州市广州*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 基数排序 字符串 后缀 数组 构造 方法 | ||
技术领域
本发明涉及一种字符串后缀数组构造方法,尤其涉及一种通过计算机在线性时间内利用基数排序自动完成字符串后缀数组构造的方法。
背景技术
字符串后缀数组是后缀树的一个节省空间的替代型数据结构,最先由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的一个后缀是指从某个位置i开始到结束符$的一个子串。从第i个字符开始的后缀表示为suf(S,i),也就是suf(S,i)=S[i..n-1]。
字符和后缀类型S中的字符分为L和S两种类型:
1)‘$’为S类型;
2)S[i],i∈[1,n-1]为S类型,当且仅当suf(S,i)<suf(S,i+1),即S[i]<S[i+1]或者S[i]=S[i+1]且S[i+1]为S型。
3)S[i],i∈[1,n-1]为L类型,当且仅当suf(S,i)>suf(S,i+1),即S[i]>S[i+1]或者S[i]=S[i+1]且S[i+1]为L型;
4)后缀suf(S,i)是S类型当且仅当字符S[i]为S类型;后缀suf(S,i)是L类型当且仅当字符S[i]为L类型。
LMS(leftmost S-type,最左S类型)字符和后缀
1)‘$’为LMS字符;
2)S[i],i∈[1,n-1]为LMS字符,当且仅当S[i]为S类型且S[i-1]为L类型;
3)后缀suf(S,i)是LMS后缀当且仅当字符S[i]为LMS字符。
LMS子串
1)‘$’为LMS子串;
2)S[i..j]为LMS子串,当且仅当1≤i<j<n,S[i]和S[j]同为LMS字符,且S[i]和S[j]之间不存在其他LMS字符。
指针数组指针数组P1记录字符串S中所有LMS子串的首字母所在的位置,即P1[i]记录字符串S中(从左到右)第i+1个LMS子串的首字母在S中的位置。
字符串大小比较两个字符串的大小比较,是指通常所说的“字典顺序”比较,亦即对于两个字符串u和v,令i从0开始顺次比较u[i]和v[i]。如果u[i]=v[i]则令i加1再继续比较下一个u[i]和v[i],否则若u[i]<v[i]则认为u<v,或者u[i]>v[i]则认为u>v。
后缀数组S的后缀数组SA是一个包含n个整数的一维数组,对于i∈[0,n-1]满足suf(S,SA[i])<suf(S,SA[i+1])。也就是将S的n个后缀从小到大进行排序之后把排好序的各后缀首字母在S中的位置从左到右顺次放入SA中。
d-字符字符串S中的字符S[i]是d-字符,d≥2,当且仅当满足以下条件:
1)S[i]是一个LMS字符;或者
2)S[i-d]是d-字符,S[i+1]不是LMS字符,并且子串S[i-d+1..i-1]内没有d-字符。
d-子串对S中的每个d-字符S[i],d≥2和i<n-d-1,子串S[i..i+d+1]称为一个d-子串。如果i≥n-d-1,则S[i..i+d+1]=S[i..n-2]{S[n-1]}d+1-(n-2-i),其中{S[n-1]}x表示把字符S[n-1]重复x次所构成的字符串。
指针数组指针数组P1记录字符串S中所有d-子串的首字母所在的位置,即P1[i]记录字符串S中(从左到右)第i+1个d-子串的首字母在S中的位置。
加权字符字符串S中的字符S[i]的加权字符定义为Sw[i]=2S[i]+t[i]。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于农革,未经农革许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110029013.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:智能监控系统和方法
- 下一篇:SQL语句的检测方法、系统及服务器