Levenshtein Distanz (Edit Distance)

Rechner zur Berechnung der minimalen Editieroperationen mit ausführlichen Formeln und Beispielen

Levenshtein Distanz Rechner

Was wird berechnet?

Die Levenshtein Distanz (auch Editierdistanz genannt) ist die minimale Anzahl von Operationen (Einfügen, Löschen, Ersetzen), um einen String in einen anderen umzuwandeln.

Eingabestrings

Ursprungsstring (kann leer sein)

Zielstring (kann leer sein)
Ergebnis
Levenshtein Distanz:
Minimale Anzahl von Editieroperationen

Levenshtein Info

Operationen

Erlaubte Operationen:

  • Einfügen eines Zeichens
  • Löschen eines Zeichens
  • Ersetzen eines Zeichens

Anwendung: Rechtschreibkorrektur, DNA-Sequenzanalyse, Plagiatserkennung und Datei-Versionskontrolle.

Spezielle Fälle
Identische Strings:
LD("ABC", "ABC") = 0
Leerer String:
LD("", "ABC") = 3 (3× Einfügen)
Völlig unterschiedlich:
LD("CAT", "DOG") = 3
Verwandte Distanzen

→ Hamming Distanz
Damerau-Levenshtein: + Transposition
Jaro-Winkler: Für ähnliche Strings

Formeln der Levenshtein Distanz

Rekursive Definition
\[LD(i,j) = \begin{cases} j & \text{wenn } i = 0 \\ i & \text{wenn } j = 0 \\ LD(i-1,j-1) & \text{wenn } s_i = t_j \\ 1 + \min \begin{cases} LD(i-1,j) \\ LD(i,j-1) \\ LD(i-1,j-1) \end{cases} & \text{sonst} \end{cases}\]
Matrix-Form
\[D[i,j] = \min \begin{cases} D[i-1,j] + 1 & \text{(Löschung)} \\ D[i,j-1] + 1 & \text{(Einfügung)} \\ D[i-1,j-1] + c & \text{(Substitution)} \end{cases}\] \[c = \begin{cases} 0 & \text{wenn } s_i = t_j \\ 1 & \text{sonst} \end{cases}\]
Initialisierung
\[D[i,0] = i \text{ für alle } i\] \[D[0,j] = j \text{ für alle } j\] Basis: Leere Strings
Komplexität
\[\text{Zeit: } O(m \cdot n)\] \[\text{Platz: } O(m \cdot n)\] m, n = String-Längen
Normalisierte Form
\[LD_n(s,t) = \frac{LD(s,t)}{\max(|s|,|t|)}\] Werte zwischen 0 und 1
Ähnlichkeit
\[\text{Sim}(s,t) = 1 - LD_n(s,t)\] Ähnlichkeitsmaß (0-1)

Detailliertes Rechenbeispiel

Beispiel: Levenshtein("Das Tier im Zoo", "Das Tor am Zoo")

Gegeben:

  • String 1: "Das Tier im Zoo"
  • String 2: "Das Tor am Zoo"

Benötigte Operationen:

  1. Ersetze io in "Tier"
  2. Lösche e aus "Tier"
  3. Ersetze ia in "im"

Transformation:

"Das Tier im Zoo""Das Tor im Zoo""Das Tor m Zoo""Das Tor am Zoo"

Ergebnis: Levenshtein Distanz = 3

Dynamische Programmierung Matrix

Beispiel: Berechnung für "KITTEN" → "SITTING"

DP-Matrix:

""SITTING
""01234567
K11234567
I22123456
T33212345
T44321234
E55432234
N66543323

Operationen:

  1. S für K
  2. I für I (Match)
  3. T für T (Match)
  4. T für T (Match)
  5. I für E
  6. N für N (Match)
  7. G einfügen

Distanz: 3

Praktische Anwendungen

Textverarbeitung
  • Rechtschreibkorrektur
  • Autokorrektur
  • Suchvorschläge
  • Plagiatserkennung
Bioinformatik
  • DNA-Sequenz-Alignment
  • Protein-Vergleiche
  • Genetische Distanzen
  • Evolutionsanalyse
Software-Entwicklung
  • Versionskontrolle (Git diff)
  • Code-Ähnlichkeit
  • Merge-Konflikte
  • Refactoring-Tools

Algorithmus & Komplexität

Dynamische Programmierung vs. Rekursion

Naive Rekursion:

  • Zeitkomplexität: O(3^min(m,n))
  • Platzkomplexität: O(min(m,n))
  • Problem: Exponentielles Wachstum
  • Verwendung: Nur für sehr kurze Strings

Dynamische Programmierung:

  • Zeitkomplexität: O(m×n)
  • Platzkomplexität: O(m×n)
  • Vorteil: Praktikabel für lange Strings
  • Optimierung: O(min(m,n)) Platz möglich
Optimierungen:

Platzoptimierung: Nur zwei Zeilen der Matrix speichern

Early Termination: Bei großen Distanzen vorzeitig abbrechen

Praxisbeispiele

Suchvorschläge

Szenario: Benutzer tippt "Pariz" statt "Paris"

Kandidaten:
• Paris: LD = 1 (z→s)
• Berlin: LD = 5
• London: LD = 6
→ Vorschlag: Paris
DNA-Mutation

Szenario: Vergleich von Gensequenzen

Original: ATCGATCG
Mutiert: ATGGATCG
LD = 1: C→G an Position 3
→ Punktmutation erkannt

Varianten und Erweiterungen

Verwandte Algorithmen

Damerau-Levenshtein:

+ Transposition (Vertauschung)
"ab" → "ba" kostet 1 statt 2

Gewichtete Edit Distance:

Verschiedene Kosten für verschiedene Operationen
Berücksichtigt Tastaturlayout

Longest Common Subsequence:

Nur Einfügungen/Löschungen
LD = m + n - 2×LCS