zoukankan      html  css  js  c++  java
  • 「学习笔记」字符串大礼包

    KMP

    (f[i])表示(1)(i)最长的后缀等于前缀的长度。容易证得每次(f)最多(+1)且保持非负,然后复杂度就是(O(n))的。匹配当成拼接在原串后面继续计算f数组。

    Z-Algorithm or exKMP

    (z[i])表示(i)开始的最长的等于原串前缀的长度。暴力扩展是(O(n^2))的,每次记录一个最右的等于某前缀的串([l, r])(i leq r)就从(min(r - i + 1, z[i - l + 1]))开始扩展,否则从(0)开始。能证每次扩展(r)都要向右移动,所以复杂度(O(n))

    AC Automaton

    构建( ext{fail})的基本思想是对于结点(u)(c)走到达的子节点(v),不断跳(u = ext{fail}[u]),直到存在往(c)走的路,然后( ext{fail}[v] = ext{fail}[ ext{ch}[u][c]])。然而这一过程可以简化,某个点没有往(c)走的边,就连到( ext{fail})(c)走的边。这样补成( ext{trie})图,就能线性时间完成计算。

    AC自动机有很多好的性质。比如从(u)(对应串(S))沿着(ch)一直走,每次得到的串(T)(S)后缀和(T)前缀的最大重叠长度是递减的。

  • 相关阅读:
    Asp.Net-Mvc——短信验证码
    C#-Mvc-表白墙(随机数)
    C#-折线图-从数据库中读取数据
    C#-Mvc-修改密码
    C#-Mvc-产品分页
    ECharts查询用户点击次数
    ECharts-条形图制作
    设置当前登录用户问题
    sql执行计划
    SQL中CUBE 用法
  • 原文地址:https://www.cnblogs.com/hongzy/p/11299072.html
Copyright © 2011-2022 走看看