【发布时间】:2011-11-27 01:40:57
【问题描述】:
我有一个 21056 字节的文件。
我用 C 语言编写了一个程序,将整个文件读入缓冲区,然后使用多种搜索算法在文件中搜索 82 个字符的标记。
我已经使用了“Exact String Matching Algorithms” 页面中算法的所有实现。我使用过:KMP、BM、TBM 和 Horspool。然后我使用了strstr 并对每一个进行了基准测试。
我想知道的是,每次strstr 的性能都优于所有其他算法。有时唯一更快的是BM。
strstr 不应该是最慢的吗?
这是我的基准代码以及基准测试 BM 的示例:
double get_time()
{
LARGE_INTEGER t, f;
QueryPerformanceCounter(&t);
QueryPerformanceFrequency(&f);
return (double)t.QuadPart/(double)f.QuadPart;
}
before = get_time();
BM(token, strlen(token), buffer, len);
after = get_time();
printf("Time: %f\n\n", after - before);
有人可以向我解释为什么strstr 的性能优于其他搜索算法吗?如果需要,我会根据要求发布更多代码。
【问题讨论】:
-
错误在您的代码中。至少 Horspool 应该始终优于
strstr- KMP 实际上可能更慢。但由于您没有发布代码,我们无法帮助您。也就是说,您可以故意选择您的数据以使天真的搜索获胜,因此输入数据的选择也很重要。 -
您是否认真地对在 20k 字符串中搜索 80 字节字符串进行基准测试?...您的样本量太小了,您可以手动完成!
标签: c performance algorithm string-matching strstr