Sur Wikipedia , une implémentation du schéma de programmation dynamique ascendant pour la distance d'édition est donnée. Il ne suit pas complètement la définition; les cellules internes sont calculées ainsi:
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
)
}
Comme vous pouvez le voir, l'algorithme choisit toujours la valeur du voisin supérieur gauche s'il y a une correspondance, en sauvegardant certains accès à la mémoire, les opérations ALU et les comparaisons.
Cependant, la suppression (ou l'insertion) peut entraîner une valeur plus petite , donc l'algorithme est localement incorrect, c'est-à-dire qu'il rompt avec le critère d'optimalité. Mais peut-être que l'erreur ne change pas le résultat final - elle pourrait être annulée.
Cette micro-optimisation est-elle valable, et pourquoi (non)?
la source