我有一个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中执行它。
(我认为这很可能是因为程序员喜欢实现这样的东西。)

10-04 20:57
查看更多