参考:

从前缀树谈到后缀树

后缀树

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. Linux字符界面安装VMware tools

    以往用VMware虚拟机都是装的桌面版,无奈实验室电脑属于老爷机,跑桌面linux实在有点吃不消,只能装个Basic Server玩玩了... 在桌面环境下装VMwaretools很简单,直接点击VM ...

  2. Jquery插件Ztree使用所遇问题

    问题1.$.fn.zTree为空或为Undefined 我在MVC中引用Jquery插件Ztree的JS并不存任何问题,而当我将Ztree的js引入项目中,就出现$.fn.zTree为空或为Undef ...

  3. oracle事物

    要想解释oracle事物的工作流程,首先先解释几个小概念:       1.undo段的组成:段头.回滚块       2.事物ID:每一个事物都有一个自己的事物ID,就像身份证号一样. 在v$tra ...

  4. 分享一个延迟加载图片的JS

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. python核心编程学习记录之执行环境

  6. 从svn资源库目录checkout出maven项目方法

    从svn资源库目录checkout出maven项目方法,如下图所示:

  7. sql的各种join连接

    SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- ...

  8. libevent源码分析:time-test例子

    time-test例子是libevent自带的一个例子,通过libevent提供的定时事件来实现,间隔固定时间打印的功能. /* * gcc -g -o time-test time-test.c - ...

  9. Markdown使用指南(1)——基础语法

    [TOC] Markdown使用指南 标题 # 这是一级标题 ## 这是二级标题 ### 这是三级标题 ###### 这是六级标题 引用 > 这是一级引用 >> 这是二级引用 > ...

  10. javascript 变量提前

    1. 未声明变量时,结果是我们预期的结果,报错这个变量没有定义. (function() { // 报错:variable is not defined console.log(variable); ...