• 后缀自动机


    我就抄抄论文好了

    有限状态自动机其实是一个单词的有向无环图,图中包含了一个起始状态和一个结束状态集合,有向图的边上赋有权值。有限状态自动机的功能是识别字符串。

    自动机由五个部分组成,alpha:字符集,state:状态集合,init:初始状态,end:结束状态集合,trans:状态转移函数。

    不妨令trans(s,ch)表示当前状态是s,在读入字符ch之后,所到达的状态。

    如果trans(s,ch)这个转移不存在,为了方便,不妨设其为null,同时null只能转移到null。

    null表示不存在的状态。

    同时令trans(s,str)表示当前状态是s,在读入字符串str之后,所到达的状态。

    那么自动机A能够识别的字符串就是所有使得(trans(init,str)subset end)的字符串str,令其为Reg(A)。

    从状态s能够识别的字符串就是所有使得(trans(s,str)subset end)的字符串str,令其为Reg(s)。

    后缀自动机就是能够识别一个字符串的全部后缀的自动机,而如果直接构建后缀自动机复杂度将达到(O(n^2))

    最简状态后缀自动机就是状态数最少的能够完成上述功能的自动机,其状态数为线性。假设我们得到了这个最简状态后缀自动机,简记为SAM。

    我们令ST(str)表示trans(init,str),就是初始状态读入str后能够到达的状态。

    令母串为S,它的后缀集合为Suf,它的连续字串集合为Fac。

    从位置a开始的后缀为Suffix(a)。

    S[l,r)表示S中[l,r)这个区间构成的子串。下标从0开始。

    对于一个字符串s,如果s不属于Fac,那么ST(s)=null。因为在s后面加上任何字符都不是S的后缀了,我们要求状态最少,所以没有理由浪费空间。

    同时如果s属于Fac,那么ST(s)!=null,因为s既然是S的子串,那在s的后面加上一些子串,一定可以构成一个后缀。

    我们不能对每个子串都新建一个状态,因为这样状态数是n方的。

    我们考虑ST(a)能识别哪些字符串,即为Reg(ST(a))。

    字符串x能被自动机识别,当且仅当(xin Suf)

    ST(a)能够识别字符串x当且仅当(axin Suf),因为已经读入了a了。

    也就是说ax是S的后缀,所以x也是S的后缀。Reg(ST(a))是一些后缀集合。对于一个状态s,我们唯一关心的就是Reg(s)。

  • 相关阅读:
    利用深度学习网络自动给图像上色的文章和相关工程实现
    Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记
    (转) Dissecting Reinforcement Learning-Part.2
    (转) 多模态机器翻译
    编译caffe的Python借口,提示:ImportError: dynamic module does not define module export function (PyInit__caffe)
    (转)How Hash Algorithms Work
    深度学习 目标检测算法 SSD 论文简介
    (转)能根据文字生成图片的 GAN,深度学习领域的又一新星
    (转) Face-Resources
    (转) AdversarialNetsPapers
  • 原文地址:https://www.cnblogs.com/shanxieng/p/10050237.html
Copyright © 2020-2023  润新知