我有一个21056字节的文件。
我已经用C语言编写了一个程序,该程序将整个文件读入缓冲区,然后使用多种搜索算法在文件中搜索82个字符的令牌。
我已经使用了“精确字符串匹配算法”页面上算法的所有实现。我用过:KMP,BM,TBM和Horspool。然后,我使用了strstr每个基准并对其进行了基准测试。
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对于如此小的基准测试,您将没有表现出色的机会。
KMP
C
(我认为这很可能是程序员喜欢实现这些东西的原因。)