Edit Distance (Levenshtein) calcula el mínimo número de operaciones (inserción, eliminación, reemplazo) para transformar una cadena s1 en otra s2. Es una métrica fundamental en procesamiento de texto, spell checkers, y bioinformática.
La versión estándar asigna costo 1 a cada operación. Existe una relación íntima con LCS: si todas las operaciones cuestan 1, edit_distance = len(s1) + len(s2) - 2 * LCS(s1, s2).
Cómo Funciona
- Inicializa tabla
dpde tamaño(m+1) × (n+1)dondedp[i][j]= distancia entres1[0..i)ys2[0..j). - Base:
dp[i][0] = i(eliminarichars),dp[0][j] = j(insertarjchars). - Recurre:
- Si
s1[i-1] == s2[j-1]:dp[i][j] = dp[i-1][j-1](sin costo). - Si no:
dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])(delete, insert, replace).
- Si
- Resultado:
dp[m][n].
Idea Clave
La optimal substructure captura tres decisiones en cada celda (i,j):
- Delete
s1[i-1]: resolvers1[0..i-1)vss2[0..j)→dp[i-1][j] + 1 - Insert
s2[j-1]: resolvers1[0..i)vss2[0..j-1)→dp[i][j-1] + 1 - Replace
s1[i-1]cons2[j-1]: resolver el resto →dp[i-1][j-1] + 1
Si los caracteres coinciden, no necesitas operación: copias el costo del subproblema anterior.
Ejemplo Trabajado
s1 = "kitten", s2 = "sitting", m=6, n=7.
Tabla DP (primeras filas/columnas):
Ø 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 ]
Operaciones óptimas:
k → s(replace, costo 1)e → i(replace, costo 1)- Insert
gal final (insert, costo 1)
Resultado: dp[6][7] = 3.
Casos Extremos y Trampas
- Strings idénticas — distancia 0.
- Strings vacías — distancia = longitud de la otra.
- Espacio — se reduce a
O(min(m,n))con dos filas. - LCS relación — solo para costos unitarios; con costos custom no aplica.
Comparación con Variantes
| Algoritmo | Operaciones | Complejidad | Uso |
|---|---|---|---|
| Levenshtein | ins/del/repl | O(mn) | Spell check |
| Damerau-Levenshtein | + transposición | O(mn) | Spell check avanzado |
| LCS | Solo match/replace | O(mn) | Diff |
Aplicaciones
- Spell checkers — sugerir correcciones ortográficas
- Bioinformática — alineamiento de secuencias de ADN
- Diff de texto — mostrar cambios entre versiones
- Procesamiento de lenguaje — normalización de texto, fuzzy search
Trayectoria de Práctica
- Implementa edit distance DP; traza
kitten → sitting. - Optimiza a
O(min(m,n))espacio con dos filas. - Verifica la relación con LCS en un ejemplo.
- Extiende a Damerau-Levenshtein: añade transposición.
- Investiga weighted edit distance: ¿cómo cambiaría la DP?