我有一个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
应该比其他所有的都慢?你知道strstr
使用什么算法吗?我认为strstr
很可能使用了一种微调的、特定于处理器的、汇编编码的KMP
类型或更好的算法。在这种情况下,对于如此小的基准测试,您没有机会在C
中执行它。
(我认为这很可能是因为程序员喜欢实现这样的东西。)