当前位置: 首页 > news >正文

网站后台域名解析怎么做网站建设公司中企动力强

网站后台域名解析怎么做,网站建设公司中企动力强,网站怎么做301定向,wordpress电子商务主题KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,用于在主文本字符串中快速查找模式字符串的出现位置。其核心思想是通过预处理模式字符串,利用部分匹配信息(即“失败函数”或“next数组”)避免…

KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,用于在主文本字符串中快速查找模式字符串的出现位置。其核心思想是通过预处理模式字符串,利用部分匹配信息(即“失败函数”或“next数组”)避免在匹配失败时回溯主串,从而将时间复杂度优化到 O(n+m)(n是主串长度,m是模式串长度),远优于暴力匹配算法的 O(n×m)


一,核心原理

  1. 部分匹配表(Prefix Table / Next数组)

    • 定义:next[i] 表示模式串的子串 P[0...i]最长公共前后缀长度
    • 作用:当字符匹配失败时,根据 next 数组决定模式串的回溯位置,避免重复比较主串。
  2. 匹配过程

    • 主串指针不回溯,仅移动模式串指针:
      若当前字符匹配失败,模式串指针回退到 next[j] 的位置继续匹配。

二,Next数组的构建

最长前缀概念: 最长前缀是说以第一个字符开始,但是不包含最后一个字符。
最长后缀概念: 最长后缀是说以最后一个字符开始,但是不包含第一个字符。
next 数组定义:在模式串中(下标从0开始),next[i] 表示模式串中以下标 i 处字符结尾的子串的最大相同前后缀的长度。在KMP算法中,该值一方面表示模式串中1~i位置子串中的最长相同前后缀长度,另一方面表示在该位置匹配失败时模式串回溯比较的下一个字符位置(最长前缀末座标的下一个字符)

步骤示例(模式串 P = "ABABCABAB"

索引子串最长公共前后缀next[i]
0A0
1AB0
2ABA“A”1
3ABAB“AB”2
4ABABC0
5ABABCA“A”1
6ABABCAB“AB”2
7ABABCABA“ABA”3
8ABABCABAB“ABAB”4

最终 next = [0, 0, 1, 2, 0, 1, 2, 3, 4]

构建代码(Python)

def build_next(pattern):next = [0] * len(pattern)j = 0  # 前缀末尾指针for i in range(1, len(pattern)):  # 后缀末尾指针while j > 0 and pattern[i] != pattern[j]:j = next[j-1]  # 回退到前一个匹配位置if pattern[i] == pattern[j]:j += 1next[i] = jreturn next# 示例:模式串 "ABABCABAB"
print(build_next("ABABCABAB"))  # 输出 [0, 0, 1, 2, 0, 1, 2, 3, 4]

三,匹配过程代码(Python)

def kmp_search(text, pattern):next = build_next(pattern)j = 0  # 模式串指针for i in range(len(text)):  # 主串指针while j > 0 and text[i] != pattern[j]:j = next[j-1]  # 模式串回退if text[i] == pattern[j]:j += 1if j == len(pattern):return i - j + 1  # 返回匹配的起始位置return -1# 示例
text = "ABABABCABABABD"
pattern = "ABABCABAB"
print(kmp_search(text, pattern))  # 输出 2(从索引2开始匹配)

多次出现的位置


def kmp_search(text, pattern):index = [] next = build_next(pattern)j = 0  # 模式串指针for i in range(len(text)):  # 主串指针while j > 0 and text[i] != pattern[j]:j = next[j-1]  # 模式串回退if text[i] == pattern[j]:j += 1if j == len(pattern):#return i - j + 1  # 返回匹配的起始位置index.append(i - j + 1)j = next[j-1]return index

匹配失败时:失败位置之前的主串(i前)和子串(j前)部分一定都是匹配的。且对于子串来说,失败位置之前(j前)的任一部分属于子串(模式串)的这段子串(子子串)的后缀
重新匹配时:我们重新匹配的开始一定是子串(模式串)的某部分前缀
要想移动子串(模式串)指针(i 下次匹配位置)到最大有效匹配位置,那么这个位置一定是这段前缀=后缀的部分

四,关键点

  1. 时间复杂度

    • 预处理模式串构建 next 数组:O(m)
    • 匹配过程:O(n)
    • 总体:O(n + m).
  2. 优势

    • 避免主串指针回溯,适合处理大文本流实时数据
  3. 应用场景

    • 文本编辑器中的查找功能(如Ctrl+F)、代码解析、DNA序列匹配等。

无,对比暴力匹配

  • 暴力匹配:每次失配后,主串和模式串指针均回退,重复比较已匹配的字符。
    主串:A B A B A B C
    模式:A B A B C
    暴力匹配需要回退主串指针,比较多次。
    
  • KMP:主串指针不回溯,仅调整模式串指针,效率显著提升。

掌握KMP算法的核心在于理解部分匹配表的构建逻辑和失配时的回溯策略

http://www.yayakq.cn/news/83696/

相关文章:

  • 淄博seo北京百度seo点击器
  • 做网站花的钱和优化网站有关系吗图片手机网站建设
  • 合肥网站建设之4个细节要注意事项物联卡官方免费申请入口
  • 江山市建设局网站公司的介绍怎么写
  • 成都科技网站建设电话广州建设网站公司简介
  • 网站下方链接图标怎么做广州模板网站建设价格
  • 自建服务器做网站要备案零基础网站开发设计
  • 国外哪些网站有黄图wordpress 返回顶部代码
  • 河南省财政厅经济建设网站重庆网站建设合肥公司
  • 建设网站公开教学视频下载空调设备公司网站建设
  • ps做字幕模板下载网站有哪些网站设计平台 动易
  • 关于做网站的调查问卷赞助网站怎么做
  • 网络公司网站建设方案书电子商务主要学什么课程
  • 凡科做网站是否安全网站开发怎么做
  • 世界电商网站排名做网站百度百科
  • 网站建设模板 源码 特效PHP工具箱和WordPress
  • 北京专业做网站电话网站什么意思
  • 郑州建设公司网站软件设计大赛
  • 做网站图片大会导致慢企业网站的基本功能有哪些
  • 免费做爰网站网页设计添加图片插件
  • 网站推广行业赚钱吗个人网站盈利
  • 网站做多个单页链接东营建设信息网中标公示
  • 建设网站虚拟现实技术seo快速优化方法
  • 网站后台管理系统如何使用广东省农业农村厅副厅长
  • 在网站后台管理系统里产品说明怎么添加图片龙口城乡建设局官方网站
  • 网站论文首页布局技巧怎么查看网站提交百度的度
  • 河北企业网站建设技术网站首页收录没了
  • 做哪个网站零售最好用织梦系统做网站产权
  • 恶意网站怎么办微网站无锡
  • 太原网站建设工作室实体店线上线下运营模式