手动演算KMP算法

虽然用计算机实现这一人类伟大的数据结构算法不是新鲜事,而且这个算法很实用、很方便,但如果我们能够借鉴前人的伟大科学成果,比如清华大学计算机科学的女教授博士生导师严蔚敏,再看过她老人家网上遗留下来的视频后,发现虽然她老人家饱经风霜,实验室伸手不见五指,在如此恶劣不堪的情况下依然耐心讲解习题,而且是手动解答令人忘却的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值,笔者有些记忆模糊,今晚再听分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值