我关于KMP算法的初步理解

  唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完。后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是我还是很高兴我解决了这个问题。因为是随笔,所以没有图解,我会尽力解释清楚,有不对的地方请各位同学指正。
  关于背景介绍就不说了,目前我看到的KMP算法是用来进行串的匹配的,他的主要优点是不用指针回溯。
  就用书上的例子吧,设目标串s=“s0s1...sn-1",模式串t="t0t1...tm-1"
  算法主体判断分两种情况:
  ①当模式串中没有相同的真子串的,且si !=tj(也就是失配)时,存在失配字符前的所匹配字符都相等,则直接将模式串的第一个字与si比较,因为模式串中没有相同字符,所以中间的t0,s0,t1,s1等都不需要比较。
  ②当模式串中有相同的真子串,且符合t0t1...tk-1=tj-ktj-k+1...tj-1(0<k<j)的时候,进行下一次比较的时候直接从模式串的第K+1个字符,也就是tk跟si比较就可以了。首先来看这个式子,他比较的是模式串除失配字符外的字符串中的前驱和后继是否相等,又因为前面的条件,所以前驱字符的后一个字符与si比较的时候会出现一个神奇的效果,好吧,我很无聊…因为后继和前驱是相等的,又因为失配字符前就是后继,所以就会出现前驱字符与后继字符所对的目标串字符相匹配,这样就不用重复比较啦~,不得不说前辈们很聪明。
  我不用式子来解释的原因是怕式子过于抽象造成同学们看不懂。。。也许我有点...好吧,这是小问题
  当然,我觉得理解了这个再去看代码,同学们会不会豁然开朗呢?如果觉得我有错的话请一定要提出来,因为我也是初学这个,需要打好基础,当然,也许你们会觉得这个问题很简单,为什么要想一个晚上呢?...因为我看的时候,书上给的式子有点抽象,以前很少有用这种抽象的式子来学习。
  关于代码段的其他问题,我会在后面的学习中解决,然后再写一次关于KMP算法的详细理解。
  额,还有一点,为什么WORD上面打出的下标在这个上面用不了。。。感觉自己好LOW...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值