KMP算法详解-转帖.docx
《KMP算法详解-转帖.docx》由会员分享,可在线阅读,更多相关《KMP算法详解-转帖.docx(10页珍藏版)》请在第壹文秘上搜索。
1、KMP算法详解转帖2010-02-2412:05个人觉得这篇文章是网上的介绍有关KMP算法更让人简洁理解的文章的确说得很“具体”,耐性地把它看完确定会有所收获的另外有关模式函数值nexti的确仃很多版本啊.在另外些面对对象的算法描述书中也仃失效函数f(j)的说法,其实是个意思,Pnextj=f(j-l)b不过还是nextj这种表示法好理解啊:KMP字符串模式匹配详解KMP字符串模式匹配通俗点说就是一种在一个字符印中定位另一个串的高效第法。简洁匹配算法的时间困难度为0(m*n);KMP匹配兑法。可以证明它的时间困难度为0(m+n).。.简洁匹配算法先来看一个简洁匹配算法的函数:intIndexB
2、F(ChHrS,charT,inipos)I/*若用S中从第POS(S的下标OWpOSGtr1.ength(三)个字符起存在和申T相同的子串,则称匹配胜利,返回第一个这样的子串在串S中的下标,否则返回-1*/inti=pos,j=0:while(Si+j!=0,UTj!=,0,)if(Si+j=Tj)j+;/接着比较后一字符else(i+;j=0:/重新起先新的一轮匹配)if(Tj=,0,)returni;/匹配胜利返回下标elsereturnT;串S中(第pos个字符起)不存在和串T相同的子串)/IndeX_BF此算法的思想是直截了当的:将主串S中某个位置i起始的了用和模式串T相比较。即从j
3、=0起比较Si+j与TlJ,若相等,则在主申S中存在以i为起始位置匹配胜利的可能性,接着往后比较(j逐步增1),直至与T串中最终一个字符相等为止,否则改从S串的卜.一个字符起重新起先进行卜.一轮的匹配”,即将用T向后滑动位,即i增1,而j退回至0,重新起先新轮的匹配,例如:在申S=abcabcabdabba”中查找T=abcabd(我们可以假设从下标0起先):先是比较S0和T0是否相等,然后比较SI:1和Tl是否相等我们发觉始终比较到S5和T5才不等。如图:当这样个失配发生时,T下标必需回溯到起先,S下标回溯的长度与T相同.然后S下标增1,然后再次比较。如图:这次立即发生了失配,T下标又回溯到
4、起先,S下标增I,然后再次比较。如图:这次立即发生/失配,T下标又回溯到起先,S下标增I,然后再次比较.如图:乂次发生了失配,所以T下标乂回溯到起先,S下标增1,然后再次比较。这次T中的全部字符都和s中相应的字符匹配函数返I可T在S中的起始下标3。如图:二.KMP匹配算法还是相同的例子,在S=abcabcabdabba”中查找T=abcabd”,假如运用KMP匹配算法,当第次搜寻到S5和T5不等后,S下标不是回溯到1,T下标也不是回溯到起先,而是依据T中T5=-d的模式函数值(ncxt5=2,为什么?后面讲),干脆比较S5和T2是否相等,因为相等,S和T的下标同时增加:因为乂相等,S和T的下标
5、乂同时增加。最终在S中找到了T。如图:KMP匹配算法和简洁匹配算法效率比较,个极端的例子是:在S=ttAAAAAA-AAB“(100个A)中查找T=,AAAAAAAAB,t,简洁匹配算法每次都是比较到T的结尾,发觉字符不同,然后T的下标回溯到起先,S的下标也要回溯相同长度后增1,接着比较。假如运用KMP匹配算法,就不必回溯.对于般文稿中用的匹配,简洁匹配算法的时间困难度可降为O(In-n),因此在多数的实际应用场合下被应用.KYP算法的核心思想是利用已经得到的部分匹配信息来进行后面的匹配过程。看前面的例子。为什么T5k=d的模式函数值等于2(nexc5=2),其实这个2表示T5=d的前面有2个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- KMP 算法 详解 转帖