kmp分析和总结分析和总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 10 2 KMP 算法: KMP 算法是由 D.E.Knuth(克努特),J.H.Morris(莫里斯),V.R.Pratt(普拉特)等人共同提出的,该算法主要消除了主串指针(i 指针)的回溯,利用已经得到的部分匹配结果将模式串右滑尽可能远的一段距离再继续比较,从而使算法效率有某种程度的提高,O(n+m)。 先从例子入手(p82): 按 Brute-Force 算法 i=i-j+2=2-2+2=2,j=1 按 Brute-Force 算法 i=i-j+2=2-1+2=3,j=1 按 Brute-Force 算法 i=i-j+2=8-6+2=4,j=1,但从已匹配的情况看,模式串在 t[6]即“c”前的字符都是匹配的,再看已匹配的串“abaab”,t[1]t[2]与 t[4]t[5]相同,那么,因为t[4]t[5]与原串 s[6]s[7]匹配,所以t[1]t[2]必然与原串 s[6]s[7]匹配,因此说 t[3]可以直接与 s[8]匹配,按 KMP 算法 i=8,j=3 匹配成功。从上例看出在匹配不成功时,主串指针i 不动,j 指针也不回到第一个位置,而是回到一个恰当的位置,如果这时让 j 指针回到第一个位置,就可能错过有效的匹配,所以在主串指针 i 不动的前提下,j 指针回到哪个位置是问题的关键, 既不能将 j 右移太大,而错过有效的匹配,另一方面,又要利用成功的匹配,将j 右移尽可能地大,而提高匹配的效率,因此问题的关键是寻找模式串自身的规律。 // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 设s ? s 1 s2 ? sn ,t ?t 1 t2 ? tm 满足: s i ? j ?1  ?si ?1  ?t t ?1 ?  j ?1 t t 1 2 ?tk ?1 ?t t j ?k ?1  j ?k ? 2 ?t j ?1 (1 ? k ? j) 所以: // 直接比较s 和t ; i k 若不满足(2), 直接比较s 和t 。 i 1 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 设 s=” s s ... s ”, t=” t t ... t ”,在匹配过程中,当s ≠ t (1≤i≤n-m+1,1≤j≤m)时,存在(前面的j-1 个字符已匹配): 1 2 n ” s ... s ” =” t 1 2 t ... t m i j ” (1) i-j+1 i-1 1 2 j-1 若模式中存在可互相重叠的最长的真子串,满足: ” t1 t2 ... tk-1 ”=”tj-k+1 tj-k+2 ... tj-1 ” (2) 其中真子串最短可以是t1 ,即 t1。。t2-1 (k1),最长的是t1。。tj-1-1 (kj),所以(1kj)。 由(1)式说明模式串中的子串” t1 t2 ... tk-1 ”已和主串”si-k+1 si-k+2 ... si-1 ”匹配,下一次可直接比较si 和 tk ,若不存在(2)式, 则结合(1)式说明在” t1 ... t j-1 ” 中不存在任何以t1 为首字符子串与”si-j+1 si-j+2 ... s i-1 ”中以 si-1 为末字符的匹配子串,下一次可直接比较si 和 t1 。主串指针的不回溯,。 例(p82):主串 a c a b a a b a a b c a c a a b c 模式 a b a a b c a c 现在的问题是要求next 函数,next(j)的作用是,当s 与 t 匹配失败时,s 与 t 匹配。 i j i next(j) next 函数的定义如下: ↓↓↓↓↓↓↓↓↓图形拖放 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 模式串t的next函数: ?0 ?  j ? 1 next( j) ? ?max{k | (1 ? k ? j)

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档