Auf Wikipedia wird eine Implementierung für das dynamische Bottom-Up-Programmierschema für die Bearbeitungsentfernung angegeben. Es folgt nicht vollständig der Definition; innere Zellen werden folgendermaßen berechnet:
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
)
}
Wie Sie sehen können, wählt der Algorithmus immer den Wert aus dem oberen linken Nachbarn, wenn eine Übereinstimmung vorliegt, und speichert einige Speicherzugriffe, ALU-Operationen und Vergleiche.
Das Löschen (oder Einfügen) kann jedoch zu einem kleineren Wert führen, sodass der Algorithmus lokal falsch ist, dh mit dem Optimalitätskriterium bricht. Aber vielleicht ändert der Fehler nichts am Endergebnis - er könnte aufgehoben werden.
Ist diese Mikrooptimierung gültig und warum (nicht)?