网易首页 > 网易号 > 正文 申请入驻

【未来虫教育】字符串匹配之KMP算法与BF算法

0
分享至

(一) 字符串匹配,从 主串 中匹配目标串,如果在主串中匹配到,就返回与目标串相匹配的对应主串的第一个字符·
(二)
(1) BF算法, 即暴力(Brute Force)算法 ,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
缺点: 时间复杂度较大0(mn)(最坏的情况下)( m为主串长度,n为目标串长度 )
BF算法演示过程:




(2) KMP算法: 是一种 改进的字符串匹配算法, 由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是 利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配 的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息 。 K MP算法的
时间复杂度
O(m+n)
为什么要求next数组,next数组指的是什么?
KMP的next数组简单来说,假设有两个字符串,一个是待匹配的字符串S1,一个是要查找的关键字S2。现在我们要在S1中去查找是否包含S2,用 “i” 来表示S1遍历到了哪个字符, KMP就是保证 i 永远不回退,只回退 j 来使得匹配效率有所提升。它用的方法就是利用 strKey在失配的j为之前的成功匹配的子串的特征来寻找j应该回退的位置 。
前缀和后缀
"前缀"和"后缀"。 "前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。




nextval是为了弥补next缺陷所产生的
实例如下:
主串为“aaabaaaab”、模式串为“aaaab”那么,比较的时候就会发生一些浪费的情况:比较到主串以及模式串的第四位时,发现其值并不相等,据我们观察,我们可以直接从主串的第五位开始与模式串进行比较,而事实上,却进行了几次多余的比较。使用nextval可以去除那些不必要的比较次数。
KMP算法要解决的问题就是 在字符串(也叫主串)中的模式(pattern)定位问题。 说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。




具体解释:
首先,对于这个问题有一个很单纯的想法:从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位。这有什么难的?
我们可以这样初始化:
之后我们只需要比较i指针指向的字符和j指针指向的字符是否一致。如果一致就都向后移动,如果不一致,如下图:
A和E不相等,那就把i指针移回第1位(假设下标从0开始),j移动到模式串的第0位,然后又重新开始这个步骤:

#include

#include

#include

int BFindex(char S[],char T[],int pos)//BF算法匹配字符串{int i=pos;int j=1;int length1=strlen(S);int length2=strlen(T);while((i<=length1)&&(j<=length2))//两个字符串均为比较到串尾(只有有一个到串尾就跳出循环){ if(S[i]==T[j-1]) { i++;j++; } else { i=i-j+2; j=1; }}if(j>length2){ return i-length2+1;}else{return 0;printf("匹配失败!");}}int Index_KMP(char S[],char T[],int next[],int pos)//字符串匹配{int i=pos;int j=1;int length1=strlen(S);int length2=strlen(T);while(i<=length1&&j<=length2) //两个字符串均为比较到串尾(只有有一个到串尾就跳出循环){ if(j==0||S[i]==T[j-1]){++i;++j;} //匹配进行中 else{ j=next[j];} //移动字符串}if(j>length2)return i-length2+1;else{ return 0;printf("匹配失败!");}}void get_next(char T[],int next[]) //获取next的值{int i=1;next[0]=0;int j=0;int length3;length3=strlen(T);while(i

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
签了签了!3年1.66亿顶薪!休赛期最大赢家

签了签了!3年1.66亿顶薪!休赛期最大赢家

篮球教学论坛
2024-07-06 00:19:30
太卷了!金晨凭一己之力将饮料广告拉升一个高度,跳舞的她在发光

太卷了!金晨凭一己之力将饮料广告拉升一个高度,跳舞的她在发光

七公子娱乐
2024-07-06 18:32:52
被禁止整容的“小芈月”长大了!15岁纯天然美貌曝光

被禁止整容的“小芈月”长大了!15岁纯天然美貌曝光

古今历史记
2024-07-06 11:02:54
2只羊打架致独库公路短暂封路 网友:没人下车劝劝吗

2只羊打架致独库公路短暂封路 网友:没人下车劝劝吗

鲁中晨报
2024-07-06 20:23:10
我今年62岁,退休金6800块,我姐没有退休金,我每月给她2000块!

我今年62岁,退休金6800块,我姐没有退休金,我每月给她2000块!

