关注
模式串的`nextval`数组(也称为部分匹配表或前缀函数)用于KMP算法中,它记录了模式串的前缀集合与自身后缀集合的匹配长度。下面我们来计算给定模式串`'abcaabbcabcaabdab'`的`nextval`数组。
首先,我们初始化`nextval`数组,长度与模式串相同,并将第一个元素设为0。然后,我们逐个字符比较模式串的前后部分,来填充`nextval`数组的其余部分。
模式串:`'abcaabbcabcaabdab'`
初始`nextval`:`[0, , , , , , , , , , , , , ]`
下面是计算过程:
1. `nextval[1] = 0` (已初始化)
2. `a`与`a`匹配,`nextval[2] = 1`
3. `b`与`a`不匹配,查看`nextval[1]`的值(即0),所以`nextval[3] = 1`
4. `c`与`a`不匹配,查看`nextval[2]`的值(即1),所以`nextval[4] = 2`
5. `a`与`a`匹配,`nextval[5] = 3`
6. `a`与`b`不匹配,查看`nextval[3]`的值(即1),所以`nextval[6] = 1`
7. `b`与`b`匹配,`nextval[7] = 2`
8. `b`与`c`不匹配,查看`nextval[5]`的值(即3),所以`nextval[8] = 3`
9. `c`与`a`不匹配,查看`nextval[6]`的值(即2),所以`nextval[9] = 2`
10. `a`与`a`匹配,`nextval[10] = 3`
11. `a`与`b`不匹配,查看`nextval[7]`的值(即2),所以`nextval[11] = 2`
12. `b`与`c`不匹配,查看`nextval[8]`的值(即3),所以`nextval[12] = 3`
13. `c`与`a`不匹配,查看`nextval[9]`的值(即2),所以`nextval[13] = 2`
14. `a`与`b`不匹配,查看`nextval[10]`的值(即3),所以`nextval[14] = 3`
15. `b`与`d`不匹配,查看`nextval[11]`的值(即2),所以`nextval[15] = 2`
16. `d`与`a`不匹配,查看`nextval[12]`的值(即3),所以`nextval[16] = 3`
17. `a`与`b`不匹配,查看`nextval[13]`的值(即2),所以`nextval[17] = 2`
最终得到的`nextval`数组为:
`[0, 0, 1, 1, 2, 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2]`
这个数组可以帮助KMP算法在文本搜索过程中跳过不必要的比较,从而提高搜索效率。
查看原帖
点赞 评论
相关推荐
10-19 15:48
上海交通大学 搜索算法 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
283830次浏览 2485人参与
# 学历or实习经历,哪个更重要 #
48326次浏览 375人参与
# 百度开奖 #
148915次浏览 900人参与
# 地方国企笔面经互助 #
3397次浏览 7人参与
# 如何一边实习一边秋招 #
989717次浏览 12626人参与
# 选完offer后,你后悔学本专业吗 #
17758次浏览 125人参与
# 北方华创开奖 #
24928次浏览 268人参与
# 0offer是寒冬太冷还是我太菜 #
894411次浏览 7974人参与
# 提前批简历挂麻了怎么办 #
145839次浏览 1941人参与
# 海康威视求职进展汇总 #
397558次浏览 3403人参与
# 得物求职进展汇总 #
65201次浏览 674人参与
# 没有实习经历,还有机会进大厂吗 #
809994次浏览 13898人参与
# 美团求职进展汇总 #
1322296次浏览 12413人参与
# 学历对求职的影响 #
343208次浏览 3137人参与
# 你们公司几号发工资 #
10616次浏览 99人参与
# 你最想要的公司福利是? #
44070次浏览 167人参与
# 查收我的offer竞争力报告 #
21682次浏览 267人参与
# 听到哪句话就代表面试稳了or挂了? #
93553次浏览 783人参与
# 机械人,你在招聘流程中的企业有哪些? #
17704次浏览 183人参与
# 网申一定要掌握的小技巧 #
5206次浏览 52人参与
# 如果实习可以转正,你会不会放弃秋招 #
206493次浏览 2810人参与
# 一觉醒来,我觉醒了超级打工人系统 #
3740次浏览 38人参与