计算机算法基础教学课件ppt作者沈孝钧第13章-PPT-N2课件.pptVIP

计算机算法基础教学课件ppt作者沈孝钧第13章-PPT-N2课件.ppt

  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文档。上传文档
查看更多
计算机算法基础教学课件ppt作者沈孝钧第13章-PPT-N2课件.ppt

13-32 (接上页) 如果?[q] ? P[k+1],那么必须把P 向右滑动。我们注意到,与Pq 的后缀匹配的字符串在去掉最后一个字符后必定与Pq-1 的后缀匹配。因此,我们考虑下一个与Pq-1 的后缀匹配的模式的前缀Pk’。 如果Pk’和Pq-1后缀匹配,必与Pk后缀匹配,因此有k’ = ?[k]。下图(13-10)显示了这个关系。这时,如果有P[q] = P[k’+1],那么?[q] = k’+1 = ?[k] + 1。 如果P[q] ? P[k’+1],那么继续将P向右滑动到下一个与Pq-1的后缀匹配的前缀Pk’’,k’’=?[k’]。这时,如果P[q]=P[k’’+1],那么?[q]= k’’+1,否则继续这个过程。算法的第4行的while循环就是做的这件事。 循环结束时,要么k = 0,要么P[k+1] = P[q]。如果P[k+1] = P[q], 不论k = 0 还是 k ? 0, 由分析应该是P[q] = k + 1。否则P[q] = k = 0。所以算法正确地计算P的前缀函数。 13-33 P[q] q -1 ? P[k+1] k P[k’+1] k’ 算法Compute-Prefix-Function的时间复杂度是O(m)。这是因为变量k在第8行被加 1,一共增加了最多 (m-1) 次,总共增加的值最多是(m-1)。因为k的值始终是非负整数, 所以k 被减少的次数最多是 (m-1) 次,因此算法第4行的while循环总共被执行了最多(m-1) 次,所以算法Compute-Prefix-Function的时间复杂度是O(m)。 13-34 基於前缀函数的KMP算法 KMP-Matcher(T[1..n], P[1..m]) ? ? Compute-Prefix-Function(P[1..m]) //先算前缀函数 q ? 0 //已匹配的字符个数为q for i ? 1 to n //从左到右扫描每个字符 while q 0 and P[q+1] ? T[i] //已知Pq = T[i-q .. i-1] q ? ?[q] //滑动P到下个与Pq后缀相配位置 endwhile if P[q+1] = T[i] //循环结束的一种可能,q加1 then q ? q + 1 //现在,已匹配的字符个数为q+1 endif if q = m //模式得到匹配,输出这个合法移位 then print “Pattern occurs with shift” i-m q ? ?[q] //更新为下一个前缀函数 endif endfor //对T[i]的扫描完成。 End 13-35一 KMP-Matcher 的复杂度分析 主要部分是第3行的for 循环。每次循环,算法可能做三件事: 如果P[q+1] ? T[i],向右滑动P到下个可能相配位置,变量q减小。 如果P[q+1] = T[i],变量q加1。 如果q = m,则报告合法位移。 因为合法移位的个数 ≤ n – m + 1,做第3件事的时间为O(n)。 做第2件事的次数不会大于n, 因为每做一次,变量i就会加1。 最后,做第1件事的次数也不会大于n, 这是因为每做一次,变量q至少会减1,由于q的初值为0,而且始终不为负值,所以变量q被减少的总数不会超过q被增加的总数。又因为q被增加的唯一原因是算法做了第2件事,每做一次,q加1,因此q被增加的总数不大于n,从而算法做第1件事的次数也不会大于n。所以,KMP-Matcher 的复杂度为O(n)。 13-36 例13.8 以模式P = abaab和文本 T = ababaababaaabaab为例解释KMP算法。 解: KMP算法先计算P的每个前缀的前缀函数如下表所列。 i 1 2 3 4 5 P[i] a b a a b ?[i] 0 0 1 1 2 基于这个前缀表,下面表格计算出到文本每一字符为止,变量q值。在计算中,一个字符的q值可能须要查找前缀表多次,表中列出这一过程。例如,i = 12时,第一次找到前缀k = 1, 然后k’ = 0。 i 初始 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 T[i] -- a b a b a a b a b a a a b a a b 前面前缀q ? ? ? ? 1 ? ? ? ?2 1 ? ? 1,0 ? ? ? ? 最终前缀q 0 1 2 3 2 3 4 5 3 2 3 4 1 2 3 4 5 更新后q ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? 2 合法移位 -- -- -- -- -- -- -- 2 -- --

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档