只是想谈谈学习kmp中的一点体会

我觉得写出一篇能够看一遍就能理解KMP的博客是很难的,理解这个算法是需要时间和能力的,所以我就不不自量力的去尝试了,所以我就谈一谈我认为kmp学习中比较难理解的点和比较重要的点。建议学习过kmp但还是有疑惑的同学看。
我们看next数组
上一张图片吧,我现在箭头指向的是我现在要求第i为的next值,而0..i-1的next值都求过了。
这里写图片描述

先看next[i-1]
这里写图片描述
假设两段红色的相等,然后我们比较第i位和第next[i-1]+1位,如果相等,那么皆大欢喜,不然的话,这个next[i-1]就变成了next[next[i-1]],为什么呢。
看图
这里写图片描述
这个绿色的是next[next[i-1]],然后绿色的这一圈和蓝色的这一圈是相等的,因为他们都和红色的相等。那么我们只有比较第一段绿色的后一位和第i位就行了。如果还是不匹配的话,就再next一次。

同理,kmp中的匹配过程也就和这个一样了。

希望能够有所帮助

猜你喜欢

转载自blog.csdn.net/qq_36056315/article/details/80999273
今日推荐