2013-11-27 14 views
7

In Levenshtein Abstand stellen Sie die Frage, was ist ihre Levenshtein-Abstand, die diese beiden Strings gegeben. Wie würdest du eine Saite und eine Levenshtein-Distanz nehmen und alle Saiten innerhalb dieser Levenshtein-Distanz erzeugen? (Es würde auch einen Zeichensatz aufnehmen). Also, wenn ich eine Zeichenfolge x und eine Entfernung d übergeben. dann würde es mir alle Saiten innerhalb dieser Bearbeitungsdistanz geben, einschließlich d-1 und d-2 .... d-n; (n < d).Reverse Levenshtein Entfernung

Expected Funktionalität:

>>> getWithinDistance('apple',2,{'a','b',' '}) 
['applea','appleb','appel','app le'...] 

Bitte beachten Sie, dass das Programm in der Lage ist app le zu produzieren als Raum im Zeichensatz enthalten ist.

+1

Ich habe versucht zufällige Zeichen zu zufälligen Positionen hinzuzufügen, aber es dient nicht .. –

+0

Diese Frage sollte mehr Stimmen erhalten, es ist eine interessante Frage nicht doppelt. – PascalVKooten

Antwort

6

Es gibt eine Datenstruktur, die dies nennt die Levenshtein automaton. Sie konstruieren es aus einer Reihe von Zeichenfolgen (die möglicherweise nur ein Element haben) und einem festen Abstand k, und dann können Sie es für alle Zeichenfolgen mit Abstand höchstens von alle Zeichenfolgen, die es speichert, abfragen. Eine Python-Implementierung wird diskutiert here.

Alternativ können Sie eine Tiefenlimitierte Suche mit Backtracking für solche Strings durchführen.

+0

könnte ich bitte einen Pseudo-Code oder eine Implementierung bekommen? –

+0

@AnshumanDwibhashi: einen Link zu einem Blogpost veröffentlicht, der die Implementierung diskutiert. –

+0

die Website scheint einige Fehler zu haben, wenn ich den Code versuche, heißt es, dass NFA nicht erkannt wird –

Verwandte Themen