后缀树构造算法理论分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
后缀树构造算法理论分析   摘要:后缀树的结构简单,但可以在线性的时间里解决许多复杂的问题,被大量的使用在字符串及树的模式匹配中。   关键词:后缀树;线性数组;PWOTD算法   中图分类号:TP311.12 文献标识码:A文章编号:1007-9599 (2011)05-0000-01   Theoretical Analysis of Suffix Tree Construction Algorithm   Li Jia1,Ding Lingmei2   (1.Puyang Vocational and Technical College,Puyang457001,China;2.Puyang Zi Lu Primary School,Puyang457001,China)   Abstract:The structure of suffix tree is simple,but it can solve many complex problems in linear time which have been widely used in the string and tree pattern matching.   Keywords:Suffix tree;Linear array;PWOTD algorithm   后缀树的结构简单,但可以在线性的时间里解决许多复杂的问题,被大量的使用在字符串及树的模式匹配中。尽管后缀树构造技术在现阶段没有被大范围的采用,构造后缀树的算法仍有着很悠久的历史。先前已经有许多科研人员的研究关注在了线性时间的后缀树构造算法上。这些算法都可以很好的适合那些小型数据的输入。   后缀树由一个线性数组表示,就像wotdeager算法里描述的一样。这个表达方法很紧凑,大约每个指针记号平均占8.5个字节。下图阐述了字符串ATTAGTACA$的后缀树以及这个后缀树相应的在内存中的数组表示。数组中的阴影入口表示叶子节点,其他所有的入口表示非叶子节点。入口右下角的R表示一个最右边的孩子。一个有分支的节点被两个整型数来表示。第一个是一个指向输入字符串的指针;指针的字符是输入的边缘标志的起始字符。标签的长度可以通过检查当前节点的孩子来减少。第二个入口指向第一个孩子。注意,叶子节点没有第二个入口。叶子节点只需要一个指向标志的启示指针;这个标志的末端是字符串的终结符。      PWOTD算法包括两个阶段:第一阶段,扫描整个字符序列,并且基于每个后缀的第一个前缀字符将后缀进行划分。第二阶段,对每一个划分执行以下命令:1.开始进行后缀树的构造;2.载入当前划分的后缀;3.用temp将这些后缀按第一个字母进行排序;4.输出分支和叶子节点到树;5.将指向未赋值范围的节点压入栈;6.弹出一个节点;7.通过检查整个字符序列,找到这个范围内所有后缀的最长公共前缀;8.用temp将这些后缀按第一个字母进行排序;9.写出分支和叶子节点到树;10.将指向未赋值范围的节点压入栈。   在第一阶段,我们将输入的字符串的后缀划分成|A|前缀划分,|A|是字符串的字典大小,前缀是划分的深度。划分的步骤按照如下执行:输入的字符串被从左至右进行扫描,在每一个指针位置i处,前缀后面的字符被用来决定|A|前缀的一个划分。他和个指针i然后被写入已经计算好的划分缓冲内。在扫描的最后阶段,每一个划分都会包含后缀中所有拥有相同前缀大小的前缀的后缀指针。为了更进一步的分析这个划分的步骤,考虑一下以下这个例子。将ATTAGTACA$这个字符串用一个1的前缀进行划分,会产生四个划分的后缀,每个符号的划分都存在于字典中。(我们忽略了最终的划分,那个被用来当作字符串终结符的符号$。)以A为划分的后缀划分为{0,3,6,8},表示{ATTAGTACA$,AGTACA$,ACA$,A$}的后缀。以T为划分的后缀划分为{1,2,5},表示{TTAGTACA$,TAGTACA$,TACA$}的后缀。   在第二阶段,我们用wotdeager算法来通过一个自顶向下的构建对每个划分建立后缀树。PWOTD算法的伪代码在表2中,尽管第一阶段的划分足够简单,第二阶段的wotdeager算法却需要引起我们足够的注意和更深入的讨论。现在我们用一个上述图为例来分析wotdeager算法。   PWOTD算法需要四种数据结构用来建立后缀树:一个输入字符串数组,一个后缀数组,一个临时数组,还有一个后缀树。在我们接下来的讨论中,我们将这些结构分别称为字符串、数组、临时和树。后缀数组首先被从一个被丢弃了第一个前缀字符的划分的后缀载入。以之前的相同的字符ATTAGTACA$串为例,考虑以T为划分的后缀数组的构造。这个划分的后缀分别位于位置1,2和5。当这些后缀共享着相同

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档