字符串匹配算法总结

字符串匹配算法总结

ID:36452314

大小:29.45 KB

页数:11页

时间:2019-05-10

字符串匹配算法总结_第1页
字符串匹配算法总结_第2页
字符串匹配算法总结_第3页
字符串匹配算法总结_第4页
字符串匹配算法总结_第5页
资源描述:

《字符串匹配算法总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、BruteForce(BF或蛮力搜索)算法:这是世界上最简单的算法了。首先将匹配串和模式串左对齐,然后从左向右一个一个进行比较,如果不成功则模式串向右移动一个单位。速度最慢。那么,怎么改进呢?我们注意到BruteForce算法是每次移动一个单位,一个一个单位移动显然太慢,是不是可以找到一些办法,让每次能够让模式串多移动一些位置呢?当然是可以的。我们也注意到,BruteForce是很不intelligent的,每次匹配不成功的时候,前面匹配成功的信息都被当作废物丢弃了,当然,就如现在的变废为宝一样,我们也同样可以将前面匹配成功的信息利用起来,极大地减少计算机的处理时间,节省成本。^_^注意,蛮力

2、搜索算法虽然速度慢,但其很通用,文章最后会有一些更多的关于蛮力搜索的信息。KMP算法首先介绍的就是KMP算法。这个算法实在是太有名了,大学上的算法课程除了最笨的BruteForce算法,然后就介绍了KMP算法。也难怪,呵呵。谁让KnuthD.E.这么worldfamous呢,不仅拿了图灵奖,而且还写出了计算机界的Bible(业内人士一般简称TAOCP).稍稍提一下,有个叫H.A.Simon的家伙,不仅拿了TuringAward,顺手拿了个NobelEconomicsAward,做了AI的爸爸,还是ChicagoUniv的Politics

3、PhD,可谓全才。KMP的思想是这样的:利用不匹配字符的前面那一段字符的最长前后缀来尽可能地跳过最大的距离比如模式串ababac这个时候我们发现在c处不匹配,然后我们看c前面那串字符串的最大相等前后缀,然后再来移动下面的两个都是模式串,没有写出来匹配串原始位置ababac移动之后ababac因为后缀是已经匹配了的,而前缀和后缀是相等的,所以直接把前缀移动到原来后缀处,再从原来的c处,也就是现在的第二个b处进行比较。这就是KMP。Horspool算法。当然,有市场就有竞争,字符串匹配这么大一个市场,不可能让BF和KMP全部占了,于是又出现了几个强劲的对手。第一个登场的是Horspool算法的思想

4、很简单的。不过有个创新之处就是模式串是从右向左进行比较的。很好很强大,为后来的算法影响很大。匹配串:abcbcsdxzcxx模式串:cbcac这个时候我们从右向左进行对暗号,c-c,恩对上了,第二个b-a,不对啊,我们应该怎么办?难道就这么放弃么。于是,模式串从不匹配的那个字符开始从右向左寻找匹配串中不匹配的字符b的位置,结果发现居然有,赶快对上赶快对上,别耽误了。匹配串:abcbcsdxzcxx模式串:cbcac然后继续从最右边的字符从右向左进行比较。这时候,我们发现了,d-c不匹配啊,而且模式穿里面没有噢,没办法,只好移动一个模式串长度的单位了。匹配串:abcbcsdxzcxx模式串:cb

5、cacBoyer-Moore算法是一个很复杂的算法,当然,虽然理论上时间复杂度和KMP差不多,但是实际上却比KMP快数倍,可见实践是检验真理的唯一标准。分为两步预处理,第一个是bad-characterheuristics,也就是当出现错误匹配的时候,移位,基本上就是做的Horspool那一套。第二个就是good-suffixheuristics,当出现错误匹配的时候,我还要从不匹配点向左看啊,以前匹配的那段子字符串是不是在模式串本身中还有重复的啊,有重复的话,那么我就直接把重复的那段和匹配串中已经匹配的那一段对齐就是了。再比较匹配串:abaccbabbazz模式串:cbadcba我们看到已经

6、匹配好了cba,但是c-d不匹配,这个时候我们发现既可以采用bad-characterheuristics,也可以使用good-suffixheuristics(模式串:cbadcba),在这种情况下,邪不压正。毅然投奔good。移动得到匹配串:abaccbabbazz模式串:cbadcba可是,我们有时候也发现,已经匹配好的那一部分其实并没有再有重复了的啊。这个时候,我们发现已经匹配好的那串字符串有一部分在开头重新出现了,那么,赶快,对齐吧。匹配串:abacccbbbazz模式串:cbadccb然后得到匹配串:abacccbbbazz模式串:cbadccb当两种Good-Suffix出现的时

7、候,取移动距离最大的那个。Sunday算法最后一个是Sunday算法,实际上比Boyer-Moore还快,呵呵。长江后浪推前浪。看原始论文的题目,D.M.Sunday貌似是故意想气气Boyer-Moore两位大牛似的。呵呵。不过实际上的确Sunday算法的确比BM算法要快,而且更简单。Sunday的算法思想和Horspool有些相似,但是。当出现不匹配的时候,却不是去找匹配串中不匹配的字符在模式串

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。