Diese Frage wurde von Efficient Data Structures zum Erstellen einer schnellen Rechtschreibprüfung gestellt .
Bei zwei Strings sagen wir, dass sie k- nah sind, wenn ihr Damerau-Levenshtein-Abstand ¹ klein ist, dh \ operatorname {LD} (u, v) \ geq k für ein festes k \ in \ mathbb {N} . Informell ist \ operatorname {LD} (u, v) die Mindestanzahl von Lösch-, Einfüge-, Ersetzungs- und (Nachbar-) Auslagerungsoperationen, die erforderlich sind, um u in v umzuwandeln . Sie kann durch dynamische Programmierung in \ Theta (| u | \ cdot | v |) berechnet werden . Beachten Sie, dass \ operatorname {LD} eine Metrik ist , die insbesondere symmetrisch ist.
Die Frage des Interesses ist:
Was ist die Kardinalität von bei einer Menge von Strings über mit Längen von höchstens ?
?
Da sogar zwei Strings gleicher Länge unterschiedliche Anzahlen von Strings² haben², kann es schwierig (unmöglich?) Sein, eine allgemeine Formel / einen Ansatz zu finden. Daher müssen wir möglicherweise die Zahl für jedes gegebene S explizit berechnen , was uns zu der Hauptfrage führt:
Was ist die (zeitliche) Komplexität des Findens der Kardinalität der Menge für (beliebiges) ?
Beachten Sie, dass die gewünschte Menge in exponentiell ist Eine explizite Aufzählung ist daher nicht wünschenswert. Ein effizienter Algorithmus wäre großartig.
Wenn es hilft, kann angenommen werden, dass wir tatsächlich eine (große) Menge von Zeichenfolgen haben, dh wir lösen die erste hervorgehobene Frage.
- Mögliche Varianten sind die Verwendung des Levenshtein-Abstands .
- Betrachten Sie und . Die Sätze von geschlossenen Zeichenfolgen über sind (8 Wörter) und (10 Wörter).
Antworten:
Siehe Levenshteins Artikel . Es enthält Grenzen für die Zahlenzeichenfolgen, die beim Einfügen und Löschen einer Zeichenfolge erhalten werden. Wenn die Länge der Zeichenfolge ist und die Zeichenfolge binär ist, beträgt die maximale Anzahl der nächsten Nachbarn in der Levenshtein-Entfernung . Es ist vergleichsweise schwieriger, etwas über nächste Nachbarn zu sagen , aber man kann Grenzen bekommen. Diese sollten Ihnen eine Schätzung der Komplexität geben.n Θ(n2) k
quelle
Wenn Ihr festgelegt ist und Sie eine Vorverarbeitung durchführen dürfen, können Sie dies möglicherweise versuchenk
Jetzt können Sie möglicherweise die endgültige Matrix verwenden, um alle Fragen zu beantworten. Wenn Sie usw. speichern können, können Sie möglicherweise für einen größeren Bereich von anstelle von festem antworten , natürlich zahlt man hier mit den Kosten der Matrixmultiplikation.M,M2,M4,M8… k k
quelle