数据结构第8讲 KMP算法

数据结构第8讲 KMP算法

讲这个算法之前,我们首先了解几个概念:

串:又称字符串,是由零个或多个字符组成的有限序列。如S=”abcdef”

子串:串中任意个连续的字符组成的子序列,称为该串的子串,原串称为子串的主串。如T=”cde”,T是S的子串。子串在主串中的位置,用子串的第一个字符在主串中出现的位置表示。T在S中的位置为3。

这里写图片描述

模式匹配:子串的定位运算称为串的模式匹配或串匹配。

假设有两个串S,T,设S为主串,也称正文串,T为子串,也称为模式,在主串S中查找与模式T相匹配的子串,如果查找成功,返回匹配的子串第一个字符在主串中的位置。

最笨的办法就是穷举所有S的所有子串,判断是否与T匹配。

例如:S=”abaabaabeca”,T=” abaabe”,求子串T在主串S中的位置。

从S串第1个字符开始:i=1,j=1,比较两个字符是否相等,如果相等,则i++,j++;如果不等则执行第2步;
这里写图片描述

从S串第2个字符开始:即i退回到i-j+2的位置,即i=2,j=1,比较两个字符是否相等,如果相等,则i++,j++;如果不等则执行第3步;

这里写图片描述
从S串第3个字符开始:即i退回到i-j+2的位置,即i=3,j=1,比较两个字符是否相等,如果相等,则i++,j++;如果不等则执行第4步;
这里写图片描述

从S串第4个字符开始:即i退回到i-j+2的位置,即i=4,j=1,比较两个字符是否相等,如果相等,则i++,j++;此时T串比较完了,执行第5步;
这里写图片描述

需要返回子串在主串S中第一个字符出现的位置,即i-m=10-6=4,m为T串的长度。
上述算法称为BF(Brute Force)算法,Brute Force的意思是蛮力,暴力穷举。其时间复杂度最坏达到O(n*m),nÿ

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值