- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第4章要点
4.4 字符串 4.4.4 模式匹配的KMP算法 改进简单模式匹配:例2 由例1可知 ②、③可省略 P[0]=P[3] 且P[1]=P[4] ④、⑤也可省略 P串有时 也无需回溯 4.4 字符串 4.4.4 模式匹配的KMP算法 KMP模式匹配算法思想 设主串S=”s0s1s2…sn-1 ”,模式串P=“p0p1p2…pm-1 ” 并设在S[i]≠P[j]处失配,如果模式串P中有一整数kj,使得: p0p1p2…pk-1=pj-kpj-k+1…pj-1是串P中最长的相等的前缀子串和后缀子串。 由于在S[i]≠P[j]处失配,故必有: pj-kpj-k+1…pj-1= si-k…si-2si-1 则: p0p1p2…pk-1 = si-k…si-2si-1 所以:下一趟比较可以从si和pk开始。 关键在于计算P中每一个字符对应的k! 4.4 字符串 4.4.4 模式匹配的KMP算法 失败函数,即计算模式串中每一个字符在发生失配时的回溯位置k。 设有长度为m的模式串p=p0 p1 … pm-1,失败函数 f 为: 4.4 字符串 4.4.4 模式匹配的KMP算法 失败函数计算举例 位置j 0 1 2 3 4 5 6 7 8 9 10 模式串P a b c a b c a b b a c f(j) -1 0 0 0 1 2 3 4 5 0 1 4.4 字符串 4.4.4 模式匹配的KMP算法 KMP算法 4.4 字符串 4.4.4 模式匹配的KMP算法 KMP匹配算法 int String::FindKMP(int i, String P) { if (i0 || in-1) { coutOut of bounds!endl; return -1; } int j = 0, m = P.n; while (in jm) if (j == -1 || str[i] == P.str[j]) { i++; j++; } else j = P.f[j]; //设置P串的回溯位置为该失配点j //的失败函数值f[j] return ((j==m) ? i-m : -1); } 4.4 字符串 4.4.4 模式匹配的KMP算法 失败函数递推计算公式 其中:m0 f 1(j) = f(j) f m(j) = f(f m-1(j)) 4.4 字符串 4.4.4 模式匹配的KMP算法 失败函数递推计算公式 4.4 字符串 4.4.4 模式匹配的KMP算法 利用递推计算公式,计算失败函数的C++程序 void String::Fail() // 计算失败函数 { int j = 0, k = -1; f[0] = -1; while (jn) if ((k == -1) || (str[j] == str[k])) { j++; k++; //k=-1或str[j]=str[k]时,j、k加1,无回溯 f[j] = k; } else k = f[k]; //str[j]不等于str[k]时,k回溯到f[k] } 4.4 字符串 4.4.4 模式匹配的KMP算法 计算失败函数的改进方法 无效回溯问题: 当S[i]≠P[j]时,j回溯到f[j]处,但是若P[j]=P[f[j]], 故S[i]≠P[f[j]],因此产生无效的回溯。 4.4 字符串 4.4.4 模式匹配的KMP算法 多余的回溯,可省略 4.4 字符串 4.4.4 模式匹配的KMP算法 计算失败函数的改进方法 void String::Fail () { int j=0,k=-1;f[0]=-1; while (jn) if ((k==-1) || (str[j]==str[k])){ j++; k++;
您可能关注的文档
- 数据库及程序设计01.pptx
- 数据库上课 第八讲 数据库的安全性与完整性.ppt
- 数据库实验.doc
- 数据库恢复.ppt
- 数据库模式设计及其规范化.ppt
- 数据库系统10.pptx
- 数据库系统5.pptx
- 班级教育管理的与跨越.ppt
- 数据库系统及应用教程期末复习.docx
- 数据库第8章.ppt
- 专题06 经济体制(我国的社会主义市场经济体制)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题11 世界多极化与经济全球化-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 专题03 经济发展与社会进步-5年(2020-2024)高考1年模拟政治真题分类汇编(浙江专用)(解析版).docx
- 专题09 文化传承与文化创新-5年(2020-2024)高考1年模拟政治真题分类汇编(北京专用)(原卷版).docx
- 5年(2020-2024)高考政治真题分类汇编专题08 社会进步(我国的个人收入分配与社会保障)(原卷版).docx
- 专题07 探索世界与把握规律-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 5年(2020-2024)高考政治真题分类汇编专题06 经济体制(我国的社会主义市场经济体制)(原卷版).docx
- 专题11 全面依法治国(治国理政的基本方式、法治中国建设、全面推进依法治国的基本要求)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题17 区域联系与区域协调发展-【好题汇编】十年(2015-2024)高考地理真题分类汇编(解析版).docx
- 专题01 中国特色社会主义-5年(2020-2024)高考1年模拟政治真题分类汇编(原卷版).docx
文档评论(0)