Su Wikipedia , viene fornita un'implementazione per lo schema di programmazione dinamica dal basso verso l'alto per la distanza di modifica. Non segue completamente la definizione; le cellule interne sono calcolate così:
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
)
}
Come puoi vedere, l'algoritmo sceglie sempre il valore dal vicino in alto a sinistra in caso di corrispondenza, salvando alcuni accessi alla memoria, operazioni ALU e confronti.
Tuttavia, l'eliminazione (o l'inserimento) può comportare un valore inferiore , pertanto l'algoritmo è localmente errato, ovvero si rompe con il criterio di ottimalità. Ma forse l'errore non cambia il risultato finale: potrebbe essere annullato.
Questa micro-ottimizzazione è valida e perché (no)?