Ich bin seit einiger Zeit festgefahren, was der schnellste Algorithmus für die Suche nach Zeichenfolgen ist, habe viele Meinungen gehört, bin mir aber am Ende nicht sicher.
Ich habe einige Leute sagen hören, dass der schnellste Algorithmus Boyer-Moore ist und einige sagen, dass Knuth-Morris-Pratt tatsächlich schneller ist.
Ich habe nach der Komplexität bei beiden gesucht, aber sie sehen größtenteils gleich aus O(n+m)
. Ich habe festgestellt, dass Boyer-Moore im schlimmsten Fall eine O(nm)
Komplexität im Vergleich zu Knuth-Morris-Pratt hat, die O (m + 2 * n) hat. Wobei n = Länge des Textes und m = Länge des Musters.
Soweit ich weiß, hat Boyer-Moore eine linear schlechteste Zeit, wenn ich die Galil-Regel anwenden würde.
Meine Frage: Über alles, was eigentlich der schnellste String-Suchalgorithmus ist (Diese Frage beinhaltet alle möglichen Stichalgorithmen, nicht nur Boyer-Moore und Knuth-Morris-Pratt).
Edit: Aufgrund dieser Antwort
Was ich genau suche ist:
Angesichts eines Textes T
und eines Musters muss P
ich alle Auftritte von P
in finden T
.
Auch die Länge von P und T ist von [1,2 000 000]
und das Programm muss unter 0,15 Sekunden laufen.
Ich weiß, dass KMP und Rabin-Karp ausreichen, um das Problem zu 100% zu lösen, aber ich wollte Boyer-Moore unbedingt implementieren. Welches wäre das Beste für diese Art der Mustersuche?