虽然用计算机实现这一人类伟大的数据结构算法不是新鲜事,而且这个算法很实用、很方便,但如果我们能够借鉴前人的伟大科学成果,比如清华大学计算机科学的女教授博士生导师严蔚敏,再看过她老人家网上遗留下来的视频后,发现虽然她老人家饱经风霜,实验室伸手不见五指,在如此恶劣不堪的情况下依然耐心讲解习题,而且是手动解答令人忘却的KMP算法,精神可嘉。再次,笔者在她老人家的基础之上改进了一些步骤,诸如去除那些个多余的纸条来遮遮掩掩,因为真理是死活遮不住的,使之避繁就简,另辟蹊径,不足之处,还望各位看官不吝赐教。
例:ababaabab
这一串字符求它的模式匹配算法的next函数值。
首先还是先看看简便归纳算法,这是笔者花两天时间演算出来的,非常牛逼。
取n=1时,为a,记为0,这是规定,第一个字符不论是a、还是b,都一样;
取n>=2时,这里举例:n=7,则i=n-1=6,j=n-2=5.
i=6,意思是从六开始算起的字符串,i=5意思是从首字母开始的往后5个字母,然后顺次往后推一个字母,并列写在一起,上下对齐。
即
ababa 6
babaa
然后上行的一排字母去掉尾数,下行的一排字母去掉首数,依此类推,直到找到上下两排字母都为同一字母串为止。此时的数字即代表该n值所在字母的next函数值。
abab
abaa 5
aba
baa 4
ab
aa 3
a
a 2
即第七个字母下的next函数值为2,即为所求。
nextval值,笔者有些记忆模糊,今晚再听分解。
手动演算KMP算法
最新推荐文章于 2024-04-11 19:34:22 发布