BF,KMP,BM三种字符串匹配算法性能比较

三种最基本的字符串匹配算法是BF,KMP以及BM,BF算法是最简单直接的匹配算法,就是逐个比较,一旦匹配不上,就往后移动一位,继续比较,所以比较次数很都。

关于KMP和BM的详细介绍可以参考下面的两个link,是讲得比较好的。

KMP

http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

BM

http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html

理论上,BM具有最好的性能,因为比较的次数最好,其次是KMP,最差的应该是BF。

今天对这三种算法做了一个简单的测试,测试程序运行在Windows 7 x64位系统上,四核CPU,32G内存,测试程序为x64。

说明,只测试在目标字符串中找不到要搜索的字符串,以便能够遍历完所有字符串。

测试1,在1亿个字符串(100M)搜索一个长度为20字节字符串,结果如下:

BF spent time is 171(ms)
KMP spent time is 422(ms)
BM spent time is 15(ms)

最快的是BM算法,花的时间也最少(15ms).

测试2, 在10亿个字符串中(1G)中搜索一个长度为20字节的字符串,结果如下:

BF spent time is 1670(ms)
KMP spent time is 4321(ms)
BM spent time is 203(ms)

结果和测试一基本一致。

通过这两次测试,很奇怪的是KMP算法居然比BF算法花的时间还多,说明KMP虽然理论上有很好的性能,但实际上很难有所作为,大多数情况下还不如BF算法。但是BM算法确实在大多数情况下都具有很好的性能体现。





  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple-Soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值