DS04_字符串1.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文档。上传文档
查看更多
对特征向量N的优化 通过前面的例子来说明 对特征向量N的优化 通过前面的例子来说明 两种匹配方式 精确匹配(Exact String Matching):即使目标与模式只有一个字符不同就匹配失败的匹配方式 单选的,”Set” ; 多选的,模式”S?t” 正则表达式表示的模式 近似匹配(Approximate String Matching): 如果模式P与目标T(或其子串)存在某种程度的相似,则认为匹配成功。 常用的衡量字符串相似度的方法是根据一个串转换成另一个串所需的基本操作数目来确定。基本操作由字符串的插入、删除和替换三种操作来组成 本课程仅讨论此种情况 本课程讨论的字符串模式匹配:问题定义 用给定的模式P,在目标字符串T中搜索与模式P全同的一个子串,并求出T中第一个和P全同匹配的子串(简称为“配串”),返回其首字符位置 T T0 T1 … TiTi+1 Ti+2 … Ti+m-2 Ti+m-1 … Tn-1 ‖‖ ‖ ‖ ‖ P p0 p1 p2 … pm -2 pm-1 为使模式 P 与目标 T 匹配,必须满足 p0 p1 p2 …pm-1 = Ti Ti+1 Ti+2 … Ti+m-1 模式匹配的算法 算法的目标 效率——在大文本(诸如,句子、段落,或书本)中定位(查找)特定的模式,效率十分关键 一篇文章可能有上万字 一个人类染色体长度包含30亿个符号 讨论两种算法 朴素的模式匹配算法 KMP模式匹配算法 4.3.2朴素的模式匹配算法 基本思路: 设T= T0T1, T2, …,Tn,P = p1, p2, …, pm j为指向T中字符的指针,i为指向P中字符的指针 匹配成功(p1 = Tj , p2 = Tj+1 , …, pm = Tj+m-1 ) 即,subTtr(T, j, m) 匹配失败 (pi≠Tj)时, 将P右移再行比较 尝试所有的可能情况 朴素算法思路图示 朴素算法示例 把模式与目标逐一进行比较,直到碰到不匹配的字符为止 算法可在第一个匹配或是目标的结束处停止 a b a c a b a b a c a b a b a c a a c a b c a b a c a b a a 0 1 2 3 4 5 8 7 6 9 10 11 12 13 14 15 16 17 a b a c a b a b a c a b a b a c a b a b a c a b ………… a b a c a b 朴素算法实现 int NaviStrMatching(const string S, string P, int startIndex) { // 从S末尾倒数一个模板长度位置 int LastIndex = S.length - P.length // 开始匹配位置startindex的值过大,匹配无法成功 if (LastIndex startindex) return (-1); // i 是指向S内部字符的游标,j 是指向P内部字符的游标 int i = 0, j = startIndex; while (i P.length j S.length) if (P.str[i] == S.str[j]) { i++; j++; } else { j = j - i + 1; i = 0; // 回溯 } // 如果匹配成功,则返回该S子串的开始位置;如果P和S匹配失败,函数返回值为负 if ( i = P.length) return (j-P.length+1); else return -1; } 朴素算法的效率分析 假定目标T的长度为n,模式P长度为m, m≤n 分最佳、最差不同情况进行讨论 最佳情况(且匹配成功) 在目标的前M个位置上找到模式,设 M = 5 总比较次数:M 时间复杂度:O(M) AAAAAAAAAAAAAAAAAAAAAH AAAAA 5次比较 最佳情况(且匹配不成功) 总是在第一个字符上不匹配 总比较次数: N-M+1 时间复杂度: O(N) AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 AAAAAAAAAAAAAAAAAAAAAH OOOOH 1次比较 AAAAAAAAAAAAAAAAA

文档评论(0)

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

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

1亿VIP精品文档

相关文档