Hier ist eine sehr einfache Art und Weise eine suffix array aus einer Zeichenfolge in Python zu bauen:strcmp für Python oder wie Substrings effizient sortieren (ohne Kopie), wenn ein Suffix Array Aufbau
def sort_offsets(a, b):
return cmp(content[a:], content[b:])
content = "foobar baz foo"
suffix_array.sort(cmp=sort_offsets)
print suffix_array
[6, 10, 4, 8, 3, 7, 11, 0, 13, 2, 12, 1, 5, 9]
jedoch „Inhalt [a: ] "erstellt eine Kopie des Inhalts, die sehr ineffizient wird, wenn der Inhalt groß wird. Also frage ich mich, ob es eine Möglichkeit gibt, die beiden Teilstrings zu vergleichen, ohne sie kopieren zu müssen. Ich habe versucht, den eingebauten Puffer zu verwenden, aber es hat nicht funktioniert.
Was ist Ihr ‚Inhalt‘ typischerweise aussehen? Englischer Text? Zufällige Reihenfolge? Irgendwas dazwischen? Wie groß sind die Chancen für lange (sagen wir über 100 Zeichen) Teilstrings in "content"? –
Ich schrieb diesen [Python-Code, der all Teil der langen Schnur sortieren] (http://stackoverflow.com/a/13693834/448474) (1000000 Zeichen) und die längsten wiederholt Teilzeichenfolge in 5 Sekunden finden. – hynekcer