Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Sửa lỗi toàn cục nhỏ nhất theo Ô-tô-mát (Aho–Ullman)

    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)M = (Q, \Sigma, \delta, q_0, F)M=(Q,Σ,δ,q0​,F) với ∣Q∣=k|Q|=k∣Q∣=k trạng thái (đánh số 0..k−10..k-10..k−1), bảng chuyển δ\deltaδ đầy đủ (mọi cặp trạng thái–ký hiệu đều xác định), trạng thái đầu q0q_0q0​, tập trạng thái chấp nhận F≠∅F \ne \emptysetF=∅. Cho một chuỗi sss trên Σ\SigmaΣ (có thể không được MMM chấp nhận).

    Định nghĩa 3 phép chỉnh sửa, mỗi phép chi phí 111: 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 sss thành một chuỗi s′s's′ được MMM chấp nhận (tức đưa MMM từ q0q_0q0​ đến một trạng thái thuộc FFF khi đọc s′s's′). Nếu sss đã được chấp nhận, chi phí là 000.

    Ví dụ: Σ={a,b}\Sigma=\{a,b\}Σ={a,b}, 2 trạng thái {0,1}\{0,1\}{0,1}, q0=0q_0=0q0​=0, F={1}F=\{1\}F={1}, δ(q,a)=1\delta(q,a)=1δ(q,a)=1 và δ(q,b)=0\delta(q,b)=0δ(q,b)=0 với mọi qqq (tức MMM chấp nhận đúng các chuỗi không rỗng có ký tự cuối là a). Với s=s=s= bb: thay ký tự cuối b thành a được ba, được chấp nhận, chi phí 111 — đây là chi phí nhỏ nhất có thể.

    • Định dạng đầu vào:

      Dòng 1: kkk (1≤k≤81 \le k \le 81≤k≤8) — số trạng thái. Dòng 2: số nguyên ∣Σ∣|\Sigma|∣Σ∣ (1≤∣Σ∣≤51 \le |\Sigma| \le 51≤∣Σ∣≤5) rồi ∣Σ∣|\Sigma|∣Σ∣ 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: q0q_0q0​. Dòng 4: số nguyên fff (1≤f≤k1 \le f \le k1≤f≤k) rồi fff trạng thái chấp nhận. kkk dòng tiếp theo: dòng thứ q+1q+1q+1 trong nhóm này gồm ∣Σ∣|\Sigma|∣Σ∣ số nguyên là δ(q,kyˊ hiệu thứ j)\delta(q, \text{ký hiệu thứ } j)δ(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 sss trên bảng chữ Σ\SigmaΣ (0≤∣s∣≤300 \le |s| \le 300≤∣s∣≤30, có thể rỗng — dòng trống).

    • Định dạng đầu ra:

      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...