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

制作app连接网站有哪些专门制作网页的软件

制作app连接网站,有哪些专门制作网页的软件,qqlist rss更新 wordpress,软件工程师的薪资待遇本文针对计算机统考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/a/513419.html

相关文章:

  • 依托git交付代码,并提供技术支持的方案
  • 新网站seo外包怎么申请免费企业邮箱账号
  • 《算法千题(1)--- 第31场蓝桥算法挑战赛》
  • 网站加载动画效果看车二手车网站源码
  • 徐州本地网站网站流量功能更怎么做
  • 网站开发搭建有个网站是做视频相册的
  • 揭阳网站制作企业discuz 分类网站
  • 帮做网站制作挣钱wordpress菜单小图标不显示
  • jsp做的当当网站的文档东莞建设监督网
  • HashMap为什么线程不安全? ConcurrentHashMap如何保证线程安全? AQS如何实现锁的获取与释放?用男女关系进行解释,一看就懂
  • 免费开源网站系统有哪些门户网站建设方案费用
  • 动易网站后台管理系统新昌县住房和城乡建设局网站
  • 网站切片 做程序数据分析师报名入口
  • 宿迁市网站建设口腔医院网站开发
  • Redis 特性/应用场景/通用命令
  • 学生个人网站建设模板网站为什么做站外推广
  • 零基础学网站建设 知乎长治长治那有做网站的
  • RPC服务
  • 北京外贸网站设计备案邯郸网页
  • 素马网站制作开发腾讯朋友圈广告怎么投放
  • 网站开发包括哪些网站推广怎么做
  • SwiftUI自定义一个水平渐变进度条
  • 电力电子技术 第四章——半导体功率器件
  • 网站运营专员具体每天怎么做wordpress音乐加载慢
  • 网站建设中图片是什么意思推特是谁的公司
  • 免费做手机网站有哪些wordpress注册邮箱收不到
  • 搜狗网站排名软件国内图片下载网站
  • wordpress 百度平台网站优化排名
  • 22.unordered_map和unordered_set的封装
  • 网站框架图片二维码生成器网页版