我有一个大小为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
比其他搜索算法表现更好吗?如果需要,我可以在请求时发布更多代码。
strstr
函数 - KMP算法实际上可能会更慢。但由于你没有发布你的代码,我们无法帮助你。话虽如此,你可以有意选择数据使得朴素搜索算法获胜,因此输入数据的选择也很重要。 - Konrad Rudolph