zoukankan      html  css  js  c++  java
  • 后缀数组与后缀自动机学习笔记

    这只是个人小结,没啥大意义。

    后缀数组

    其实就是通过把字符串的所有后缀排序来实现一些东西。

    后缀排序可以用倍增+双关键字来实现。

    然后排完之后可以求出height数组,然后就可以用RMQ求LCA了。

    后缀自动机

    各种复杂度都是线性的,非常优秀。

    原理:把具有相同right集合的状态缩成一个点,这个点内的所有状态互为后缀。

    每个状态有一个minlen和maxlen,表示这个状态内的最长子串和最短子串。

    构造方法:增量构造法,考虑这个字符的加入会使之前的所有后缀增加一个字符,所以可以通过调fail树来构造。

    然后就是father的问题,如果l[p]+1=l[q]那么可以直接连father,否则直接连状态会出现问题,那么我们就新建立一个节点。

    应用:

    1、求某个子串在原串中的出现次数,在后缀节点上大标记,该子串代表的节点子树的size就是出现次数。

  • 相关阅读:
    sql server 分页
    省市区
    省市
    sql server 中英混合排序
    C# 添加大量sql
    小程序小数的输入判定
    C# Files 的值“<<<<<<< .mine”无效。路径中具有非法字符。
    vagrant安装遇到的问题
    vagrant安装使用
    tp6 session问题
  • 原文地址:https://www.cnblogs.com/ZH-comld/p/10159065.html
Copyright © 2011-2022 走看看