• 后缀自动机 个人学习笔记


    仅简单记录一些自己看得懂的东西

     

    后缀自动机大概就长这样(图源hihocoder)

    只看蓝色边就类似一棵字典树

    对于一个点,从起点能走到它的路径都是它的后缀,蓝色边就是next指针

    绿色边是fail指针

    一个结点表示的所有后缀在同一个endpos类,并且长度是连续的

    ↑ 所以子串的个数就是每个结点表示子串的个数和,也就是sum(maxlen-minlen+1)

    endpos(st)= endpos(x)+ endpos(y)+ 【st包含S的前缀】

    关于遍历SAM的Suffix Links,hihocoder的做法是拓扑排序,某谷上一位dalao的做法是fa[i]->i建树,其实那就是一棵树而且好像叶结点刚好是前缀点???

    关于SAM的fail指针指的是什么:指向parent tree的父结点,endpos(this)完全包含endpos(fa)

    经常看到有人代码里应该拓扑排序的地方看到有类似SA里面基数排序的东西。。。

    按照len桶排序之后也就是Parent树的BFS序/自动机的拓扑序(转自某谷一聚聚)

    容易感性的证明一下

    板子:

    1 for(int i=1;i<=tot;i++) t[len[i]]++;
    2 for(int i=1;i<=tot;i++) t[i]+=t[i-1];
    3 for(int i=1;i<=tot;i++) A[t[len[i]]--]=i;
    View Code

    关于广义后缀自动机:

    ?一键咕咕?

  • 相关阅读:
    详细,Qt Creator快捷键大全,附快捷键配置方法
    Qt Creator 你必须要掌握的快捷操作
    Linux 终端下颜色的输出
    Qt之JSON生成与解析
    Ubuntu配置和修改IP地址
    USB的VID和PID,以及分类(Class,SubClass,Protocol)
    fatal error: gst/gst.h
    VID、PID查询
    el表达式具体解释
    F
  • 原文地址:https://www.cnblogs.com/QAQorz/p/11574816.html
Copyright © 2020-2023  润新知