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

邯郸网站建设哪家强现在新闻做的最好的网站

邯郸网站建设哪家强,现在新闻做的最好的网站,郑州作网站,2024明年房价暴涨原因是什么本文针对计算机统考408的数据结构复习需求,系统解析KMP算法的核心原理与实现要点。​ KMP算法的核心思想 当主串与模式串匹配失败时,利用已匹配部分的最长公共前后缀长度,确定模式串滑动距离,避免主串指针回溯。时间复杂度&…

本文针对计算机统考408的数据结构复习需求,系统解析KMP算法的核心原理与实现要点。​ 

KMP算法的核心思想

当主串与模式串匹配失败时,利用已匹配部分的最长公共前后缀长度,确定模式串滑动距离,避免主串指针回溯。时间复杂度:​O(n+m)

方便理解我们先来看一个例子:

本次匹配的模式串为abaabc,主串在扫描前未知

匹配到下标3失败时,可以确定主串前三位为aba,第4为不是a 

很明显,我们将子串向右移一位是不可能匹配的, 这样一开始就匹配失败了,而我们向右移动两位,有可能可以匹配成功,因此我们令j=1继续匹配。由j=3匹配失败后令j=1,构建next数组(表示该处字符不匹配时应该回溯到的字符的下标),令next[3]=1。

构建next数组 (手算)

 假设匹配到第i位失败了,说明主串和模式串前i-1位是相同的,设next[i] = j (n>0)。

由左边的图可知:S[0]=T[0],S[1]=T[1],...,S[n-1]=T[i-1]

由右边的图可知:S[i-j]=T[0],...,S[i-1]=T[j-1]

联立两式,得:T[0]=T[i-j],T[1]=T[i-j+1],...,T[j-1]=T[i-1]

简单来说,next[j] = 前 j - 1 位的最长相等前后缀长度。

拿刚才模式串abaabc举例

下标i前i位子串后i位子串最长相等前后缀长度next[i]
0空(首字符失配)-1
100
2ab00
3a, aba, ba11
4a, ab, abaa, ba, baa11
5a, ab, aba, abaab, ab, aab, baab22

最终next数组中的元素应该是{-1, 0, 0, 1, 1, 2}。

理解上面的思路,接下来用代码来实现求模式串的next数组

匹配字符串

假设此时已经获得next数组,接下来进行匹配,不理解可以画个草图模拟一下代码。

// 字符串匹配,返回匹配的首字母位置
int kmpSearch(const string& S, const string& T, int next[]) {int i = 0, j = 0;                        // i为主串的指针,j为模式串指针int lenS = S.size(), lenT = T.size();while(i < lenS && j < lenT) {if(j == -1 || s[i] == p[j]) {        // 如果模式串无法右移或者单词匹配成功i++;                             // 两指针都往右移一位,继续匹配j++;}else j = next[j];                      // 匹配失败,回退j指针}if(j == lenT) return i - j;              // 模式串全部匹配成功,输出首字母位置return -1;
}

构建next数组 (机算)

本质上与匹配字符串的操作大差不差,核心跳转逻辑分三种情况:

1. j在初始位置-1 → 重置为0开始匹配
2. 字符匹配 → 同步前进
3. 字符不匹配 → 跳转到前一个匹配位置 

void get_next(const string& T, int next[]) {int i = 0, j = -1;next[0] = -1;while (i < n - 1) {if (j == -1 || p[i] == p[j]) { j++;    i++;    next[i] = j;                 // 前后缀相等的最大值} else {j = next[j];                 // 回退寻找可能匹配的位置}}
}

结语

KMP算法通过预处理模式串的next数组,将匹配过程中的无效比较降至最低,是空间换时间的经典设计。备考时需重点掌握next数组的手算推导​(最长相等前后缀计算),可以结合408真题巩固练习。

http://www.dtcms.com/wzjs/616409.html

相关文章:

  • 无锡微信网站国家域名管理中心
  • WordPress discuz 仿站网站开发人员需要去做原型吗
  • 发帖百度秒收录网站分享公司网站网页
  • 上海知名装修公司排行贵州网站seo
  • 国税网站上如何做股权变更区块链外包开发
  • 淮安建设机械网站电商网站界面设计流程
  • 云南省建设教育协会网站网站开发加维护大概多少钱
  • 免费笑话网站系统php手机网站后台源码
  • 网站解析需要多久生效建设企业网站官网登录
  • 网站建设综合训练浙江建设厅 继续教育 网站
  • 嘉兴网站推广企业wordpress 登录界面插件
  • 网站建设与文字的工作太原建站公司有哪些
  • 企业网站升级企业注册资金变更流程
  • 开题报告电子商务网站建设怎么在百度上制作自己的网站
  • 扬州有做义工的地方或网站嘛无锡企业免费建站
  • 做网站申请域名大概花费多少网站关键词优化怎么做的
  • 科技网站建设 长沙英文网站建设公司
  • 谷歌外贸网站seo怎么做h5网站实例
  • 建站行业的乱象丹东网站网站建设
  • 宁波那家公司做网站好湖南省做网站那个企业便宜
  • 网站免费推广计划电商网站如何备案
  • 深圳建网站技术上海外包seo
  • 中小企业网站建设教程网站内容建设方案
  • 制作网站平台做食品网站用什么颜色
  • 网站开发哪里可做私活奖券世界推广网站
  • kocool网站开发网站建设部门管理制度
  • 苏州网站托管qq邮箱登录入口网页版
  • 济南做网络安全的公司广州seo公司品牌
  • 卡二卡三卡四精品系统优化最好的安卓手机
  • 开网站做女装好还是童装好做商城网站需要备案吗