O(n)线性构造后缀树详解(二)

声明: 此为 Esko Ukkonen 论文翻译,由于本人才疏学浅,为了使用后缀树来进行DNA匹配,翻译此论文,完全是顺带之举,如有错误,请见谅!同时也是发现网上类似资料都不完整,顾发出翻译原版论文来,仅供学习交流之用。

其实我多想用Latex来翻译排版的,不过为了发出来交流,排版系统也就没有用了。

欢迎大家前来研讨!

O(n)线性构造后缀树详解(一):http://www.cnblogs.com/greenhat/archive/2012/11/28/2790585.html

3. 后缀树

      后缀树image是一种数据结构,表示字符串长度为image的线性空间的imageimage的获得仅需通过image的状态的子集image。我们把在image中的状态叫做明确状态(explicit states)。集合image是由image所有分支状态(从该状态至少有2个转换)和所有叶子状态组成(该状态无法继续转换)。由定义可知,root是包含在分支状态的。image的其他状态(该状态不像root 和image有确切的转换)被称为隐式状态(implict states),在image不会被明确提出。

如图:(来自李家同学生讲稿)

image

     通过在image中两个明确状态s和r的转换路径(字符串w)来生成image的转换函数image。为了节约空间,字符串w对于T来说,实际上代表一对指针(k,p)(k为左指针,p为右指针,image)。通过这种方式生成转换来得到image

     这种指针存在的原因是因为这儿必须存在后缀imageimageimage转换路径由s到r。我们选择最小的 i,让k和p指向image的子串(通过s到r的路径来阐述)。如果image,转换函数image被称为a–transition。每个s最多有一个a–transition image)。

     转换函数image以相似的方式来表述: imageimage。对于j = 1,…,m, image表示imageimage。当image时,image最多包含image个分支状态。在image中的状态,最多image次转换。因为使用指针来代替确切的字符串,所以每个花费的都是常量空间。(这里我们假定标准的RAM(random acess memory模型,一个指针占有常量的空间)。

     我们再次通过后缀函数image来扩展结构,现在我们只对image的所有分支状态定义为image,y是一个分支状态,所以imageimageimage是意义明确的:如果image是一个分支状态,那么image也是一个分支状态。这些后缀链被明确的表示。有时候隐式后缀链(implicit suffix links)也是有帮助的, 也就是,隐式状态之间的后缀链。

     T的后缀树被表示为image

     我们通过reference pair(s,w)指定后缀树的明确状态或者隐式状态r, s 是r的先祖中某个明确状态,w对应从s到r转换的字符串。如果s是最接近r的先祖(因此,w是最短的),那么引用对是规范的。对于一个明确状态r规范的引用对明显是image。我们把字符串w表示成image指针对(image)。通过这种方式,引用对image得到image的形式。image表示为image

     为了技术实现上的方便,忽略后缀树定义的最终状态。在一些应用程序中,当最终的明确状态是需要的时候,通过给T加上结束的标记符(T中的其他位置不存在)来得到。T的后缀树的子叶与T的后缀一一对应,构成了最终状态集合。另一种可能是通过从子叶image到root遍历后缀链路径,在路径上的所有状态都是明确的,这些状态是image的最终状态。在image的许多应用中,每个后缀的开始位置被存储与状态对应。这样的扩展树能够当作寻找T的任何子串的索引来使用。

 

第二部分到处结束,最好一部分将于近期上传!!!!

本部分总结

来自李家同教授学生的演讲稿:

image

 

image

 

image

image

image

image

image

posted on 2012-12-03 12:05  greenhat  阅读(1408)  评论(0编辑  收藏  举报

导航