Aho và Ullman đề xuất chiến lược phục hồi lỗi toàn cục (global error correction): khi chuỗi ký hiệu đầu vào không hợp lệ, tìm chuỗi hợp lệ (gần nhất theo khoảng cách chỉnh sửa) mà ngôn ngữ chấp nhận, thay vì chỉ sửa cục bộ.
Cho một ô-tô-mát hữu hạn đơn định đầy đủ (DFA) M=(Q,Σ,δ,q0,F) với ∣Q∣=k trạng thái (đánh số 0..k−1), bảng chuyển δ đầy đủ (mọi cặp trạng thái–ký hiệu đều xác định), trạng thái đầu q0, tập trạng thái chấp nhận F=∅. Cho một chuỗi s trên Σ (có thể không được M chấp nhận).
Định nghĩa 3 phép chỉnh sửa, mỗi phép chi phí 1: chèn 1 ký hiệu, xoá 1 ký hiệu, thay 1 ký hiệu bằng ký hiệu khác. Hãy tìm chi phí nhỏ nhất để biến s thành một chuỗi s′ được M chấp nhận (tức đưa M từ q0 đến một trạng thái thuộc F khi đọc s′). Nếu s đã được chấp nhận, chi phí là 0.
Ví dụ: Σ={a,b}, 2 trạng thái {0,1}, q0=0, F={1}, δ(q,a)=1 và δ(q,b)=0 với mọi q (tức M chấp nhận đúng các chuỗi không rỗng có ký tự cuối là a). Với s= bb: thay ký tự cuối b thành a được ba, được chấp nhận, chi phí 1 — đây là chi phí nhỏ nhất có thể.
Dòng 1: k (1≤k≤8) — số trạng thái. Dòng 2: số nguyên ∣Σ∣ (1≤∣Σ∣≤5) rồi ∣Σ∣ ký hiệu (mỗi ký hiệu là 1 ký tự, phân biệt), cách nhau dấu cách. Dòng 3: q0. Dòng 4: số nguyên f (1≤f≤k) rồi f trạng thái chấp nhận. k dòng tiếp theo: dòng thứ q+1 trong nhóm này gồm ∣Σ∣ số nguyên là δ(q,kyˊ hiệu thứ j) theo đúng thứ tự ký hiệu đã liệt kê ở dòng 2. Dòng cuối: chuỗi s trên bảng chữ Σ (0≤∣s∣≤30, có thể rỗng — dòng trống).
Một số nguyên duy nhất — chi phí chỉnh sửa nhỏ nhất.
Ví dụ:
Đầu vào:
2
2 a b
0
1 1
1 0
1 0
bb
Đầu ra:
1
Đầu vào:
2
2 a b
0
1 1
1 0
1 0
a
Đầu ra:
0
Đang tải editor...