社区
软件水平考试
帖子详情
请高手详细讲讲KMP算法(谢谢先)
free12345
2004-11-03 08:27:27
偶看此算法时觉的书上讲的很乱,而且有的地方有些问题,请高手帮忙讲一下。
...全文
380
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算法
是我们数据结构串中最难也是最重要的算法。难是因为
KMP算法
的代码很优美...这篇文章将尽量以最简单的方式介绍
KMP算法
以及他的改进,文章的开始我
先
对
kmp算法
的三位创始人Knuth,Morris,Pratt致敬,懂得这...
KMP算法
最浅显理解——一看就明白
KMP算法
看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥。 这里不扯概念,只讲...
KMP算法
详解
在此,综合网上比较好的几个博客(参见最后),尽自己的努力争取将
kmp算法
思想和实现讲清楚。
kmp算法
完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法...
(算法)通俗易懂的字符串匹配
KMP算法
及求next值算法
大多数据结构课本中,串涉及的内容即串的模式匹配,需要掌握的是朴素算法、
KMP算法
及next值的求法。在考研备考中,参考严奶奶的教材,我也是在关于求next值的算法中卡了一下午时间,感觉挺有意思的,把一些思考的...
什么是
KMP算法
(详解)
什么是
KMP算法
: KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!
KMP算法
要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说...
软件水平考试
2,948
社区成员
22,580
社区内容
发帖
与我相关
我的任务
软件水平考试
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
复制链接
扫一扫
分享
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证
c4java
c4前端
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章