Каковы основные различия между алгоритмами поиска Кнута-Морриса-Пратта и Бойера-Мура?

каковы основные различия между Кнут-Моррис-Пратт алгоритм поиска и Бойер-Мур алгоритм поиска?

Я знаю KMP ищет Y в X, пытаясь определить шаблон в Y, и сохраняет шаблон в векторе. Я также знаю, что BM работает лучше для небольших слов, таких как ДНК (ACTG).

каковы основные различия в том, как они работают? Какой из них быстрее? Кто из них менее жаден до компьютеров? В каких случаях?

3 ответов


веб-страница UTexas Мура шаг за шагом проходит через оба алгоритма (он также предоставляет различные технические источники):

по словам самого человека,

классический алгоритм Бойера-Мура страдает от явления, что он как правило, не работает так эффективно на небольших алфавитах, таких как ДНК. Скип расстояние имеет тенденцию прекращать расти с длиной шаблона, потому что подстроки повторяются часто. Вспоминая больше того, что было уже сопоставлены, можно получить большие пропуски через текст. Один может даже организовать "совершенную память" и, таким образом, смотреть на каждого персонажа чаще всего, в то время как алгоритм Бойера-Мура, будучи линейным, может проверьте символ из текста несколько раз. Эта идея запоминание большего было исследовано в литературе другими. Он страдает от необходимости очень большие таблицы или государственные машины.

, есть модификации BM которые сделали поиск малого алфавита жизнеспособным.

в грубом объяснении

Бойер-Мур подход состоит в том, чтобы попытаться сопоставить последний символ шаблона вместо первого с предположением, что если нет совпадения в конце, нет необходимости пытаться сопоставить в начале. Это позволяет для "больших скачков", поэтому BM работает лучше, когда рисунок и текст, который вы ищете, напоминают "естественный текст" (т. е. английский)

Кнут-Моррис-Пратт поиск вхождения "слова" W в основную "текстовую строку" s, используя наблюдение, что при возникновении несоответствия само слово содержит достаточную информацию, чтобы определить, где может начаться следующее совпадение, таким образом, минуя повторное рассмотрение ранее сопоставленных символов. (Источник: Wiki)

Это значит KMP лучше подходит для небольших наборов, таких как ДНК (ACTG)


техника Бойера-Мура соответствует персонажам справа налево, хорошо работает на длинных узорах. кнут Морис Пратт соответствует персонажам слева направо, работает быстро на коротких узорах.