后缀自动机-杭州外国语学校.pptVIP

  • 7
  • 0
  • 约2.73千字
  • 约 57页
  • 2018-08-29 发布于广东
  • 举报
后缀自动机的定义 给定字符串S S的后缀自动机suffix automaton(以后简记为SAM)是一个能够识别S的所有后缀的自动机。 即SAM(x) = True,当且仅当x是S的后缀 同时后面可以看出,后缀自动机也能用来识别S所有的子串。 最简单的实现 考虑字符串”aabbabd” 我们可以讲该字符串的所有后缀 插入一个Trie中,就像右图那样。 那么初始状态就是根,状态转移 函数就是这颗树的边,结束状态 集合就是所有的叶子。 最简状态后缀自动机 顾名思义,就是状态数最少的后缀自动机,在后面可以证明它的大小是线性的,我们先来看一些性质。 假如我们得到了这个最简状态后缀自动机SAM。 我们令ST(str)表示trans(init,str)。就是初始状态开始读入字符串str之后,能到达的状态。 分析 分析 分析 分析 状态数的线性证明 状态数的线性证明 状态数的线性证明 一些性质 一些性质 关于子串的性质 由于每个子串都必然包含在SAM的某个状态里。 那么一个字符串s是S的子串,当且仅当,ST(s)!=null 那么我们就可以用SAM来解决子串判定问题。 同时也可以求出这个子串的出现个数,就是所在状态Right集合的大小。 关于子串的性质 在一个状态中直接保存Right集合会消耗过多的空间,我们可以发现状态的Right就是它Parent树中所有孩子Right集合的并集,进一

文档评论(0)

1亿VIP精品文档

相关文档