zoukankan      html  css  js  c++  java
  • 后缀树(suffix tree)

    参考:

    从前缀树谈到后缀树

    后缀树

    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是共有的前缀。

  • 相关阅读:
    作业6
    作业8
    作业7
    作业5
    作业4
    作业3
    作业2
    作业1
    浏览器跨域的细节
    解析node-cors模块
  • 原文地址:https://www.cnblogs.com/leezx/p/6232090.html
Copyright © 2011-2022 走看看