Я застрял в течение некоторого времени на том, какой алгоритм поиска строк самый быстрый, услышал много мнений, но в итоге я не уверен.
Я слышал, как некоторые люди говорят, что самый быстрый алгоритм - это Бойер-Мур, а некоторые говорят, что Кнут-Моррис-Пратт на самом деле быстрее.
Я искал сложность на них обоих, но они в основном выглядят одинаково O(n+m)
. Я обнаружил, что в худшем случае Бойер-Мур имеет O(nm)
сложность по сравнению с Кнутом-Моррисом-Праттом, который имеет O (m + 2 * n). Где n = длина текста и m = длина шаблона.
Насколько я знаю, у Бойера-Мура время линейного наихудшего случая, если бы я использовал правило Галиля.
Мой вопрос: над всем, что на самом деле является самым быстрым алгоритмом поиска в строке (этот вопрос включает в себя все возможные алгоритмы поиска, не только Бойера-Мура и Кнут-Морриса-Пратта)
Изменить: из-за этого ответа
То, что я точно ищу, это:
Учитывая текст T
и образец, P
я должен найти все появления P
в T
.
Также длина P и T от, [1,2 000 000]
и программа должна работать менее 0,15 сек.
Я знаю, что KMP и Рабин-Карп достаточно, чтобы получить 100% баллов по этой проблеме, но я, например, хотел попробовать реализовать Бойера-Мура. Что было бы лучше для этого типа поиска по шаблону?