KMP算法个人解析

本文参考《大话数据结构》与青岛大学王卓老师的数据结构讲解视频结合自己的理解给出,如有不妥,欢迎大家交流。
王卓老师视频:https://www.bilibili.com/read/cv2306631?spm_id_from=333.788.b_636f6d6d656e74.227
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里说回溯可以不用发生,可以这样理解,即如果T字符串的前缀和后缀一致,则,直接回溯到j位置,即相当于对i进行了回溯。我们在后面可以发现,next[j]值均为前缀与后缀可相等的最大值,这样就保证了对于i来说可以,我可以在i不回溯的情况下得到i回溯时最先发生的情况。同样,如果next[j]位置也有next[next[j]] 位置,依次把i往前移动,即可得到所有可能情况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
next数组的计算可以理解为找T字符串前缀和后缀匹配的个数的过程。这样可以保证,每次回溯的均是i最先可能出现相等的情况。
在这里插入图片描述
这里主要注意,每次回溯到的位置是next[j],这里的j即可以理解为T字符串中的j,即它前面的字符串为目前1.。。。i这个字符串的前缀。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里其实可以理解为,如果j位置和nextval[j]的值一致,如果S[i]与T[j]不匹配,则s[i]与T[nextval[j]]也不会匹配,所以其实是对next[i]值的修正。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值