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.
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
LD("ABC", "ABC") = 0
LD("", "ABC") = 3 (3× Einfügen)
LD("CAT", "DOG") = 3
Verwandte Distanzen
→ Hamming Distanz
Damerau-Levenshtein: + Transposition
Jaro-Winkler: Für ähnliche Strings
Formeln der Levenshtein Distanz
Rekursive Definition
Matrix-Form
Initialisierung
Komplexität
Normalisierte Form
Ähnlichkeit
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:
- Ersetze i → o in "Tier"
- Lösche e aus "Tier"
- Ersetze i → a in "im"
Transformation:
Ergebnis: Levenshtein Distanz = 3
Dynamische Programmierung Matrix
Beispiel: Berechnung für "KITTEN" → "SITTING"
DP-Matrix:
"" | S | I | T | T | I | N | G | |
---|---|---|---|---|---|---|---|---|
"" | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
K | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
I | 2 | 2 | 1 | 2 | 3 | 4 | 5 | 6 |
T | 3 | 3 | 2 | 1 | 2 | 3 | 4 | 5 |
T | 4 | 4 | 3 | 2 | 1 | 2 | 3 | 4 |
E | 5 | 5 | 4 | 3 | 2 | 2 | 3 | 4 |
N | 6 | 6 | 5 | 4 | 3 | 3 | 2 | 3 |
Operationen:
- S für K
- I für I (Match)
- T für T (Match)
- T für T (Match)
- I für E
- N für N (Match)
- 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"
• Paris: LD = 1 (z→s)
• Berlin: LD = 5
• London: LD = 6
→ Vorschlag: Paris
DNA-Mutation
Szenario: Vergleich von Gensequenzen
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