Sono rimasto bloccato per qualche tempo su quale sia l'algoritmo di ricerca delle stringhe più veloce, ho sentito molte opinioni, ma alla fine non ne sono sicuro.
Ho sentito alcune persone dire che l'algoritmo più veloce è Boyer-Moore e alcuni che affermano che Knuth-Morris-Pratt è in realtà più veloce.
Ho cercato la complessità di entrambi, ma per lo più sembrano uguali O(n+m)
. Ho scoperto che nel peggiore dei casi Boyer-Moore ha una O(nm)
complessità rispetto a Knuth-Morris-Pratt che ha O (m + 2 * n). Dove n = lunghezza del testo e m = lunghezza del motivo.
Per quanto ne so Boyer-Moore ha un caso peggiore lineare se usassi la Regola Galil.
La mia domanda, nel complesso l'algoritmo di ricerca di stringhe più veloce (questa domanda include tutti i possibili algoritmi di puntura, non solo Boyer-Moore e Knuth-Morris-Pratt).
Modifica: grazie a questa risposta
Quello che sto cercando esattamente è:
Dato un testo T
e uno schema P
devo trovare tutte le apparenze di P
in T
.
Anche la lunghezza di P e T proviene da [1,2 000 000]
e il programma deve funzionare sotto 0,15 sec.
So che KMP e Rabin-Karp sono sufficienti per ottenere un punteggio del 100% sul problema, ma io per primo volevo provare a implementare Boyer-Moore. Quale sarebbe meglio per questo tipo di ricerca di pattern?