一种大规模字符串文本的后缀索引构造方法及装置的制造方法

文档序号:9579369阅读:264来源:国知局
一种大规模字符串文本的后缀索引构造方法及装置的制造方法
【技术领域】
[0001]本发明涉及后缀索引构造技术领域,尤其涉及一种利用计算机外存来构造大规模字符串文本后缀索引的方法及装置。
【背景技术】
[0002]后缀索引,也称为后缀数组(suffix array),是计算机科学中的一个重要数据结构,具有结构紧凑且空间占用小的特点,在全文检索、数据压缩、基因序列对齐和模式匹配等诸多领域具有广泛应用。任意给定一个字符串文本,简称为字符串,从字符串中的任意位置开始到该字符串结尾的所有字符组成一个字符子串,该子串称为字符串的后缀(suffix)。显然,长度为η的字符串包含η个后缀,对这η个后缀按字典顺序升序保存在一个整型数组中,该数组则称为字符串的后缀索引。
[0003]传统构造后缀索引技术需要把所有文本全部加载至内存,然后才能进行后缀索引构造。但近年来,基因数据库、互联网文本数据以及其它相关领域的文本数据规模不断扩大,普通计算机内存已无法一次性加载全部文本,这些传统索弓I构造技术显然已不再适用。

【发明内容】

