关于课件内KMP算法在实际使用中的小调整(无函数未修订版)
KMP算法提供了一个高效的检索方法,但是由于其过于依赖数据的调用,所以如果数据的下标出现错误则不能正确的使用KMP算法。考虑到输入数组的时候,所有数据都是从“0”号位开始输入的,而课件中的KMP数据是从1开始计入的。所以部分内容需要进行调整:
首先是next[j]部分:

假设一段字符串是aabcaaabcad,那么这段字符串的next[j]列表为:

关于索引部分,需要导入四个变量:首先是被匹配的主字符串(假设为S),第二个为匹配字符串(假设为T),第三个为从第几个字符串开始进行匹配。(假设为pos),第四个为next数组,需要自行求解
我们将KMP算法的索引部分函数称为index_KMP(char S[], char T[], int pos, int next[]);
因为next数组是需要程序生成的。因为生成的next数组里面的各个数字都是程序生成,非人为输入,所以需要一个生成next数组的函数,这里面需要导入两个变量,其中一个为判断next数组的字符串,另一个是用来存储next数值的数组next[]
我们将生成next的函数称为get_next(char T[], int next[]);

浙公网安备 33010602011771号