后缀树介绍-Suffix Tree

本文介绍了后缀树(Suffix Tree)这一数据结构,用于高效地解决字符串匹配问题。后缀树能快速实现查找字符串A是否在字符串B中、计算子串重复次数、查找最长重复子串、最长公共子串以及最长回文子串等。文章还简述了后缀树的构造过程,包括暴力构造和线性时间构造,并提及其在生物学碱基配对问题中的应用。
摘要由CSDN通过智能技术生成

   前面的文章中有讲解了模式匹配相关的KMP和TrieTree,他们有各自的方式去提高性能,从而也应用在不同的场景中,这一次我们讲解后缀树(SuffixTree),相信如果没有专门去看过这些知识的同学应该很少知道后缀树,那么后缀树到底是什么,他能解决什么样的问题呢?

    后缀树(SuffixTree)一种数据结构,通过对一个字符串所有后缀操作构建一棵树,可以支持字符串的快速匹配查询,他对于以下几个字符串问题可以做到快速实现。

1>    查找字符串A是否在字符串B中,也就是常规的字符串查找问题。

2>    计算给定的字符串A在字符串B中重复出现的次数。也就是子串重复的次数。

3>    查找字符串A的最长重复子串。

4>    查找字符串A和字符串B的最长公共子串。不是LCS问题哦!

5>    查找字符串A的最长回文子串。

6>    其实SuffixTree最常用的地方是生物学的碱基配对问题.

 

     那看了上述问题,我们来讲解后缀树的结构,后缀树顾名思义是要用到字符串的后缀,先来说明下什么是后缀,比如有一个字符串dream,那么他的后缀有很多个,分别是dream它本身,ream,eam,am,m,还有一个空字符串当然也是他的后缀。他的后缀集合为:dream=suffix{dream, ream, eam, am,m,空串}。我们构建一个后缀树就要利用到这些后缀来构建一压缩的trie树,也就是Compacted Trie(将trie上单个子节点的路径进行压缩即可得到)。

      先看一个CompactedTrie的构建。假设我们的有字符串abc, abd, def我们首先用这些字符串构建一个Trie如下所示:

                               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值