strstr быстрее алгоритмов?

У меня есть файл размером 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 превосходит другие алгоритмы поиска? При необходимости я отправлю дополнительный код по запросу.

16
задан Konrad Rudolph 29 September 2011 в 08:06
поделиться