Trên Wikipedia , một triển khai cho sơ đồ lập trình động từ dưới lên cho khoảng cách chỉnh sửa được đưa ra. Nó không hoàn toàn theo định nghĩa; các tế bào bên trong được tính toán như vậy:
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
)
}
Như bạn có thể thấy, thuật toán luôn chọn giá trị từ hàng xóm phía trên bên trái nếu có kết quả khớp, lưu một số truy cập bộ nhớ, hoạt động ALU và so sánh.
Tuy nhiên, việc xóa (hoặc chèn) có thể dẫn đến một giá trị nhỏ hơn , do đó thuật toán không chính xác cục bộ, nghĩa là nó bị phá vỡ với tiêu chí tối ưu. Nhưng có lẽ lỗi không thay đổi kết quả cuối cùng - nó có thể bị hủy bỏ.
Điều này có tối ưu hóa vi mô hợp lệ không, và tại sao (không)?