数据结构 (C语言版)课件:第4章_串.pptVIP

数据结构 (C语言版)课件:第4章_串.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文档。上传文档
查看更多
Status SubString (StringType s, int pos, int len, StringType *sub) { int k, j ; if (pos1||poss.length||len0||len(s.length-pos+1)) return ERROR ; /* 参数非法 */ sub-length=len-pos+1 ; /* 求得子串长度 */ for (j=0, k=pos ; k=leng ; k++, j++) sub-str[j]=s.str[i] ; /* 逐个字符复制求得子串 */ return OK ; } Knuth-Morris-Pratt KMP算法思想 KMP算法思想 Next [ j ]= 求next[j+1]的步骤如下: 采用递归思想,此时,模式串既是主串又是子串了。 ① 判断主串的Pj是否等于子串的Pk。 ② 若两者相等,有next[j+1]=k+1; 否则由于子串的Pk失配,应将子串P的next[k]与主串Pj再做比较(相当于子串右滑),即取k=next[k],转①。 T[0] 存放模式字符串长度。 KMP匹配过程举例 主串s=“aabcbabcaabcaababc”, 模式t=“abcaababc” J 1 2 3 4 5 6 7 8 9 模式串 a b c a a b a b c next[j] 0 1 1 1 2 2 3 2 3 算法 ● BF 算法设计 4.3.1 简单的模式匹配方法 4.3 串的模式匹配 ● 最坏情况下每趟不成功匹配都发生在 T 最后一个字符 ( S 长为 n,T 长为 m)。 例如: S=aaaaaaaaaaab T=“aaab ● 最好情况下每趟不成功匹配都发生在 T 第一个字符 ( S 长为 n,T 长为 m)。 例如: S=aaaaaaaaaabc T=bc 分析 因此,该算法在最好情况下时间复杂度为 O(n+m)。 因此,该算法在最坏情况下时间复杂度为 O(n?m)。 等概率情况下,pi=1/(n-m+1)),平均比较次数是: 等概率情况下,pi=1/(n-m+1)),平均比较次数是: 时间复杂度为 O(n?m) ● BF 算法设计 4.3.1 简单的模式匹配方法 4.3 串的模式匹配 Professor Emeritus of The Art of Computer Programming at Stanford University, welcomes you to his home page. Donald E. Knuth,1938年出生于Wisconsin。1960年,当他毕业于Case Institute of Technology数学系时,因为成绩过于出色,被校方打破历史惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院数学系,仅用三年时间便取得博士学位,此时年仅25岁。 毕业后留校任助理教授,28岁时升为副教授。30岁时,加盟斯坦福大学计算机系,任正教授。从31岁那年起,他开始出版他的历史性经典巨著:The Art of Computer Programming。他计划共写7卷,然而仅仅出版三卷之后,已经震惊世界,使他获得计算机科学界的最高荣誉Turing Award!此时,他年仅38岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,被评为“世界历史上最伟大的十种科学著作”之一。 4.3.2 改进的模式匹配方法 BF 算法的特点是非常简单,但效率较低,其原因是回溯,即在某趟匹配失败后对于主串 S 要回溯到本趟匹配开始字符的下一个字符,模式 T 要回溯到第一个字符。 一种对其做了很大改进的模式匹配算法是 KMP 算法,可以在 O(n+m) 的时间数量级上完成串的模式匹配操作,其基本思想是:主串 S 不进行回溯,即主串 S 中的每个字符只参加一次比较。 4.3 串的模式匹配 ● KMP 算法思想 4.3.2 改进的模式匹配方法 4.3 串的模式匹配 在第 1 趟匹配中,s1 ~ s2 和 t1 ~ t2 匹配成功,s3 ? t3 匹配失败。因为 s2 = t2,而 t1 ? t2,肯定有 t1 ? s2,所以第 2 趟匹配不必要,可直接进入第 3 趟。 在第 3 趟匹配中,s3 ~ s6 和 t1 ~ t4 匹配成功,s7 ? t5 匹配失败。因为 s4 = t2,而 t1

文档评论(0)

学习让人进步 + 关注
实名认证
文档贡献者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档