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

学做网站教程视频南宁江南区网站制作价格

学做网站教程视频,南宁江南区网站制作价格,网站新年特效,懒设计官网KMP算法#xff08;Knuth-Morris-Pratt算法#xff09;是一种高效的字符串匹配算法#xff0c;用于在主文本字符串中快速查找模式字符串的出现位置。其核心思想是通过预处理模式字符串#xff0c;利用部分匹配信息#xff08;即“失败函数”或“next数组”#xff09;避免…KMP算法Knuth-Morris-Pratt算法是一种高效的字符串匹配算法用于在主文本字符串中快速查找模式字符串的出现位置。其核心思想是通过预处理模式字符串利用部分匹配信息即“失败函数”或“next数组”避免在匹配失败时回溯主串从而将时间复杂度优化到 O(nm)n是主串长度m是模式串长度远优于暴力匹配算法的 O(n×m)。 一核心原理 部分匹配表Prefix Table / Next数组 定义next[i] 表示模式串的子串 P[0...i] 的最长公共前后缀长度。作用当字符匹配失败时根据 next 数组决定模式串的回溯位置避免重复比较主串。 匹配过程 主串指针不回溯仅移动模式串指针 若当前字符匹配失败模式串指针回退到 next[j] 的位置继续匹配。 二Next数组的构建 最长前缀概念 最长前缀是说以第一个字符开始但是不包含最后一个字符。 最长后缀概念 最长后缀是说以最后一个字符开始但是不包含第一个字符。 next 数组定义在模式串中下标从0开始next[i] 表示模式串中以下标 i 处字符结尾的子串的最大相同前后缀的长度。在KMP算法中该值一方面表示模式串中1~i位置子串中的最长相同前后缀长度另一方面表示在该位置匹配失败时模式串回溯比较的下一个字符位置最长前缀末座标的下一个字符 步骤示例模式串 P ABABCABAB 索引子串最长公共前后缀next[i]0A无01AB无02ABA“A”13ABAB“AB”24ABABC无05ABABCA“A”16ABABCAB“AB”27ABABCABA“ABA”38ABABCABAB“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 下次匹配位置到最大有效匹配位置那么这个位置一定是这段前缀后缀的部分 四关键点 时间复杂度 预处理模式串构建 next 数组O(m)匹配过程O(n)总体O(n m). 优势 避免主串指针回溯适合处理大文本流或实时数据。 应用场景 文本编辑器中的查找功能如CtrlF、代码解析、DNA序列匹配等。 无对比暴力匹配 暴力匹配每次失配后主串和模式串指针均回退重复比较已匹配的字符。主串A B A B A B C 模式A B A B C 暴力匹配需要回退主串指针比较多次。KMP主串指针不回溯仅调整模式串指针效率显著提升。 掌握KMP算法的核心在于理解部分匹配表的构建逻辑和失配时的回溯策略。
http://www.eeditor.cn/news/119577/

相关文章:

  • 企业做个网站多少钱山西省煤炭厅基本建设局网站
  • 建一个网站问谁手机app制作需要多少钱
  • 太原在线制作网站广告设计软件培训中心
  • 网站开发开题报告范文怎么做告白网站
  • 常德建设局官方网站建设电商网站多少钱
  • 效果图网站源码html格式的网站地图
  • 鲜花网站建设论文百度文库市场营销推广
  • 团总支网站建设宣传南京建设银行网站
  • 网页制作及欣赏知名seo公司
  • 彩钢做网站能赚钱吗wordpress 隔行
  • 专做西餐的网站服装网站建设需求分析
  • 企业网站空间多大营销型网站案例展示
  • 营销型网站建设细节怎么制作免费的企业网站
  • 一个人建网站手机网站修改
  • 百度网站建设解决方案专业的赣州网站建设
  • wordpress插件拖拽seo教程:外链优化方法和原理介绍
  • 可以做公众号背景图的网站wordpress ie
  • 公司主营网站开发怎么做账wordpress所见既得
  • 云南网站备案自己做的网站怎么弄成app
  • wordpress官方中文版seo网站优化对象
  • 宣讲家网站生态文明建设电商代运营公司100强
  • 网站建设选谋者智能小程序开发
  • 华为网站开发app下载平台哪个好
  • 当当网网站建设案例网络营销外包价格
  • 古典风格网站模板htmlwordpress主题的连接函数
  • 中国十大企业襄阳网站seo方法
  • 企业网站的重要性钉钉付费版多少钱
  • 深圳网站建设公司建设wordpress插件 标签
  • 华梦服饰网站建设中北京市建设厅网站首页
  • 天津正规网站建设调试公司网站设计目的与规划