社区
软件水平考试
帖子详情
请高手详细讲讲KMP算法(谢谢先)
free12345
2004-11-03 08:27:27
偶看此算法时觉的书上讲的很乱,而且有的地方有些问题,请高手帮忙讲一下。
...全文
455
20
打赏
收藏
请高手详细讲讲KMP算法(谢谢先)
偶看此算法时觉的书上讲的很乱,而且有的地方有些问题,请高手帮忙讲一下。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fanyuanmail
2004-11-07
打赏
举报
回复
huich的方法很对,
也讲的很清楚,其实很简单的。
不过有时让算NEXTVAL的数组
huich
2004-11-05
打赏
举报
回复
看它前面是否有一个最长的 "字符串"和从第一个字符开始的 "字符串" 相等, 若一个都没有就为1;如果有,你就把它找出来,看它有多长;next就是其长度加1
比如 模式是 "abaabcac" 的 next[j];
1.a 一定是 0 //第一个
2.b 一定是 1
3.为a,前一个为b,b != a(a为第一个字符),所以next[a] = 1;
4.为a,前一个为a,a == a,相等就再看ab != ba,所以next[a] = 2;(1+1)
5.为b,同上理有a==a,相等就再看ab != aa,所以next[b] = 2;(1+1)
6.为c,前一个为c, b!=a,ab==ab,所以next[c] = 3;(2+1)
7.为a,都没有相等的,所以next[a] = 1;
8.为c,a==a,所以next[c] = 2
next[j]=01122312
minanqiang
2004-11-05
打赏
举报
回复
UP
hackingtruth
2004-11-04
打赏
举报
回复
做个标记先
metaphor
2004-11-04
打赏
举报
回复
就是求一个字符串的前缀在右面什么地方又出现了一次
比如abbbbab,我比到最后一个b失败了,我就可以把字符串推进5格再比,
而简单的比法是一次推进1格
wegotnothingtolosebu
2004-11-04
打赏
举报
回复
假设文本串“t1,t2,…tn”, 模式串为“p1,p2,…pn”,当文本串中的第I个字符与模式中第j个字符不匹配时,文本串的第i个字符再与模式串中的第k个字符进行比较,则模式中前k-1个字符的子串必须满足下面的关系式:’p1,p2…pk-1’=’pj-k+1,pj-k+2…pj-1
若令next[j]=k, 则next[j]表明当模式中第j个字符与文本串中相应字符不匹配时,在模式中需要从新和文本串中该字符进行比较的字符的位置。
next[j]=0,当j=1时
next[j]=max,{k|1<k<j,且’p1p2…pk-1’=’pj-k+1,pj-k+2…pj-1’}
next[j]=1,其他情况
此时,kmp算法如下:
1)假设以指针i和j 分别指示文本串和模式串中的比较字符,令i和j的初值为1,开始匹配
2)若在匹配过程中ti=pj, 则i和j分别增1
3)若不相等,匹配失败后,则I不变,j退到next[j]位置在进行比较
4)若相等,则指针各增1,否则j再退到下一个next值的位置
5)依此类推,直至下列两种情况:一种是j退到某个next值时字符比较相等,则i和j分别增1,继续进行匹配;另一种是j退到值为0(即模式的第一个字符失配),则i和j也分别增1,表明从文本串的狭义个字符起和模式串重新开始匹配。
shiyi0927
2004-11-04
打赏
举报
回复
还是不明白啊!
free12345
2004-11-04
打赏
举报
回复
高手呢?
loveweiwei
2004-11-04
打赏
举报
回复
给个详细的例子吧。。把过程也讲一下。。谢谢!
gll30
2004-11-04
打赏
举报
回复
搜索一下把,关键字“next”,已经有人讨论过了,方法狂好
free12345
2004-11-04
打赏
举报
回复
举例说一下吧,
比如 模式是 "abaabcac" 的 next[j]
奇型怪状
2004-11-04
打赏
举报
回复
顶一下先
wegotnothingtolosebu
2004-11-04
打赏
举报
回复
这个要说明白还真不容易。我当初也想了大半天不明白。试这样想想,如果你要自己设计这个算法,你要怎么样做?
如果是考高程的话,估计不会考这个。倒是考研常考这个。4
free12345
2004-11-04
打赏
举报
回复
真的没有人给讲一下么,急啊
feetu
2004-11-04
打赏
举报
回复
淹死好几次了
zhouqi66
2004-11-04
打赏
举报
回复
next[]是根据字符串格式判断需要回退几个步的一组数据,求解方法教程上有吧?
free12345
2004-11-04
打赏
举报
回复
fanyuanmail(yuanyuan)
能将一下next[j]的求解方法么?
free12345
2004-11-04
打赏
举报
回复
谢谢,wegotnothingtolosebu(再教育,把穷人通通打昏!!) ,
谁能再详细的讲一下 next[]数组呢?
fanyuanmail
2004-11-04
打赏
举报
回复
其实KMP的题大部分都是靠NEXT和NEXTVAL
会手工求这两个,大部分考试都能应付
wegotnothingtolosebu
2004-11-03
打赏
举报
回复
相较于传统的简单比较算法,KMP算法的长处在于在比较过程中没有对目标字符串的回溯。
算法思想描述如下:
设目标字符串为S,模式字符串为P
若Si Si+1 … Si+j == P0 P1 … Pj 且 Si+j+1 !=Pj+1
如果我们知道 P0 P1 … Pk == Pj-k Pj-k+1 … Pj,那么就可以从Si+j+1和Pk+1继续开始比较过程,从而避免对S的回溯。
由于P是已知的,所以在这个算法一开始,首先建立一个j到k的映射f.
下面考虑算法的时间复杂度。设S的长度为n,P的长度为m
显然,对S的计算过程时间复杂度为O(n).
在计算映射f时,如果简单比较,时间复杂度是O(m^2).采用一些小技巧,可以将它降到O(m):
如果已知f(j)==k,那么若Pk+1==Pj+1,则f(j+1)=k+1,否则比较Pf(k)+1和Pj+1.如此反复一直到找到匹配。
KMP算法
详解
文章目录
KMP算法
前置知识串的基本概念C++C++C++中stringstringstring库的函数KMP核心算法—next数组KMP匹配next数组计算例题
KMP算法
改进其他字符串知识点计算最长前缀后缀计算循环节补充字符使原字符串变为循环串
KMP算法
KMPKMP
KMP算法
是字符串匹配中的一个较好的算法,它的目的是在给定一个模式串ppp和原字符串qqq中,找到ppp在qqq中第一次出现的位置。 如上图所示,可以很简单的看出字符串ppp在字符串qqq中第一次出现的位置,如果位置从1开始计算的话
C语言算法~BF算法和
KMP算法
在开始今天的两个算法之前,我们
先
由strstr引入,因为这两个算法与我们strstr对应的功能是十分相似的。这个是在我们的这个搜索得到的,(里面有例子和对其的功能解析哦。)其实小赵在这里大致翻译一下就是,在str1中找到我们的str2的内容然后接着打印。比如我们的str1是abcd,str2是bc那么它输出的就是bcd。在这里小赵再用代码帮助大家理解一下。相信家人们通过小赵这样的举例一定明白了,对不对,那么我们下面就要进入我们的正餐。
KMP算法
的
详细
理解
很早就想写关于这个算法的具体分析,可是一直很懒的去思考这个问题。现在快要杭电的计算机复试了,复试内容我选择的是数据结构。让我又重新燃起了要对
KMP算法
的分析。它是我第一个碰见的比较难的关于字符串的算法。所以很有兴趣想好好的了解一下,也让我能对他更好的了解。讲
KMP算法
的时候,通常都会提及BF算法.BF算法相对简单点,具体的做法是"对主串和子串进行一个一个的字符的比较,当碰到相同的字符的时候,则分别指向下一个字符,然后在进行比较。如果在比较过程中发现两个字符不同则进行回退。讲子串的退回到第一个字符,而主串退回
KMP算法
通俗讲解以及Java实现
KMP算法
是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出,所以被称为看毛片算法(我可不知道毛片是什么东西)。 其核心思想就是利用模式串的局部对称,在每一次匹配失败后,达到一种玄幻的跳跃,极大加快匹配速度。玄幻如下: (注:上串为主串,下串为模式串) 当主串与模式串匹配到i=j=4时,发现不匹配,
KMP算法
下发生了恐怖事件,匹配状态直接变为下图。 ...
我用动画给大厂的面试官讲明白了 KMP 算法
大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋。 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情。 毕竟想牛逼也是很难的,并不是我说了算,前几天更新的的 BF 和 RK 算法,就被后台小伙伴的留言疯狂石锤,哼!你牛逼你就
讲讲
KMP 算法,我要石锤。 这几天吓得俺吃饭吃不消,睡觉睡不香,干啥啥不行,这无数的与 KMP...
软件水平考试
2,957
社区成员
22,568
社区内容
发帖
与我相关
我的任务
软件水平考试
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
复制链接
扫一扫
分享
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证
c4java
c4前端
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章