Angenommen, wir erhalten eine Sammlung von Zeichenfolgen, . Ich würde gerne wissen, ob eine dieser Zeichenfolgen eine Teilzeichenfolge einer anderen Zeichenfolge in der Sammlung ist. Mit anderen Worten, ich möchte einen Algorithmus für die folgende Aufgabe:S 1 , … , S n
Eingabe:
Ausgabe: so dass eine von und , oder Keine, wenn kein solches existiertS i S j i ≠ j i , j
Gibt es dafür einen effizienten Algorithmus?
Wenn wir "Teilzeichenfolge" durch "Präfix" ersetzen, gibt es einen effizienten Algorithmus (sortieren Sie die Zeichenfolgen und führen Sie dann einen linearen Scan durch, um benachbarte Zeichenfolgen zu vergleichen; durch Sortieren wird sichergestellt, dass Teilzeichenfolgen benachbart sind). Es scheint jedoch schwieriger zu testen, ob eine Zeichenfolge eine Teilzeichenfolge einer anderen Zeichenfolge ist. Ein naiver Algorithmus besteht darin, über alle Paare zu iterieren , dies erfordert jedoch -Substring-Tests. Gibt es einen effizienteren Algorithmus?Θ ( n 2 )
Ich denke, wir könnten dies "All-Pair-Teilstringtest" oder so etwas nennen.
Mein letztendliches Ziel ist es, die Sammlung so zu beschneiden, dass kein String ein Teilstring eines anderen ist, indem jeder entfernt wird, der ein Teilstring von etwas anderem in der Sammlung ist.