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