- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串算法-Read
字符串算法
字符串匹配:
---willamette
在匹配串中寻找模式串是否出现,注意和最长公共子序列相区别(LCS: Longest Common Substring)
最简单的Brute Force算法:
首先将匹配串和模式串左对齐,然后从左向右一个一个进行比较,如果不成功则模式串向右移动一个单位。
速度最慢。
那么,怎么改进呢?
我们注意到Brute Force算法是每次移动一个单位,一个一个单位移动显然太慢,是不是可以找到一些办法,让每次能够让模式串多移动一些位置呢?
当然是可以的。
我们也注意到,Brute Force是很不intelligent的,每次匹配不成功的时候,前面匹配成功的信息都被当作废物丢弃了,当然,就如现在的变废为宝一样,我们也同样可以将前面匹配成功的信息利用起来,极大地减少计算机的处理时间,节省成本。^_^
首先介绍的就是KMP算法。
原始论文:Knuth D.E., Morris J.H., and Pratt V.R., Fast pattern matching in strings, SIAM Journal on Computing, 6(2), 323-350, 1977.
这个算法实在是太有名了,大学上的算法课程除了最笨的Brute Force算法,然后就介绍了KMP算法。也难怪,呵呵。谁让Knuth D.E.这么world famous呢,不仅拿了图灵奖,而且还写出了计算机界的Bible The Art of Computer Programming(业内人士一般简称TAOCP).稍稍提一下,有个叫H.A.Simon的家伙,不仅拿了Turing Award,顺手拿了个Nobel Economics Award,做了AI的爸爸,还是Chicago Univ的Politics PhD,可谓全才。
KMP的思想是这样的:
利用不匹配字符的前面那一段字符的最长前后缀来尽可能地跳过最大的距离
比如
模式串ababac 这个时候我们发现在c处不匹配,然后我们看c前面那串字符串的最大相等前后缀,然后再来移动
下面的两个都是模式串,没有写出来匹配串
原始位置 ababac
移动之后 ababac
因为后缀是已经匹配了的,而前缀和后缀是相等的,所以直接把前缀移动到原来后缀处,再从原来的c处,也就是现在的第二个b处进行比较。 这就是KMP。
当然,有市场就有竞争,字符串匹配这么大一个市场,不可能让BF和KMP全部占了,于是又出现了几个强劲的对手。
第一个登场的是Horspool算法。
论文:Horspool R.N., 1980, Practical fast searching in strings, Software - Practice Experience, 10(6):501-506
Horspool算法的思想很简单的。不过有个创新之处就是模式串是从右向左进行比较的。很好很强大,为后来的算法影响很大。
匹配串:abcbcsdxzcxx
模式串:cbcac
这个时候我们从右向左进行对暗号,c-c,恩对上了,第二个b-a,不对啊,我们应该怎么办?难道就这么放弃么。于是,模式串从不匹配的那个字符开始从右向左寻找匹配串中不匹配的字符b的位置,结果发现居然有,赶快对上赶快对上,别耽误了。
匹配串:abcbcsdxzcxx
模式串: cbcac
然后继续从最右边的字符从右向左进行比较。这时候,我们发现了,d-c不匹配啊,而且模式穿里面没有噢,没办法,只好移动一个模式串长度的单位了。
匹配串:abcbcsdxzcxx
模式串: cbcac
第二个上来的是Boyer-Moore算法。
是一个很复杂的算法,当然,虽然理论上时间复杂度和KMP差不多,但是实际上却比KMP快数倍,可见实践是检验真理的唯一标准。
原始论文:R.S.Boyer, J.S.Moore, A fast string searching algorithm , Communications of the ACM,20(10):762-772 ,1977
分为两步预处理,第一个是bad-character heuristics,也就是当出现错误匹配的时候,移位,基本上就是做的Horspool那一套。
第二个就是good-suffix heuristics,当出现错误匹配的时候,我还要从不匹配点向左看啊,以前匹配的那段子字符串是不是在模式串本身中还有重复的啊,有重复的话,那么我就直接把重复的那段和匹配串中已经匹配的那一段对齐就是了。再比较
匹配串:abaccbabbazz
模式串:cbadcba
我们看到已经匹配好了cba,但是c-d不匹配,这个时候我们发现既可以采用bad-character heuristics,也可以使用go
您可能关注的文档
- 基于时空相关性的交通流故障数据修复方法-浙江大学学报.PDF
- 基于最小变异系数的配电网电压暂降源模型识别方法.PDF
- 基于最小噪声分离的约束能量最小化中国科技论文在线.PDF
- 基于有向图的对象范式生成算法-软件学报.PDF
- 基于最大方差权信息系数的煤气数据填补-控制理论与应用.PDF
- 基于有限角和计算机层析成像相结合的板状构件-天津大学期刊中心.PDF
- 基于本体的电子政务领域数字档案知识管理系统的设计-图书情报工作.PDF
- 基于本体的异构数据集成方法及其实现-数图研究笔记.PDF
- 基于极大权的最小连通支配集启发式算法.PDF
- 基于查询相关的近邻语言模型-江西师范大学智能信息处理试验室.PDF
- 2025年低空测绘数据在矿产资源勘探中的应用分析.docx
- 《2025年量子计算电力物联网边缘计算算力需求分析》.docx
- 2025年在线教育平台用户留存策略与运营效果评估.docx
- 《2025年低空应急救援无人机森林火灾早期探测场景应用》.docx
- 健康科普内容报告2025年用药安全传播策略与广告变现模式分析.docx
- 2025四川南充市自然资源和规划局遴选公务员2人考试模拟卷附答案解析.docx
- 2025四川南充市自然资源和规划局遴选公务员2人考试模拟卷附答案解析.docx
- 2025四川南充市委目标绩效管理办公室遴选公务员2人考试历年真题汇编附答案解析.docx
- 2025四川南充市自然资源和规划局遴选公务员2人备考题库附答案解析(夺冠).docx
- 2025四川旅游学院选调工作人员2人考试参考题库附答案解析.docx
原创力文档


文档评论(0)