Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
KMP 算法中对 next 数组的理解
next 数组的意义
此处 next[j] = k;则有 k 前面的浅蓝色区域和 j 前面的浅蓝色区域相同;
next[j] 表示当位置 j 的字符串与主串不匹配时,下一个需要和主串比较的字串位置在 next[j] 处;有下图:
若当前位置 j 与主串某一个字符不匹配,则下一次比较的是 K 与主串的当前位置,这个 K 也就是next[j];由于两个浅蓝色区域相同,因此 K 前面的区域肯定与主串相同,不需比较;如下图:
由上图可知,K 前面的区域不需比较;
next 数组的推导
从 next 数组所表达的意义可知,我们要求 next[j],首先要找到一个 K,这个 K 前面的浅蓝色区域和 j 前面的浅蓝色区域相同;如下图:
根据规定 next[1] = 0;接下来求其他的 next[j];
对于 next[2] 可得其必然为 next[2] = 1;
如下图:当第二个元素不匹配时,j 将退回到 1 处进行比较,因此 next[2] 一定为 1;
接下来是一般情况的推导,此处使用递推法进行推导,即已知 next[j] 求 next[j + 1];
若 next[j] = k 则有下图:
由于 next[j = k,可知浅蓝色部分相同;接下来分两种情况讨论;
- ch[K] =