Sono rimasto bloccato per un po 'di 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à su entrambi, ma hanno per lo più lo stesso O(n+m)
. Ho scoperto che nel peggiore dei casi Boyer-Moore ha una complessità di O(nm)
rispetto a Knuth-Morris-Pratt che ha O (m + 2 * n). Dove n = lunghezza del testo e m = lunghezza del modello.
Per quanto ne so, Boyer-Moore ha una linear-case-time peggiore se usassi la regola di Galil.
La mia domanda, su tutto ciò che è in realtà l'algoritmo di ricerca stringa più veloce (questa domanda include tutti i possibili algoritmi di puntura non solo per Boyer-Moore e Knuth-Morris-Pratt).
Modifica: a causa di questa risposta
Quello che sto cercando esattamente è
Dato un testo T
e un modello P
Devo trovare tutti gli aspetti di P
in T
.
Anche la lunghezza di P e T è da [1,2 000 000]
e il programma deve essere eseguito a meno di 0.15 secondi.
So che KMP e Rabin-Karp sono sufficienti per ottenere un punteggio del 100% sul problema, ma io per primo volevo provare e implementare Boyer-Moore. Quale sarebbe la soluzione migliore per questo tipo di ricerca di modelli?