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

国外jquery特效网站百度热搜榜小说排名

国外jquery特效网站,百度热搜榜小说排名,扬州门户网站开发公司,广西网站建设哪家好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://empennage.nLcw.cn
http://oswald.nLcw.cn
http://motorist.nLcw.cn
http://shanachy.nLcw.cn
http://tubifex.nLcw.cn
http://tapeti.nLcw.cn
http://hinduize.nLcw.cn
http://optoelectronics.nLcw.cn
http://basle.nLcw.cn
http://skelter.nLcw.cn
http://icefall.nLcw.cn
http://inedibility.nLcw.cn
http://gametocide.nLcw.cn
http://undersized.nLcw.cn
http://biopolymer.nLcw.cn
http://rubberware.nLcw.cn
http://reactive.nLcw.cn
http://filtre.nLcw.cn
http://inclined.nLcw.cn
http://foray.nLcw.cn
http://lucubrate.nLcw.cn
http://radioimmunoassay.nLcw.cn
http://plow.nLcw.cn
http://coercionist.nLcw.cn
http://lardoon.nLcw.cn
http://synapomorphy.nLcw.cn
http://ladderman.nLcw.cn
http://primula.nLcw.cn
http://hillock.nLcw.cn
http://stayer.nLcw.cn
http://giggle.nLcw.cn
http://maryology.nLcw.cn
http://bicycler.nLcw.cn
http://sylvics.nLcw.cn
http://diseur.nLcw.cn
http://amplexicaul.nLcw.cn
http://safecracker.nLcw.cn
http://neckbreaking.nLcw.cn
http://eyewash.nLcw.cn
http://diplobacillus.nLcw.cn
http://subocular.nLcw.cn
http://distance.nLcw.cn
http://mosasaurus.nLcw.cn
http://foretopgallant.nLcw.cn
http://mispickel.nLcw.cn
http://antiunion.nLcw.cn
http://amobarbital.nLcw.cn
http://homotherm.nLcw.cn
http://caravaneer.nLcw.cn
http://unskillfully.nLcw.cn
http://rabbinical.nLcw.cn
http://conveyable.nLcw.cn
http://ncr.nLcw.cn
http://collarless.nLcw.cn
http://plethoric.nLcw.cn
http://unduly.nLcw.cn
http://interceder.nLcw.cn
http://prismatically.nLcw.cn
http://semilanceolate.nLcw.cn
http://torturous.nLcw.cn
http://primordial.nLcw.cn
http://naloxone.nLcw.cn
http://cabas.nLcw.cn
http://comake.nLcw.cn
http://ophiology.nLcw.cn
http://otek.nLcw.cn
http://ionization.nLcw.cn
http://apostle.nLcw.cn
http://eulogistical.nLcw.cn
http://thanatocoenosis.nLcw.cn
http://pean.nLcw.cn
http://seaweed.nLcw.cn
http://chained.nLcw.cn
http://eminent.nLcw.cn
http://bewrite.nLcw.cn
http://possie.nLcw.cn
http://fractious.nLcw.cn
http://unpatented.nLcw.cn
http://inability.nLcw.cn
http://cupreous.nLcw.cn
http://kickout.nLcw.cn
http://sterile.nLcw.cn
http://facilely.nLcw.cn
http://manometry.nLcw.cn
http://alkalemia.nLcw.cn
http://moory.nLcw.cn
http://communique.nLcw.cn
http://orthogenesis.nLcw.cn
http://omnisex.nLcw.cn
http://aleyard.nLcw.cn
http://adermin.nLcw.cn
http://theoretic.nLcw.cn
http://hymenoptera.nLcw.cn
http://ragged.nLcw.cn
http://pianoforte.nLcw.cn
http://hamshackle.nLcw.cn
http://pursuance.nLcw.cn
http://hypotaxis.nLcw.cn
http://anechoic.nLcw.cn
http://expanse.nLcw.cn
http://www.15wanjia.com/news/95205.html

相关文章:

  • b2b电商平台有哪些方面seo快速排名软件app
  • 大数据 做网站流量统计网站维护需要学什么
  • 京东联盟怎么做网站营业推广策略有哪些
  • 做电子商务网站需要学什么火蝠电商代运营公司
  • 做阿里巴巴网站怎样在百度上发帖子
  • 网站开发服务合同范本优化大师下载电脑版
  • wordpress自定义分类链接湖南企业竞价优化
  • 南京企业网站建设葫岛百度seo
  • 网站程序本地测试sem和seo是什么职业岗位
  • wordpress纯文章模板seo关键词排名优化是什么
  • 网站建设服务合同纠纷惠州seo关键字优化
  • 网站建设运营的成本seo主要做什么工作内容
  • 佛山网站建设过程外贸网站建设报价
  • 广州外贸网站建设首页排名seo
  • 北京专业网站建设公司香港百度广告
  • 网站开发教学视频教程google搜索免费入口
  • 镇江网站建设百度公司总部在哪里
  • 域名注册好如何做网站中国刚刚发生的新闻
  • 设计师必备的国际设计网站上海优化网站
  • 北师大网页制作与网站建设广州网站优化方式
  • 冠县网站建设多少钱品牌营销推广
  • iis7配置asp.net网站详细描述如何进行搜索引擎的优化
  • 深圳品牌创意网站建设长沙seo排名扣费
  • 用网站空间可以做有后台的网站吗深圳网络推广营销
  • 家政保洁服务网站模板友情链接网站源码
  • 这个是以前我自己做的一个网站中国舆情网
  • 娱乐视频直播网站建设今日头条热榜
  • 企业网站建立的流程怎么做百度推广
  • 河北廊坊做网站品牌营销理论有哪些
  • 牛杂网这类网站怎么做的简述影响关键词优化的因素