[0004]本发明为克服上述现有技术所述的至少一种缺陷(不足),首先提供一种大规模字符串文本的后缀索引构造方法,使用户在普通计算机环境下(如:内存大小为4G)也能进行大规申吴字符串文本的后缀索引构造。
[0005]本发明的又一目的是提出一种大规模字符串文本的后缀索引构造装置,其实现了借助计算机外存对大规模字符串文本进行后缀索引构造。
[0006]为了实现上述目的,本发明采用如下技术方案:
一种大规模文本的后缀索引构造方法,所述方法包括:
收缩字符串Τ,得到新的字符串Τ1,Τ1的规模最多为Τ的一半;
以直接方式或递归方式构造Τ1的后缀索引;
扫描Τ1的后缀索引,得到Τ的后缀索引。
[0007]其中,所述收缩字符串Τ,得到新的字符串Τ1的具体过程为:
使用大规模字符串读取器分批读取字符串Τ,获取Τ中所有LMS子串,压入外存优先级队列容器Q1中。扫描Q1排序L子串,并使用子串命名单元对L子串和LMS子串进行命名,得到的有序L子串存放于外存优先级队列容器Q2中。扫描Q2中所有L子串排序S子串,并对S子串命名,得到有序S子串。提取S子串中所有LMS子串的名字,这些名字按照LMS子串在原字符串中的索引位置升序构成新的字符串Τ1 ;
所述LMS子串的识别方法为,该子串的首字符和尾字符均为LMS字符,首字符与尾字符之间不存在任何LMS字符;
所述LMS字符的识别方法为,当后缀为LMS后缀时,则该后缀所对应字符子串的首字符称为LMS字符; 所述LMS后缀的识别方法为,若当如后缀为S后缀,且字符串T中与当如后缀相邻的左手边第一个后缀为L后缀,则该后缀为LMS后缀;
所述L子串的识别方法为,子串的首字符为L字符,尾字符为LMS字符,且首字符与尾字符之间不存在任何LMS字符,则该子串为L子串;
所述L或S字符的识别方法为,若某后缀为L或S后缀,则该后缀所对应字符子串的首字符分别称为L或S字符;
所述S子串的识别方法为,子串的首字符为S字符,尾字符为LMS字符,且首字符与尾字符之间不存在任何LMS字符,则该子串为S子串;
所述L后缀、S后缀的识别方法为,先假定字符串最后一个字符为‘$’,该字符在整个字符串所包含的字符当中最小并且唯一,为S后缀;然后从字符串文本倒数第二个字符开始往前扫描,若当前字符比前一字符小,则该后缀为S后缀;或当前字符与前一字符相等且前一字符所对应的后缀为S后缀,则该后缀也为S后缀。除上述两种情况之外,后缀被识别为L后缀。
[0008]其中,所述构造字符串T1的后缀索引的过程为:
若字符串T1中所有字符都唯一,各字符的名称即为各后缀在后缀索引中的优先级次序,扫描字符串T1,每个索引位置生成相应的二元组:(T[i],i),g卩(字符名称,位置索引),将这些二元组全部压入外存排序器,按照字符名称排序,排序后取各字符对应的索引号存入数组,即得到T1的后缀索引,否则以T1为新的字符串输入参数,用递归方式构造T1的后缀索引。
[0009]其中,所述扫描T1的后缀索引,得到T的后缀索引的过程为:
使用大规模字符串读取器读取字符串T,识别其中的LMS后缀,根据T1的后缀索引,给相应的LMS后缀赋予优先级,并压入外存优先级队列容器Q1中;
扫描Q1,得到的有序L后缀,L后缀存放于外存优先级队列Q2中;
扫描Q2,得到有序S后缀序列;
归并所有L和S后缀,得到字符串T的后缀索引。
[0010]—种大规模文本的后缀索引构造装置,所述后缀索引构造装置包括大规模字符串文本读取器,后缀前驱信息处理器,前驱信息存储模块,LMS后缀识别器,L/S后缀识别器,子串命名单元,外存优先级队列容器,外存排序器和后缀索引存储模块;
大规模字符串读取器,用于顺序读取外存大规模字符串文本;
后缀前驱信息处理器,用于生成字符串文本中各后缀的前驱信息,并保存至外存容器;
其中,所述后缀前驱信息为一个元组,该元组包含了该后缀在字符串中的位置信息,前驱字符以及前驱字符距离。这里的前驱字符为:在字符串T中,后缀i对应的字符为T[i],T[i]左侧第一个不等于T[i]的字符称为后缀i的前驱字符,例如:某后缀与其前驱字符的距离为“0”,说明该后缀左侧第一个字符为其前驱字符;
前驱信息存储模块,一种外存容器,用于存放后缀前驱信息处理器所输出的各后缀前驱信息;
外存优先级队列容器,用于在外存上对字符子串或后缀进行排序,每次从该队列弹出的子串或后缀为当如队列中最小或最大子串或后缀; L/S后缀识别器,用于识别具体的后缀是L还是S后缀;
LMS后缀识别器,用于识别具体的后缀是否为LMS后缀;
子串命名单元,用于索引构造过程中,对字符子串进行命名,以便字符串规模的收缩; 外存排序器,一种外存容器,可对存入其中的对象按照指定关键字排序;
后缀索引存储模块,一种外存容器,用于存储后缀索引。
[0011]与现有技术相比,本发明具有以下的优点和积极效果:
本发明在后缀索引构造过程中至少配置大规模字符串读取器,后缀前驱信息处理器,LMS后缀识别器,两个外存优先级队列容器和外存排序器。这样,通过大规模字符串读取器读取字符串,通过LMS识别器识别字符串中的LMS子串或后缀,通过外存优先级队列容器实现子串或后缀的排序,最终完成大规申吴字符串文本的后缀索引构造。在索引构造过程中,利用了低成本的计算机外存资源,使得后缀索引构造不再受限于内存容量;从而在任意一台普通计算机环境下,本系统能完成超过该内存大小的字符串文本数据的后缀索引构造,突破了现有后缀索引构造技术方案的局限性。而且,本发明具有运行速度快、I/o量小和简单易行等优点。
【附图说明】
[0012]图1为本发明具体实施方案的方法流程图。
[0013]图2为本发明的装置结构示意图。
【具体实施方式】
[0014]附图仅用于示例性说明,不能理解为对本专利的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0015]本发明的基本思想是:将字符串文本中的后缀分为L后缀和S后缀,先通过外存优先级队列容器排序字符串中的LMS子串;在有序LMS子串的基础上,推导有序L后缀;在有序L后缀的基础上,推导有序S后缀;最后以桶为单位,归并L后缀和S后缀,输出后缀索引。这里的桶是指:后缀数组中具有相同首字符的后缀构成一块连续的区域,该区域称为桶。
[0016]在索引构造过程中,需要随时访问后缀的前驱字符,传统方法为,将所有字符串全部加载至内存,这样,在索引构造过程中可随机访问后缀的前驱字符;但在字符串规模较大,远远超过内存容量的情况下,这种处理办法已不再适用。
[0017]因此,本发明预先产生字符串各后缀的前驱信息,并对所有前驱信息元组排序,预先存放在外存容器。排序关键字为二元组:后缀的首字符和后缀位置索引,即先按首字符排序,然后按该后缀在源字符串中的位置索引值排序。
[0018]如前所述,具有相同首字符的后缀构成一块连续的区域,这个连续的区域称为桶,在索引构造过程中,也是按桶关键字有序扫描各后缀,因而在扫描过程中可以仅加载当前正在扫描的桶所包含的后缀的前驱信息,然后通过位置索引值来访问具体后缀的前驱信息,从而完成字符子串或者后缀的排序。
[0019]在索引构造过程当中,还需对L和S子串进行命名。命名过程如下:当排序L子串时,定义一个整型变量i,i初始化为0,每弹出一个后缀,i增加1。若当前子串与前一子串不等,当前子串被命名为当前变量i的值;若当前子串与前一子串相等,则当前子串的名字与前一子串相等。排序S子串时,命名方法与排序L子串一样,同样需要定义一个整型变量i,不同的地方是,i初始化为字符串的长度减1,即n-1,每弹出一个后缀,i自减1。
[0020]当得到有序S子串以后,取其中所有LMS子串(LMS子串属于S子串),统计LMS子串命名次数,若LMS子串的命名次数与其数目一样,说明字符串中各LMS子串是两两互异的,LMS子串的名字即为LMS子串的优先级;否则,字符串中存在相等的LMS子串,暂时无法确定其所对应的后缀大小关系;因此,必须提取各LMS子串的名字,按照其所对应的LMS后缀在字符串中的位置索引从小到大排列,构成一个新的字符串,计算该新字符串各后缀的前驱信息,排序L和S子串,以递归方式计算LMS子串的优先级次序。
[0021]当LMS子串有序,可通过外存优先级队列容器Q1,输出有序L后缀至Q2 ;然后在有序L后缀的基础上,通过Q2,输出有序S后缀,对L和S后缀按桶关键字归并,得到字符串的后缀索引。
[0022]基于以上所述,本发明实施例提供了一种通过计算机外存来构造大规模字符串文本的后缀索引的方法,参见图1,该方法包括如下步骤:
S101:获取后缀前驱信息;
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1