zoukankan      html  css  js  c++  java
  • 关于后缀自动机的一些思考

    别的都挺好理解的
    难以理解的那个地方还是clone节点的问题
    这里给一个非常好的例子
    asabab
    对这个字符串建立后缀自动机
    会在最后一个字符的时候出现克隆节点的情况
    仔细画一遍parent树应该就能理解了
    克隆节点的意义实际上是为了把原本的一个节点拆为两个节点
    为什么要拆呢
    因为字符串末尾新增一个字母后
    产生了一些新的子串
    这些子串有的在之前出现过
    然后使得有些子串的endpos集合发生了改变
    某些节点中
    并不是所有的串的endpos都改变了
    此时便不能再只用一个节点来表示这些子串
    因此需要拆点

    后缀自动机基础习题

    1.检查模式串是否出现
    沿着SAM的转移边跑一遍即可,如果最后没有到达空节点,则说明字符串出现

    2.计算模式串出现次数
    builds时令所有cnt[cur]=1
    然后parent树上节点x对应字符串的出现次数记为子树和
    用到的性质:
    1.x的儿子之间的endpos集合时无交集的
    2.前缀i和前缀j对应的节点一定不是同一个节点

  • 相关阅读:
    低调做人
    《论语》中发现的问题
    Magic
    雨中游桃花岛
    说完足球说篮球
    转发一个小游戏:看看自己像哪位名人?
    发几个脑筋急转弯题
    Cynthia 终于决定做SOHO
    我家楼上的故事
    上班苦于不能上msn、qq的朋友们有福了
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/13752250.html
Copyright © 2011-2022 走看看