芯怡飞
2024-06-29 15:25:28
童年缺爱的人,一生都在戒这3种瘾

童年缺爱的人,一生都在戒这3种瘾

十点读书
2024-07-05 19:55:58
拒不道歉!北京叶大爷被拘留7天后露脸,面目狰狞为自己狡辩

拒不道歉!北京叶大爷被拘留7天后露脸,面目狰狞为自己狡辩

甜小娱儿
2024-07-05 09:00:56
央行:已与几家主要金融机构签订债券借入协议 持续借入并卖出国债

央行:已与几家主要金融机构签订债券借入协议 持续借入并卖出国债

财联社
2024-07-05 09:46:11
国足最强归化:蒋光太昨晚爆发,打破中超尘封11年的新纪录!

国足最强归化:蒋光太昨晚爆发,打破中超尘封11年的新纪录!

中超球评
2024-07-06 17:21:28
高峰:当年和李章洙喝“深水炸弹”,我连干仨给他喝多了

高峰:当年和李章洙喝“深水炸弹”,我连干仨给他喝多了

懂球帝
2024-07-06 14:40:08
各大媒体“塌方式表演翻车”,美军偷小麦?网友质疑不断,为啥?

各大媒体“塌方式表演翻车”,美军偷小麦?网友质疑不断,为啥?

眼光很亮
2024-07-06 08:13:56
俄媒宣传视频大翻车!原来伤亡的竟是俄军士兵

俄媒宣传视频大翻车!原来伤亡的竟是俄军士兵

亡海中的彼岸花
2024-07-06 00:05:11
知名大V卢克文去了日本调研,跟女优合了影,我笑趴在网友的评论区里

知名大V卢克文去了日本调研,跟女优合了影,我笑趴在网友的评论区里

日本物语
2024-07-05 16:45:43
王炸!54国家公民实行免签政策!

王炸!54国家公民实行免签政策!

持续躺平中
2024-07-06 13:53:14
少赚10800亿!日本首富孙正义终于认错,被这个华人大佬逼下神坛

少赚10800亿!日本首富孙正义终于认错,被这个华人大佬逼下神坛

毒sir财经
2024-07-05 21:04:33
上海热出新高度,这些室内场所却依旧“火辣辣”,市民直呼吃不消

上海热出新高度,这些室内场所却依旧“火辣辣”,市民直呼吃不消

新民晚报
2024-07-06 16:06:21
90后干部,受最严重处分!

90后干部,受最严重处分!

鲁中晨报
2024-07-06 07:51:09
苏州楼市全军覆没,苏州工业园区房价从45000元跌至43000元

苏州楼市全军覆没,苏州工业园区房价从45000元跌至43000元

有事问彭叔
2024-07-05 17:00:56
上海一大学领导突然死亡,仅53岁,最后露面照流出,大量隐情披露

上海一大学领导突然死亡,仅53岁,最后露面照流出,大量隐情披露

求实者
2024-07-05 17:41:30
尴尬了!张琳芃退出国足后,右后卫位置却人才井喷,四大新星冒头

尴尬了!张琳芃退出国足后,右后卫位置却人才井喷,四大新星冒头

评球论事
2024-07-06 13:21:15
2024-07-06 21:24:49
原画在线课堂vv
原画在线课堂vv
一家有温度的原画教育机构
512文章数 1关注度
往期回顾 全部

科技要闻

AI公司没看上去有钱

头条要闻

媒体:赖清德上台第2个月"蔡系大阿哥"就被捕 耐人寻味

头条要闻

媒体:赖清德上台第2个月"蔡系大阿哥"就被捕 耐人寻味

体育要闻

糟糕的裁判,毁了“提前上演的决赛”

娱乐要闻

49岁林志玲在日本带娃被偶遇

财经要闻

李迅雷建议每年发5万亿国债十年50万亿

汽车要闻

预售12.3万-15.7万 吉利银河E5开启预售

态度原创

游戏
数码
艺术
公开课
军事航空

三年之期已到,原神与KFC再次联动,看到翅膀就放心了

数码要闻

华擎发布修订版Intel Arc A770和A750 Challenger SE GPU 更新散热设计

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

公开课

连中三元是哪三元?

军事要闻

美媒:美军向中国亮出"超远程武器" 瞄准中国预警机等

无障碍浏览 进入关怀版