ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

KMP算法计算next代码理解

2021-10-21 13:02:38  阅读:211  来源: 互联网

标签:代码 回溯到 next 算法 理解 手算 KMP 比较


KMP算法计算next代码理解

这一篇主要讲计算next代码的理解,默认已经会手算next,如果不会先看看下面这一篇:
手算next的理解

要理解一段代码,最简单的就是跟着代码走一遍

顺代码思路

在这里插入图片描述
可以看出,j的作用相当于是遍历整个字符串,当长度为0、1、2… …
而k的作用则是计算相应长度下的next值。
比较T[j]与T[k],如果相等,j后移,k加一;否则,j不动,k回溯。、

要了解以下几个问题

接下来要了解以下几个问题:
1.为什么比较T[j]和T[k]就行了?
2.k要回溯到哪个位置?

1.为什么比较T[j]和T[k]就行了?

首先是第一个问题:为什么比较T[j]和T[k]。
在这里插入图片描述

以上图序号六那一段为例,比较的是T[3]与T[1],因为T[2]与T[0]在上一段就比较过了,并且相等,因此这里实际上相当于比较T[3]T[2]与T[1]T[0]是否相等,这一步其实对应next分段函数中的第二种情况。

这样就可以与手算代码相联系一下:
在这里插入图片描述
有没有稍微看明白一点?

2.k要回溯到哪个位置?

接下来是重头戏:第二个问题——k要回溯到哪个位置

以上面顺代码走的最后一步为例:
在这里插入图片描述
现在应该大概能理解这段代码了吧。
设计这个算法的人真是个天才!

标签:代码,回溯到,next,算法,理解,手算,KMP,比较
来源: https://blog.csdn.net/melodyzhan/article/details/120883986

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有