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对应的节点一定不是同一个节点

  • 相关阅读:
    算法视频库下载常用网址(转载)
    Python study 1
    $X-Real-Ip和$X-Forwarded-For的区别
    python装饰器
    python迭代器和生成器
    python函数动态参数详解
    python常用模块
    python 正则re模块
    pycharm5新版注册
    老男孩python自动化运维作业2
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/13752250.html
Copyright © 2011-2022 走看看