2009-05-13 5 views
0

1) Warum fügen wir 1 auf dieser Linie hinzu?Frage zum Levenshtein

d[i-1, j] + 1, // deletion 
    d[i, j-1] + 1, // insertion 

Die Linie

if s[i] = t[j] then cost := 0 

     else cost := 1 

Rechnung gelöscht/untere Wortlängen nehmen sollte, oder bin ich etwas fehlt?

2) Auch die Kommentare Status löschen und Einfügen. Habe ich richtig gedacht, dass es nach gelöschten Zeichen in beiden Wörtern sucht (die Ganzzahlen j/i repräsentieren die Länge der Wörter), weil ein niedrigerer Wert gelöschte Zeichen darstellt.

Der verwendete Code hier ist (weil es Pseudo-Code ist und ich habe keine Sprache für bestimmte Themen, ist dieser Thread in jeder Sprache Kategorie nicht):

http://www.iterasi.net/openviewer.aspx?sqrlitid=z0cloj7xhk-ce0f72v4cjq

Antwort

1

1) Diese Zeilen berechnen den Abstand in der Fall des Löschens, im Fall des Einfügens, und der, der "Kosten" im Falle einer Substitution verwendet ...

Löschen und Einfügen zählen effektiv als "1" in der Entfernungsberechnung, daher die +1.

Wir glauben, dass es eine Substitution nur war, wenn die Zeichen unterschiedlich sind daher die „Kosten = 0“, wenn beide Zeichen gleich sind ...

Die neue Strecke ist dann die Mindest Abstand zwischen diesen 3 Hypothese also addierst du nicht immer 1 ...

2) wenn ich den Abstand zwischen "FooBar" und "FoBaWhatever" berechne, habe ich einige Löschungen, auch wenn die zweite Zeichenfolge länger ist als die erste ...

Natürlich, wenn die zweite Saite kürzer als die zweite ist (FooBar -> F oBa) Ich werde einige Löschungen finden, aber ich kann nicht im Voraus wissen, wo sie sind ...

2

Haben Sie http://www.merriampark.com/ld.htm gelesen?

Sie berechnen die Kosten für die Umwandlung - die Anzahl der Einfügungen und Löschungen -, die erforderlich sind, um eine Zeichenfolge in eine andere zu konvertieren.

Diese zu transformierende "Kosten" gibt den Abstand zwischen den beiden Saiten an.

Was ist mit Austausch? Das ist der Damerau–Levenshtein Algorithmus, der anders ist. Die Einbeziehung von Börsen verbessert die Dinge nicht sehr.

Die Essenz besteht darin, eine Matrix zwischen den beiden Wörtern zu erstellen und Spalte für Spalte zu berechnen - die "Entfernung" von jedem Buchstaben jedes Wortes zu jedem Buchstaben des anderen Wortes. Die untere rechte Ecke dieser Matrix ist die Gesamtentfernung unter Berücksichtigung aller Buchstaben.

Frage 1)

Die Zelle „oberhalb“ spiegelt eine Geschichte von Veränderungen, und das Zeichen für diese Zeile ist (in der Regel) verschieden ist, so dass diese Zelle eine Deletion relativ zu ihm.

Die Zelle "left" gibt eine Änderungshistorie wieder, und das Zeichen für diese Spalte ist (normalerweise) anders als das, daher ist diese Zelle eine Einfügung relativ zu ihr.

Die einzige Zeit, die dies normalerweise falsch wäre, sind Wörter mit einer Drei-Buchstaben-Sequenz. Selten in Englisch.

Der Zeilen-Spalten-Vergleich hat eine Gebühr von 0 oder 1.

das Minimum von „Geschichte plus eine Veränderung“, und die tatsächlich Kosten für eine Änderung sind die anwendbar Kosten.

Frage 2)

Die Variablen i und j sind nicht Längen von irgendetwas. Sie sind Positionen in der Vergleichsmatrix. Die "Einfügung" und "Löschung" ist die Aktion, die erforderlich ist, um ein Wort in das andere umzuwandeln. Die Anzahl der Einfüge-/Löschaktionen ist der Abstand zwischen den Wörtern.

+0

Ja, ich habe diesen Link tatsächlich gelesen. Gute Antwort. Eine letzte Sache jedoch: In der minimalen Funktion gibt es +1 für eine Zelle und + Kosten für eine Zelle. Sicherlich sind 1 und Kosten derselbe Wert (1), da Kosten niemals größer als 1 sind und nicht 0, da dies zur Ausführung der if-Anweisung führen würde (wenn cost == 0 usw.). Ich verstehe diese Logik nicht? – dotnetdev

+0

Nein. Die Kosten sind nicht immer 1. Es kann viel, viel größer als eins sein, wenn die benachbarten Buchstaben keine guten Übereinstimmungen sind. Beim ersten Start gehen Sie davon aus, dass der letzte Buchstabe eines n-Zeichen-Worts das Ergebnis von n Einfügungen ist. Es kostet zunächst n, bis Ihr Vergleich zeigt, dass es weniger ist, weil einige Zeichen tatsächlich übereinstimmen. –