Я работаю над алгоритмами поиска строк, которые поддерживают поиск по нескольким шаблонам. Я нашел два алгоритма, которые кажутся наиболее сильными кандидатами с точки зрения времени выполнения, а именно: Aho-Corasick и Rabin-Karp . Однако я не смог найти исчерпывающего сравнения между этими двумя алгоритмами. Какой алгоритм более эффективен? Кроме того, какой из них больше подходит для параллельных вычислений и поиска по нескольким шаблонам? Наконец, какой из них требует меньше аппаратных ресурсов?
Для алгоритма переменного тока фаза поиска занимает времени, в то время как для RK это O ( n m ) . Тем не менее, время работы для RK составляет O ( n + m ), что делает его похожим на AC. Мой предварительный вывод заключается в том, что РК кажется практически лучше, поскольку ему не нужно столько памяти, сколько АС. Это правильно?
Ответы:
Асимптотический анализ времени выполнения вряд ли будет лучшим инструментом для выбора между этими двумя алгоритмами: асимптотический анализ игнорирует постоянные факторы, и постоянные факторы здесь будут иметь решающее значение. Оба алгоритма имеют в основном одинаковое время асимптотики, поэтому асимптотический анализ, вероятно, не очень помогает выбирать между ними.
Вместо этого правильный выбор между двумя алгоритмами - через экспериментальный анализ. Определите репрезентативную рабочую нагрузку, а затем сравните производительность обоих алгоритмов в своей рабочей нагрузке с типами машин, которые вы собираетесь использовать на практике.
источник
но в отношении вашего неявного запроса на «всестороннее сравнение» некоторые статьи были написаны экспериментально / эмпирически, сравнивая эти два и другие алгоритмы с реальными данными и включающие анализ / сравнение плюсов / минусов / компромиссов различных алгоритмов, например:
Методологии сопоставления множественных шаблонных строк: сравнительный анализ / Хан, Патерия
СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ АЛГОРИТМОВ БРИОЛОГИЧЕСКИХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ СООТВЕТСТВИЯ СТРОКАМ / Пандисельвам, Маримуту, Лавранс
источник