2020-10-16

KMP算法理解

  • 1.KMP算法来源
    KMP算法是由克努斯-莫里斯-普拉特共同创造,KMP分别是这三位名字的开头英文字母。
  • 2.KMP算法和朴素匹配模式算法的时间复杂度比较
    朴素匹配模式算法的时间复杂度分析:
假设目标串长度为m,模式串长度为n。最坏的情况下,是每一次匹配到最后一步发现不同,
然后指针回溯,直至匹配到最后。如目标串为"wwwwa" 而模式串为"wwa"。发现每次比较
到最后都不相等直至最后一次比较才相等。

通过归纳总结最坏情况下,每轮比较要比较n次,而要比较m-n+1轮。即时间复杂度为
o(n*m)-o(n*n)+o(n)==o(n*m) 。而KMP算法将朴素匹配模式算法进行改进得到线性的
时间复杂度o(n+m)

注意:在最坏情况下。朴素匹配模式算法的时间复杂度才达到o(n*m),一般情况下朴素
匹配模式算法的时间复杂度接近于o(n+m)。
  • 3.最长前后缀匹配长度
    特别强调:前缀和后缀的字母比较都是从左到右的。而不是前缀从左到右而后缀从右到左
    最长前后缀匹配长度:如模式串"abbabd"当指针指向了d,其前面有"abbab"
    在"abbab"中,假设前后缀匹配长度为1,那么前缀为a 后缀为b 发现前后缀不相等故不能为1。 假设前后缀匹配长度为2 那么前缀为ab 后缀也为ab 此时前后缀相等故前后缀匹配长度可以为2。假设前后缀匹配长度为3那么前缀为abb后缀为bab不相等故不能为3(两者都是从左到右开始比较判断是否相等 如前缀abc和后缀def。a和d比较,b和e比较,c和f比较)。而前后缀匹配长度可能不唯一。但应该取最长前后缀匹配长度(取得是前后缀相等的最长前后缀匹配长度)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值