Na Wikipedia , é fornecida uma implementação para o esquema de programação dinâmica de baixo para cima para a distância de edição. Não segue a definição completamente; as células internas são calculadas assim:
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 você pode ver, o algoritmo sempre escolhe o valor do vizinho superior esquerdo, se houver uma correspondência, economizando alguns acessos à memória, operações da ALU e comparações.
No entanto, a exclusão (ou inserção) pode resultar em um valor menor , portanto o algoritmo está localmente incorreto, ou seja, quebra com o critério de otimização. Mas talvez o erro não mude o resultado final - ele pode ser cancelado.
Essa micro-otimização é válida e por que (não)?