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