KMP算法,全称克努特-莫里斯-普拉特操作,是一种串模式匹配的高效算法
此算法发现于1977年,即40多年前
人如何从上下文中找出需要的段落呢?显然人不是从第一个字开始,错误后再从第二个字开始匹配
而是直接依照起始部分一大部分一大部分的转换,所以人匹配字符时很少看到他们回溯,而段落的巨大区别使这变的更不必要
如“我是一名……”
人直接找“我是一名”,而不是“我是一名”后面加起来的全部内容,这是完全出于经验的,知道后来的不太可能参与匹配,但实际上这也是科学的,因为省了计算量,是计算机的(桶排序也有类似的模糊性原理);
而对“我是一名”的匹配就是纯粹的KMP算法匹配。在两段话中找相似的部分,然后一一比较。
next[j]的意义是失配字符串中相似字符串的个数,即读到错误段落后前后相似的数量,然后移动到下一个“我是一名”,其移动位数为j-next[j]即字数减next[j],因为字数太多所以常常不予存储。