网站大量收购独家精品文档,联系QQ:2885784924

数据结构与算法第三章2山013.ppt

  1. 1、本文档共87页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法第三章2山013

朴素匹配算法:效率分析 假定目标T的长度为n,模式P长度为m,且 m ≤ n 在最坏的情况下,每一次循环都不成功,则一共要进行比较(n-m+1)次 每一次“相同匹配”比较所耗费的时间,是P和T逐个字符比较的时间,最坏情况下,共m次 因此,整个算法的最坏时间开销估计为 O(mn) 朴素匹配算法:最差情况 模式与目标的每一个长度为m的子串进行比较 目标形如an, 模式形如am-1b 总比较次数: O(n-m+1) 时间复杂度: O(mn) AAAAAAAAAAAAAAAAAAAAAA AAAAB 5次比较 AAAAAAAAAAAAAAAAAAAAAA AAAAB 5次比较 AAAAAAAAAAAAAAAAAAAAAA AAAAB 5次比较 AAAAAAAAAAAAAAAAAAAAAA AAAAB 5次比较 ………… AAAAAAAAAAAAAAAAAAAAAA AAAAB 5次比较 朴素匹配算法: 最佳情况-没找到模式 总是在第一个字符上不匹配 总比较次数: n-m+1 时间复杂度: O(n) AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 ………… AAAAAAAAAAAAAAAAAAAAAH 1次比较 OOOOH 朴素模式匹配算法: 最佳情况--找到模式 在目标的前m个位置上找到模式,设 m = 5 总比较次数:m 时间复杂度:O(m) AAAAAAAAAAAAAAAAAAAAAB AAAAA 5次比较 朴素算法的问题:回溯 朴素算法之所以效率不高的原因在于匹配过程中目标串有回溯,且这些回溯并非必要 e.g., 由1)可知: P5 ? T5, P0=T0, P1 = T1,,同时由 P0 ?P1可得知P0?T1 故将 P 右移一位后第2)趟比较一定不等; 比较冗余 那么把P右移几位合适? 既能消除冗余比较又保证不丢失配串呢? T a b a c a a b a c c a b a c a b a a P a b a c a b 1)P5 ? T5 P右移一位 T a b a c a a b a c c a b a c a b a a P a b a c a b 2)P0 ? T1 P右移一位 T a b a c a a b a c c a b a c a b a a P a b a c a b 3)P1 ? T3 P右移一位 T a b a c a a b a c c a b a c a b a a P a b a c a b ……. 无回溯匹配算法 关键在于匹配过程中,一旦Pi 和Tj比较不等时,即 substr(P,1,i-1) = substr(T, j-i+1,i-1) 且 Pi ? Tj 要能立即确定右移的位数和继续比较的字符,即该用P中的哪个字符和Tj进行比较? 如何定位? 保留之前比较的结果? 若把这个字符记为Pk,显然有ki, 且不同的i,其 k值不同 KMP算法 Knuth-Morris-Pratt (KMP)算法发现每个字符对应的该k值仅依赖于模式P本身,与目标对象T无关 1970年,S. A. Cook在进行抽象机的理论研究时证明了在最差情况下模式匹配可在N+M时间内完成 此后,D. E. Knuth 和V. R. Pratt以此理论为基础,构造了一种方法来在N+M时间内进行模式匹配,与此同时,J. H. Morris在开发文本编辑器时为了避免在检索文本时的回溯也得到了同样的算法 KMP算法思想 T T0 T1 … Ti-j-1 Ti-j Ti-j+1 Ti-j+2 … Ti-2 Ti-1 Ti … Tn-1 ‖ ‖ ‖ ‖ ‖ ? P p0 p1 p2 … pj-2 pj -1 pj 则有 Ti-j Ti-j+1 Ti-j+2 … Ti-1 = p0 p1 p2 …pj-1

文档评论(0)

186****0772 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档