- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串精确匹配算法改进探讨
字符串精确匹配算法改进探讨
摘要:如何改进字符串匹配算法,提高查询速度,是目前研究的重要领域之一,本文在对BF算法、KMP算法、BM算法、BMH算法、RK算法和SUNDAY算法等几种常见算法分析的基础上,提出改进的意见。
关键词:精确匹配;KMP算法;模糊匹配
一、引言
字符串精确匹配在计算机领域有着广泛的应用, 它可用于数据处理、数据压缩、文本编辑、信息检索等多方面。如何改进字符串匹配算法,提高查询速度,是目前研究的重要领域之一。
所谓精确字符串匹配问题,是在文本 S中找到所有与查询 P 精确匹配的子串。字符串精确匹配要求匹配严格准确,其实现算法主要有BF算法、KMP算法、BM算法、BMH算法、RK算法和SUNDAY算法等。本文在对这几种常见算法分析的基础上,提出改进的意见。
二、常见算法分析
1.BF算法
BF(Brute Force)算法是效率最低的算法。其核心思想是:T是文本串,P是模式串。首先S[1]和P[1]比较,若相等,则再比较S[2]和P[2],一直到P[M]为止;若S[1]和P[1]不等,则P 向右移动一个字符的位置,再依次进行比较。如果存在t,1≤t≤N,且S[t+1..t+M]= P[1..M],则匹配成功;否则失败。该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。
2.KMP 算法
KMP(Knuth-Morris-Pratt)算法是D.E.Knuth、J.H.Morris和V.R.Pratt 3 人于1977 年提出来的。其核心思想是:在匹配失败时,正文不需要回溯,而是利用已经得到的“部分匹配”结果将模式串右移尽可能远的距离,继续进行比较。这里要强调的是,模式串不一定向右移动一个字符的位置,右移也不一定必须从模式串起点处重新试匹配,即模式串一次可以右移多个字符的位置,右移后可以从模式串起点后的某处开始试匹配。KMP算法的时间复杂度是O(m+n),最坏情况下时间复杂度为O(m*n)。空间复杂度是O(m),对BF算法进行了很大的改进。虽然,KMP 算法有着它自身的局限性,但是,在现代科学的众多领域中的应用仍然普遍。
3.BM算法
1977 年,Boyer 和Moore 提出了一个全新的模式匹配算法――BM 算法。该算法在匹配过程中,模式串从左向右移动,但字符比较按照P[M]、P[M-1]、...、P[1]的次序从右向左进行。BM 算法的一个最主要的特点是:在匹配过程中,可以跳过很多无用的字符。通过这种跳跃式的匹配,获得了极高的匹配效率。该算法的核心思想是:对于模式串P,定义一个函数d:Σ → {1, 2, ...,M } ,函数d 给出了正文中可能出现的字符在模式中的位置。该算法最坏情况下的时间复杂度为O(N*M)。但由于在实际应用中这种情况极少出现,因此BM算法仍得到广泛的应用。
4.BMH算法
1980 年, Horspool 提出了对BM 算法的一种改进算法――BMH算法。它首先比较文本指针所指字符和模式的最后一个字符,如相等再比较其余m - 1个字符。无论文本中哪个字符造成了匹配失败,都将由文本中和模式最后一个位置对应的字符来启发模式向右的滑动。即文本自位置I起与模式的从右至左的匹配检查中, 一旦发现不匹配,就将I重新赋值为End + d[T[End]]。(End是一个中间变量,记录了文本中每次从右至左匹配的起始位置)
5.RK算法
RK算法是Turing奖获得者R.M.Karp和M.O.Rabin在1981年提出来的,该算法采用了与KMP算法和BM算法完全不同的方法。该算法利用Hash方法和素数理论,首先定义一个Hash函数,然后将模式串P和文本串T中长度为m的子串利用Hash函数转换成数值。显然只需比较那些与模式串具有相同Hash函数值的子串,从而提高了效率。当然因为Hash冲突的存在,还要进一步进行字符串比较,但只要选择适当的素数Hash冲突的概率就会很小。RK算法的时间复杂度是O(n+m)。
6.Sunday 算法
Sunday 算法是Daniel M.Sunday 于1990年提出的一种比BM算法搜索速度更快的算法。该算法的核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时, 算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。按照这种字串移动算法,然后按照字符从右向左的次序匹配。如果完全匹配了,则匹配成功;否则,再进行下一轮的移动,直到正文T 的最右端结束。该算法最坏
情况下的时间复杂度为O(N*M)。对于短模式串的匹配问题,该算法执行速度较快。
您可能关注的文档
最近下载
- 4 JieLink+智能终端操作平台系统调试说明书V1.0.doc
- 2022数学新课标背景下:基于项目式学习的创新教学实例.docx VIP
- 有机合成第六章.ppt VIP
- 抖音来客本地服务行业实体门店运营培训教程(三)抖音实体门店商家经营思路.pptx
- (正式版)D-L∕T 5862-2023 电化学储能电站施工图设计内容深度规定.docx VIP
- 苏教版三年级数学下册《全程测评卷》.doc
- 2024年~2022年浙江省国企招聘历年面试题目及答案解析50套.docx
- 高中物理游标卡尺、千分尺、螺旋测微器读数习题集.doc
- 中考英语作文万能模板及万能句型汇总.docx VIP
- 五个认同爱国主义教育课件.pptx
文档评论(0)