BF,KMP,BM三种字符串匹配算法性能比较
来源:互联网 发布:国外搜索不到淘宝产品 编辑:程序博客网 时间:2024/05/05 08:46
三种最基本的字符串匹配算法是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算法确实在大多数情况下都具有很好的性能体现。
- BF,KMP,BM三种字符串匹配算法性能比较
- 字符串匹配(BF,KMP,BM)
- 字符串匹配(BF,BM,Sunday,KMP算法解析)
- 字符串匹配算法综述:BF、RK、KMP、BM、Sunday
- 字符串匹配算法:KMP算法与BM算法比较
- 字符串匹配-KMP、BF算法
- BM算法模式匹配——字符串与KMP比较
- 算法学习_字符匹配算法(BF,KMP,BM)
- 数据结构(c++) 串的匹配BF->KMP->BM算法
- 算法:字符串匹配、BF/KMP/近似匹配
- 字符串模式匹配算法--BF & KMP算法
- 【算法分析】字符串匹配:BF、KMP算法
- 字符串匹配BF算法和KMP算法
- 字符串匹配之BM和KMP算法
- 字符串匹配算法(KMP, BM, Sunday)
- iptables --algo 字符串匹配算法 bm kmp
- 字符串匹配:kmp,bm和sunday算法
- 字符串匹配算法——KMP && BF
- HDU - 5088 Revenge of Nim II
- 实验室第七周工作报告
- 【Linux网络编程实例】实例一:获取主机MAC地址和IP地址
- 解决Android SDK Manager更新、下载速度慢
- 电子商务跟对SEO搜索引擎优化未来发展方向的影响
- BF,KMP,BM三种字符串匹配算法性能比较
- c3p0 配置详解+mysql 8小时自动断开连接的解决
- 设一棵完全二叉树共有700个结点,求该二叉树有几个叶子结点?
- BZOJ 1179 APIO2009 ATM Tarjan+堆优化SPFA
- 不按常理出牌
- 堆及堆排序
- error: Error retrieving parent for item: No resource found that matches the given name 解决方法1
- C语言printf
- android am