参考:

从前缀树谈到后缀树

后缀树

Suffix Tree—后缀树

字典树(trie树)、后缀树

一.前缀树

简述:又名单词查找树,tries树,一种多路树形结构,常用来操作字符串(但不限于字符串),和hash效率有一拼(二者效率高低是相对的,后面比较)。

性质:不同字符串的相同前缀只保存一份。

操作:查找,插入,删除。

举个例子:

假设有这么几个单词

(1)

把它存入一棵前缀树后

(2)

二.后缀树

简介:后缀树,就是把一串字符的所有后缀保存并且压缩的字典树。相对于字典树来说,后缀树并不是针对大量字符串的,而是针对一个或几个字符串来解决问题,

比如字符串的回文子串,两个字符串的最长公共子串等等,后面应用会说。

性质:一个字符串构造了一棵树,树中保存了该字符串所有的后缀。

操作:就是建立和应用。

1.建立后缀树

比如单词banana,它的所有后缀显示到下面的。1代表从第一个字符为起点,终点不用说都是字符串的末尾。

以上面的后缀,我们建立一颗后缀树。如下图,为了方便看到后缀,我没有合并相同的前缀

(3)

前面简介的时候我们说了,后缀树是把一个字符串所有后缀压缩并保存的字典树。

压缩一会再说,简介里面说了是字典树,所以我们把字符串的所有后缀还是按照字典树的规则建立,就成了上图(3)的样子。

注意还是和字典树一样,根节点必须为空。

下面说下更加节省空间的方案,也就是上面提到的压缩。

(4)

因为有些后缀串可能是单串,并不和其他的共用同一个前缀。

比如图(4)的banana这个后缀串,直接可以用1来表示起点,终点是默认的。

图(4)的a节点后面有两个节点标记3和5是右边字符数组的下标,对应着a->3-7,a->5-7。因为a是共有的前缀。

后缀树(suffix tree)的更多相关文章

  1. 后缀树(Suffix Trie)子串匹配结构

    Suffix Trie 又称后缀Trie或后缀树.它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的.比如.完整字符串"minimize"的后缀子 ...

  2. Trie树(代码),后缀树(代码)

    Trie树系列 Trie字典树 压缩的Trie 后缀树Suffix tree 后缀树--ukkonen算法 Trie是通过对字符串进行预先处理,达到加快搜索速度的算法.即把文本中的字符串转换为树结构, ...

  3. 后缀树(Suffix Tree)

          问题描述:               后缀树(Suffix Tree)   参考资料: http://www.cppblog.com/yuyang7/archive/2009/03/29 ...

  4. 笔试算法题(40):后缀数组 & 后缀树(Suffix Array & Suffix Tree)

    议题:后缀数组(Suffix Array) 分析: 后缀树和后缀数组都是处理字符串的有效工具,前者较为常见,但后者更容易编程实现,空间耗用更少:后缀数组可用于解决最长公共子串问题,多模式匹配问题,最长 ...

  5. Suffix Tree(后缀树)

    这篇简单的谈谈后缀树原理及实现. 如前缀树原理一般,后缀trie树是将字符串的每个后缀使用trie树的算法来构造.例如banana的所有后缀: 0: banana 1: anana 2: nana 3 ...

  6. Suffix树,后缀树

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. Trie / Radix Tree / Suffix Tree

    Trie (字典树) "A", "to", "tea", "ted", "ten", "i ...

  8. [转载]字典树(trie树)、后缀树

    (1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...

  9. 广义后缀树(GST)算法的简介

    导言 最近软件安全课上,讲病毒特征码的提取时,老师讲了一下GST算法.这里就做个小总结. 简介 基本信息  广义后缀树的英文为Generalized Suffix Tree,简称GST. 算法目的   ...

随机推荐

  1. JS中的prototype

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  2. margin padding

    margin and padding有时候可以实现相同的效果但是 用padding的场合更多 2者的区别和用法的细节我还是没掌握好

  3. 突击战UVa11729Commando War

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=117&page= ...

  4. [转]ping检测网络连接异常

    转载地址:http://blog.csdn.net/feizxiang3/article/details/26672781 一般来说当出现网络无法连接时,习惯性的用ping命令来ping某个ip地址, ...

  5. delphi XE 5 Android 真机调试简易安装教程

    ① FireMonkey[DELPHI XE5]QQ群号:165232328,群内超过1600移动开发爱好者 第一步,打开手机中的USB调试 电脑自动装驱动,但是找不到 去手机官网下载驱动 手动安装驱 ...

  6. Uva 11354 LCA 倍增祖先

    题目链接:https://vjudge.net/contest/144221#problem/B 题意:找一条从 s 到 t  的路,使得瓶颈路最小. 点的数目是10^4,如果向之前的方案求 maxc ...

  7. Android first --- 单元测试框架junit

    #单元测试junit* 定义一个类继承AndroidTestCase,在类中定义方法,即可测试该方法 * 在指定指令集时,targetPackage指定你要测试的应用的包名 <instrumen ...

  8. Web Performance Test : 为Request的Post参数名添加XPath支持

    问题描述 本文的标题看起来有些含糊其辞,这里我需要把问题阐述得更加清楚.这是我们使用VSTS进行Web Performance Test时,Asp.net造成的特定问题(也许其他开发工具或插件也会造成 ...

  9. [转]表结构设计器EZDML介绍说明(包含修改配置文件,修改文本字段属性)

    超轻量级的表结构设计工具,这是一个数据库建表的小软件,可快速的进行数据库表结构设计,建立数据模型.类似大家常用的数据库建模工具如PowerDesigner.ERWIN.ER-Studio和Ration ...

  10. Nginx添加到windows服务

    在windows平台,把Nginx注册到服务,又可以启动.停止和重启的方法,网上并没找到好的办法. 既然如此,唯有自己写程序实现了 使用C#进行编写,有兴趣的可以下载源码自己改:源码下载(2016-1 ...