Utknąłem na pewien czas, który jest najszybszym algorytmem wyszukiwania ciągów, słyszałem wiele opinii, ale ostatecznie nie jestem pewien.
Słyszałem, jak niektórzy mówią, że najszybszym algorytmem jest Boyer-Moore, a niektórzy twierdzą, że Knuth-Morris-Pratt jest rzeczywiście szybszy.
Szukałem złożoności obu z nich, ale w większości wyglądają tak samo O(n+m)
. Odkryłem, że w najgorszym przypadku Boyer-Moore ma O(nm)
złożoność w porównaniu do Knuth-Morris-Pratt, która ma O (m + 2 * n). Gdzie n = długość tekstu im = długość wzoru.
O ile wiem Boyer-Moore ma liniowo najgorszy przypadek, gdybym użył Reguły Galila.
Moje pytanie, w sumie, który jest w rzeczywistości najszybszym algorytmem wyszukiwania ciągu (To pytanie obejmuje wszystkie możliwe algorytmy żądła, nie tylko Boyer-Moore i Knuth-Morris-Pratt).
Edycja: Z powodu tej odpowiedzi
To czego dokładnie szukam to:
Biorąc pod uwagę tekst T
i wzór, P
muszę znaleźć wszystkie wyglądy P
w T
.
Również długość P i T pochodzi z, [1,2 000 000]
a program musi działać poniżej 0,15 sekundy.
Wiem, że KMP i Rabin-Karp są wystarczające, aby uzyskać 100% wynik w tym problemie, ale ja chciałem wdrożyć Boyera-Moore'a. Który byłby najlepszy dla tego rodzaju wyszukiwania wzorców?