DSchap4串.pptVIP

  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文档。上传文档
查看更多
DSchap4串

4.1 串的抽象数据类型的定义 基本操作: 4.2 串的表示和实现 一. 串的定长顺序存储表示 特点: 二. 串的堆分配存储表示 三. 串的块链存储表示 4.3 串的模式匹配算法 一. 简单算法 二. 首尾匹配算法 三. KMP (D.E.Knuth, V.R.Pratt, J.H.Morris) 算法 怎样计算模式T所有可能的失配点 j 所对应的 next[j]? 例: 模 式 串 T: a b a a b c a c 可能失配位 j: 1 2 3 4 5 6 7 8 新匹配位k=next[j] : KMP算法讨论(特点:速 度快) (1) KMP算法设计思想 (2) KMP算法的推导过程 (3) KMP算法的实现 (关键:计算next[j]) (4) KMP算法的时间复杂度 (1)KMP算法设计思想(参见教材P80-84) (2) KMP算法的推导过程:(见教材P81) (2) KMP算法的推导过程(续): ① next[ j ]有何物理意义? (3) KMP算法的实现—即Index( )操作的实现 第一步:先把模式T所有可能的失配点j 所对应的 next[j]计算出来; 第二步:执行定位函数Index_kmp (与BF算法模块非常相似) 怎样计算模式T所有可能的失配点 j 所对应的 next[j]? 例: 模 式 串 T: a b a a b c a c 可能失配位 j: 1 2 3 4 5 6 7 8 新匹配位k=next[j] : 讨论两个有关next [ j ]的问题: ① 如何计算next[j]? 可用递推法编程实现 (参见教材P.83程序) (4) KMP算法的时间复杂度 注意:由于BF算法在一般情况下的时间复杂度也近似于O(n+m),所以至今仍被广泛采用。 4.4 串的应用 附录: next函数的求法 本章小结 还有一种特殊情况需要考虑: 例如: S = ?aaabaaabaaabaaabaaab? T = ?aaaab? next[j]=01234 nextval[j]=00004 void get_nextval(SString T, int nextval[]) { i = 1; nextval[1] = 0; j = 0; while (i T[0]) { if (j == 0 || T[i] == T[j]) { ++i; ++j; if (T[i] != T[j]) next[i] = j; else nextval[i] = nextval[j]; } else j = nextval[j]; } } 经典算法之一! 尽量利用已经部分匹配的结果信息,尽量让i不回溯,加大模式串向右滑动的距离。 例: S=‘a b a b c a b c a c b a b’ T=‘a b c a c’ S=‘a b a b c a b c a c b a b’ T=‘a b c a c’ S=‘a b a b c a b c a c b a b’ T=‘a b c a c’ Index_kmp的返回值应为i=6 需要讨论两个问题: ①如何由当前部分匹配结果确定模式的新比较起点k? ②模式应该向右滑多远才是高效率的? i i i k k a b a a b c k i i i-T[0] 奇妙的结果: k 仅与模式串T有关! 请抓住部分匹配时的两个特征: 两式联立可得:‘T1…Tk-1’=‘Tj-(k-1) …Tj-1’ S=‘a b a b c a b c a c b a b’ T=‘a b c a c’ i k 则T的k-1~1位=S前i-1~i-(k-1)位 即(4-2)式含义 设目前要与T的第k字符开始比较 ① ② ‘T1…Tk-1’ 则T的j-1~j-(k-1)位=S前i-1~i-(k-1)位 即(4-3)式含义 i k j S=‘a b a b c a b c a c b a b’ T=‘a b c a c’ 刚才是在S的i处和T的第j字符 处失配 ‘Tj-(k-1) …Tj-1’ k是追求的新起点 加速的前提:T首与Tj处有相同子串 注意:j 为当前已知的失配位

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档