首页 > 其他分享 >KMP 自动机

KMP 自动机

时间:2022-12-19 17:35:43浏览次数:47  
标签:自动机 复杂度 KMP delta mathcal pi

相当于 \(\pi\) 函数(KMP 中的 next 数组)的扩展。

\(\delta(i,c)\) 表示在 KMP 匹配过程中当模式串指针在 \(i\) ,接受字符 \(c\) 后模式串指针所处的位置。
则 KMP 过程中模式串指针可以被描述为 \(\delta(0,s[1]),\delta(\delta(1,s[1]),s[2]),\cdots\)

借助 KMP 自动机,我们可以将单次转移时间由均摊 \(\mathcal O(1)\) 变为严格 \(\mathcal O(1)\)。可以在当基于均摊复杂度的 KMP 转移无法保证复杂度时(CF808G)作为替代品。

为了方便在模式串被完全匹配时转移,常在最后加入一个不在字符集中的字符 \(\#\) (建议设为 \0

考虑构建 KMP 自动机。
一个暴力的做法是利用 \(\pi\) 函数暴力跳,然而复杂度最坏是 \(\mathcal O(n^2|\Sigma|)\)
考虑到当跳到 \(\pi[i]\) 时,后面的过程已被求解 \(\delta(\pi[i],c)\) 时所重复。所以只需要跳一次即可。

\[\delta(i,c)=\begin{cases} i+1 &s[i+1]=c \\ 0 &s[1]\not=c\land i=0 \\ \delta(\pi[i],c) &\mathrm{Otherwise} \end{cases}\]

时空复杂度 \(\mathcal O(n|\Sigma|)\)。

标签:自动机,复杂度,KMP,delta,mathcal,pi
From: https://www.cnblogs.com/pref-ctrl27/p/16992644.html

相关文章

  • 「双指针/kmp」通过连接另一个数组的子数组得到一个数组(力扣第1764题)
    本题为12月17日力扣每日一题题目来源:力扣第1764题题目tag:双指针kmp题面题目描述给你一个长度为n的二维整数数组groups,同时给你一个整数数组nums。你是否可以从n......
  • 回文自动机,PAM
    回文自动机。或者叫回文树。这坑我放了一百年没填了。结构回文自动机的每个节点都代表一个回文子串。它有两个起始状态:奇根和偶根。它们是奇回文串和偶回文串的起点,不代......
  • kmp算法比较次数|next
    首先算出子串next序列(前文有讲)再而开始子串比较,比较次数为整个子串,遇到首个不同字符时,后移个数为:已经匹配个数-不同字符对应next值,再次比较计数从上次不同字符起视频......
  • 一文带你入木三分地理解字符串KMP算法(next指针解法)
    1.KMP算法简介温馨提示:在通篇阅读完并理解后再看简介效果更佳以下简介由百度百科提供https://baike.baidu.com/item/KMP%E7%AE%97%E6%B3%95/10951804:KMP算法是一种改......
  • 扩展KMP算法
      前文已经介绍了经典的​​KMP算法​​​,本文继续介绍KMP算法的扩展,即扩展KMP算法。  问题定义:给定两个字符串S和T(长度分别为n和m),下标从0开始,定义extend[i]等于S[i]......
  • KMP算法(1):如何理解KMP
    系列文章目录KMP算法(1):如何理解KMP​​​KMP算法(2):其细微之处​​一:背景  给定一个主字符串(以S代替)和模式串(以P代替),要求找出P在S中出现的位置,即串的模式匹配问......
  • P5410 【模板】扩展 KMP(Z 函数)
    题目链接P5410【模板】扩展KMP(Z函数)【模板】扩展KMP(Z函数)题目描述给定两个字符串\(a,b\),你要求出两个数组:\(b\)的\(z\)函数数组\(z\),即\(b\)与\(b\)的......
  • KMP算法详解-字符串匹配
    1.什么是KMP是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP2.KMP的用处KMP主要用于字符串匹配。KMP的主要思想是当出现字符串不匹......
  • 6.1、有限自动机的等价性
    DFA与NFA的等价性对于每个NFAM存在一个DFAM’,使得L(M)=L(M’)等价性证明NFA的确定化思路:NFA和DFA的差别 NFA DFA初始状态......
  • 看起来简单实际上却很牛的KMP算法:LeetCode572-另一棵树的子树
    题目描述给定两个非空二叉树s和t,检验s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括s的一个节点和这个节点的所有子孙。s也可以看做它自身的一棵......