



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. KMP算法是一种线性时间复杂度的字符串匹配算法,它是对BF算法(Brute-Force,最基本的字符串匹配算法)的改进。对于给定的原始字符串string和模式字符串p,需要从字符串s中找出p(首次)出现的位置索引:BF算法的时间复杂度为O(strlen(s)*strlen(p),空间复杂度为O(1);KMP算法的时间复杂度为O(strlen(s)+strlen(p),空间复杂度为O(strlen(p);2. 两种算法的主要区别是失配时的处理:假设串s匹配到i位置,串p匹配到j位置:BF算法中,如果当前字符匹配成功,即si+j=p j,则令j+,继续匹配下一个字符;如果匹配失败,即s i+j!=p j,则让i+并且j=0,即每次失配时,原串匹配位置向右移动一位(从i+j回溯到i+1),而j重置为0。而KMP算法则是在发生失配时,根据模式中字符和失配在模式中出现的位置,来确定继续进行搜索(j)的位置,而i的位置不会向后回溯。3. 例如:假定p=abcabcacab,令字符串s=s0s1sm-1,且假设现在要判断是否存在从 si开始的匹配。a. 如果sia,那么显然可以进行si+1与a的比较;b. 类似地,如果si=a且si+1b,那么进行si+1与a的比较;c. 如果sisi+1=ab且si+2c,则出现如下情况:s=-ab?p=abcabcacab符号?表示不知道s中此处字符是什么,在s中第一个?代表si+2且si+2c,因此,搜索的下一步应该是对p的首字符和si+2进行比较。这里无需比较p的首字符和si+1,因为已经知道si+1与p的第二个字符相同为b,即si+1a;d. 以此类推,假定出现了p前4个字母的匹配,然后失配,即si+4b。则出现如下情况:s=-abca?p=abcabcacab通过观察可以看到,匹配搜索可以继续把si+4与第二个字符b进行比较。这是在把模式p向右滑动时,发生部分匹配的第一处。因此,通过模式中的字符和失配在模式中出现的位置,就可以确定在模式中继续进行匹配搜索的位置,而不必在s中进行回溯。4. 为了形式化说明,定义一个模式失配函数:令p=p0p1pn-1是一个模式,则其失配函数f定义为:fj=i为满足ij且使得p0p1pi=pj-ipj-i+1pj的最大整数, 如果i0-1, 否则例如: 对于模式p=abcabcacab,有:j 0 1 2 3 4 5 6 7 8 9p a b c a b c a c a b f -1 -1 -1 0 1 2 3 -1 0 1根据失配函数的定义,得到如下模式匹配规则:如果出现了形如si-jsi-1=p0p1pj-1且sipj的部分匹配,若j0,则下一趟模式匹配时,从失配字符si和模式串字符pfj-1+1处重新开始比较;若j=0,则继续比较si+1和p0。按上述匹配规则实现的匹配函数为:int str_pmatch(char *s, char *p, char* failure)if (NULL = s | NULL = p | NULL = failure)return -1;int lens = strlen(s);int lenp = strlen(p);int i = 0, j = 0;while (i lens & j lenp)if (si = pj)i+;j+;else if (j = 0)i+;elsej = failurej - 1 + 1;free(failure);return (j = lenp) ? (i - lenp) : -1);易知str_pmatch的时间复杂度为O(strlen(s),如果能在strlen(p)的时间复杂度内求出失配函数failure,则算法的整个时间复杂度为O(strlen(s) + strlen(p)。5. 要想在O(strlen(p)时间内计算出失配函数,需要利用失配函数的令一种表达形式:fj= -1, 如果j=0fmj-1+1,如果m满足等式pfkj-1+1=pj的最小整数k-1,如果没有满足上式的k值注意:f1j=fj ,fmj=ffm-1j。(这个表达形式如何证明?)和以上定义对应的失配函数计算方法如下:void str_fail(char *pat, char* failure)int n = strlen(pat);failure0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台区块链智能合约安全漏洞报告与分析
- 2025年环保产业技术创新动态产业升级路径实践策略研究报告
- 2025年生态修复工程中城市绿地生态系统服务功能评价研究
- 2025年环境影响评价中公众参与的法律问题与对策报告
- 长期土地租赁合同范本
- 理财公司贷款合同范本
- 购买抗原模板合同范本
- 株洲门面装修合同范本
- 道路施工环保合同范本
- 酒店住宿月结合同范本
- DB1331-T 025.4-2022 雄安新区工程建设关键质量指标体系:合交通
- 2024至2030年中国喷水推进器行业发展形势分析及市场前景趋势报告
- 陶渊明专题课件
- 人参培训课件
- 四川省价建筑地下结构抗浮锚杆技术标准
- 2023年航空公司招聘:机场安检员基础知识试题(附答案)
- 糖尿病临床病例分析经典案例
- 老年人体检分析报告总结
- 第4课《用联系的观点看问题》第2框《在和谐共处中实现人生发展》-【中职专用】《哲学与人生》同步课堂课件
- 计量安全防护
- 食品生物技术原理课件
评论
0/150
提交评论