En Wikipedia , se proporciona una implementación para el esquema de programación dinámica ascendente para la distancia de edición. No sigue la definición completamente; Las células internas se calculan así:
if s[i] = t[j] then
d[i, j] := d[i-1, j-1] // no operation required
else
d[i, j] := minimum
(
d[i-1, j] + 1, // a deletion
d[i, j-1] + 1, // an insertion
d[i-1, j-1] + 1 // a substitution
)
}
Como puede ver, el algoritmo siempre elige el valor del vecino superior izquierdo si hay una coincidencia, guardando algunos accesos a la memoria, operaciones de ALU y comparaciones.
Sin embargo, la eliminación (o inserción) puede dar como resultado un valor menor , por lo tanto, el algoritmo es localmente incorrecto, es decir, rompe con el criterio de optimización. Pero tal vez el error no cambie el resultado final, podría cancelarse.
¿Es válida esta microoptimización y por qué (no)?