Создайте тестовую библиотеку вероятных иголок и стогов сена.Профили тестов по нескольким алгоритмам поиска, включая грубую силу.Выберите тот, который лучше всего работает с вашими данными.
Бойер-Мур использует таблицу плохих символов с хорошей таблицей суффиксов.
Бойер-Мур-Хорспул использует таблицу неверных символов.
Кнут-Моррис-Пратт использует таблицу частичных совпадений.
Рабин-Карп использует запущенные хэши.
Все они торгуют накладными расходами для уменьшения сравнения в разной степени, поэтому реальная производительность будет зависеть от средней длины иглы и стога сена.Чем больше начальных затрат, тем лучше при более длинных входах.При очень коротких иглах может победить грубая сила.
Редактировать:
Для поиска базовых пар, английских фраз или отдельных слов может быть лучше другой алгоритм.Если бы был один лучший алгоритм для всех входных данных, он был бы опубликован.
Подумайте о следующей маленькой таблице.Каждый вопросительный знак может иметь свой лучший алгоритм поиска.
short needle long needle
short haystack ? ?
long haystack ? ?
Это действительно должен быть график с диапазоном от коротких до длинных входных данных на каждой оси.Если бы вы построили каждый алгоритм на таком графике, у каждого была бы своя сигнатура.Некоторые алгоритмы страдают от большого количества повторений в шаблоне, что может повлиять на использование, например, поиск генов.Некоторые другие факторы, влияющие на общую производительность, заключаются в поиске одного и того же шаблона более одного раза и одновременном поиске различных шаблонов.
Если бы мне понадобился набор образцов, думаю, я бы очистил сайт, такой как Google или Википедия., а затем уберите HTML со всех страниц результатов.Для поискового сайта введите слово, а затем используйте одну из предложенных поисковых фраз.Выберите несколько разных языков, если это применимо.Используя веб-страницы, все тексты будут короткими и средними, поэтому объедините достаточно страниц, чтобы получить более длинные тексты.Вы также можете найти общедоступные книги, юридические записи и другие крупные текстовые материалы.Или просто генерировать случайный контент, выбирая слова из словаря.Но суть профилирования состоит в том, чтобы проверить тип контента, который вы будете искать, поэтому, если возможно, используйте примеры из реального мира.Что касается иглы, я думаю о коротком как до 8 символов, средний как до 64 символов, и длиной до 1 КБ.Для стога сена, я думаю, короткий как 2 ^ 10, средний как менее 2 ^ 20, и длиной до 2 ^ 30 символов.