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算法确实在大多数情况下都具有很好的性能体现。






你可能感兴趣的:(算法)