В настоящее время я изучаю алгоритмы сопоставления образов и натолкнулся на эти два алгоритма. У меня есть следующие общие идеи:Когда вы используете KMP over BOYER-MOORE
KMP
- Сравнивает текст слева направо
- использует массив отказа перекладывать разумно
- занимает O (м), где т длина шаблон, чтобы вычислить массив отказа
- занимает O (м), пространство
- занимает O (N), время для поиска строки
BM
- Сравнивает шаблон с последнего символа
- Использует плохой характер скачки и хороший суффикс скачки
- занимает O (м + размер алфавита) для вычисления таблиц
- занимает O (M + размер алфавита), пространство
- занимает O (п), но, как правило, лучше искать
я наткнулся на следующую Qu estion который вызвал этот вопрос (истина или ложь):
Алгоритм Кнута-Морриса-Пратта (KMP) является хорошим выбором, если мы хотим поиск по той же схеме неоднократно в разных текстах.
Так что я считаю, что ответ верно только потому, что предположение, что каждый раз при запуске алгоритма на другой текст предварительная обработка только O (N), где для BM это O (п + размер алфавита). Тем не менее, я не уверен, принимаю ли я правильное предположение, что каждый раз, когда алгоритм повторно запускается, новая таблица пересчитывается. Потому что текст всегда попадает в алфавит на английском языке. Мне нужно было бы только вычислить таблицу один раз и просто повторно использовать таблицу. Итак, в конце концов, будет ли ответ на этот вопрос зависеть от того, что все алгоритмы выполняются по тексту, который содержится в одном и том же алфавите, или есть какой-то другой фактор, который может повлиять на него?
Много информации здесь: http://stackoverflow.com/q/12656160/56778, а также в других сообщениях SO. Сделайте поиск в Google для [kmp vs boyer-moore]. –
@JimMischel Я уже видел этот пост, но он напрямую не отвечает на основную часть моего вопроса. И я уже пытался Google это – Eric
Это именно то, что я ищу. Любая помощь будет оценена по достоинству. –