当前位置: 首页 > news >正文

做网站预算夫唯seo系统培训

做网站预算,夫唯seo系统培训,广州seo网站管理,北京网站建设哪家好天有文本串aabaabaaf,模式串aabaaf问文本串中是否出现过模式串 暴力解法 最不用动脑子的,直接两层for循环,逐个匹配,匹配到不相等的值时把文本串后移一位,再重新比较。这种方法的复杂度是O(mn),该方法低效的…

有文本串aabaabaaf,模式串aabaaf问文本串中是否出现过模式串

暴力解法

最不用动脑子的,直接两层for循环,逐个匹配,匹配到不相等的值时把文本串后移一位,再重新比较。这种方法的复杂度是O(m×n),该方法低效的原因在于重复比较次数过多,比如当比较到aabaa时发现此时的fb不相符,又从头开始比较,但ff和b前有相同的aa,如果我们能直接从b开始比较是不是高效多了呢?由此产生了KMP算法。

KMP算法概述

KMP算法就是当模式串与文本串字符不等时,不移动至头部进行比较,比如fb不匹配,跳至b进行比较,节约了前面相同aa的比较次数,尝试将比较过程直观展示如下:
逐个比较到f发现不匹配

a	a	b	a	a	b	a	a	f
|	|	|	|	|	!=
a	a	b	a	a	f

此时再从之前已知匹配的aa后面的b开始比较即可

a	a	b	a	a	b	a	a	f|	|	|	|	|	|a	a	b	a	a	f

那我们如何得知之前匹配的内容呢?这时就要引入前缀表的概念。

前缀表

a	a	b	a	a	f
0	1	0	1	2	0

形如上表这样,比较到当前字符发现不匹配时,可由前一位对应的字符找到此时应跳转的位置,这样的表为前缀表,具体如何找到对应字符应跳转的位置,要先引入前后缀的概念。
前缀为包含首字母,不包含尾字母的所有字串;后缀为包含尾字母,不包含首字母的所有字串,以该模式串为例,其所有前缀和后缀为:

前缀:a	aa	aab	aaba	aabaa
后缀:f	af	aaf	baaf	abaaf

模式串不同字串对应的最长相等前后缀表格如下:

a		aa		aab		aaba	aabaa	aabaaf
0		1		0		1		2		0
a		a		b		a		a		f

当不匹配时找前一个字符最长相等前后缀即可,在编程中我们将其命名为next数组。

next数组代码示例

a	a	b	a	a	f
j	i	
0
void getNext(next,s)//s为模式串{	j=0;next[0]=0;//初始化,i,j表示后前缀末尾指向位置for(i=1;i<s.size();i++){//后缀指向1,第一个字符无后缀,故其最长相等前后缀为0while(j>0&&s[i]!=s[j])//当前后缀不等时,j等于前一个字符对应的next数组位置j=next[j-1];if(s[i]==s[j]//前后缀相等时,j后移一位,i的后移在循环中实现j++;next[i]=j;}保存next数组}
}			

该代码实现了next数组即解决了如果当下不满足时该从何处比较的问题,也就是求出不同字符串下最长相等前后缀,方式是比较前后缀的最后一位来判定,那我想比较前后缀相同不是还要通过两个for循环来实现吗,为什么比较前后缀的最后一位就能判定两个不同的字符串最大相等前后缀长度呢?
当前后缀相等时我们很好理解,因为前面的相等已经判断过了,所以如果当下判定位置仍相等时,只需在上一次结果上+1即可;主要是当下判定位置不等时如何理解,执行步骤是向前遍历,直至找到与后缀字符相等的字符,并将前缀末尾指向之,想了半天又看了几遍实在不明白咋回事,贴两张图看看能不能理解吧,好像用到了动态规划的思想?前后缀匹配
前后缀不匹配

总结

KMP算法是用于比较字符串的一种高效算法,特点在于字符串只向前,模式串节约了重复部分的比较次数,实现通过next数组,但涉及next数组的求解人家有很巧妙的办法,五行代码就给搞定了,比我手算还简单,没有明白,暂时就到此为止吧。

http://www.yayakq.cn/news/35741/

相关文章:

  • 酒店类网站建设方案书设计公司网站域名
  • 怎么看网站是谁家做的网站建设策划书悠悠
  • 阿里云域名怎样做网站网站推广建设阶段
  • 软件企业网站模板查看网站是用什么做的
  • 新余百度网站建设专业的手表网站
  • 把网站提交给百度阿里巴巴外发加工网珠海
  • lol视频网站模板wordpress给后台增加功能
  • 如网站性质为公司 请以企业备案建立微信商城网站
  • 外贸网站建设设计科网站建设
  • iis编辑网站绑定做网站推广优化
  • 网站的标题可以改吗有帮忙做ppt的网站或人吗
  • 修机械师怎么做我小样网站角仰望软件项目交易网
  • 杭州萧山区专业做网站的公司注册100万公司每年费用多少
  • 如何建设一个自己的网站首页菜谱wordpress
  • 环保主题网站模板建设网站网站
  • 达浒镇网站建设公司百度快速收录办法
  • 进入微信官方网站下载企业网站备案在哪个部门
  • 怎么查看网站开发语言wordpress文章到微信二维码
  • 怎么做弹幕网站wordpress后台登陆地址
  • asp网站怎么做404页面深圳十大科技公司排名
  • 设计素材网站官网建网站怎么起名字
  • 怎么在服务器建立网站三水网站建设
  • 腾讯企业邮箱手机登录入口外贸网站优化价格
  • 网站实现留言功能吗广州网站建设 易点
  • 石狮网站建设商城网站建设方案书
  • 建设旅游网站目的宜宾seo网站建设
  • 装修行业在什么网站上做推广好网站空间知识
  • 东莞 网站设计想学设计没有基础怎么办
  • 深深圳的网站建设公司小程序代码
  • 佛山新网站建设报价seo价格查询公司