【发布时间】:2013-11-29 17:34:37
【问题描述】:
我正在测试来自此站点的字符串搜索算法:EXACT STRING MATCHING ALGORITHMS. Christian Charras, Thierry Lecroq。测试文本是 1 GB 大小的随机 DNA 碱基序列 (ACGT)。测试模式是随机大小(最大 1kB)的随机序列列表。测试系统是 AMD Phenom II x4 955,3.2 GHz,4 GB RAM 和 Windows 7 64 位。用 C 编写的代码并使用带有 -O3 标志的 MinGW 编译。
朴素搜索算法需要 4 秒的短模式到 8 秒的 1kB 模式。确定性有限状态机对于短模式需要 2 秒,对于 1kB 模式需要 4 秒。 Boyer-Moore 算法对于非常短的模式需要 4 秒,对于短模式大约需要 1/2 秒,对于 1kB 模式需要 2 秒。其余算法性能比朴素搜索算法最差。
朴素搜索算法如何比大多数其他算法搜索算法更快?
使用转换表(总是 O(n) 执行时间)实现的确定性有限状态机如何比 Boyer-Moore 算法慢 2 到 8 倍?是的,BM 最好的情况是 O(n/m),但他的平均情况是 O(n),最坏的情况是 O(nm)。
【问题讨论】: