一尘不染

strstr比算法快?

algorithm

我有一个21056字节的文件。

我已经用C语言编写了一个程序,该程序将整个文件读入缓冲区,然后使用多种搜索算法在文件中搜索82个字符的令牌。

我已经使用了“精确字符串匹配算法”页面上算法的所有实现。我用过: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优于其他搜索算法吗?如果需要,我将应要求发布更多代码。


阅读 370

收藏
2020-07-28

共1个答案

一尘不染

您为什么认为strstr应该比其他所有慢?您知道strstr使用什么算法吗?我认为很有可能会strstr使用一种KMP类型或更佳的,经过微调的,特定于处理器的,经过汇编编码的算法。在这种情况下,C对于如此小的基准测试,您将没有表现出色的机会。

(我认为这很可能是程序员喜欢实现这些东西的原因。)

2020-07-28