Một phương pháp khác, không được bao gồm trong các câu trả lời ở trên, là chuyển đổi tự động hữu hạn . Ví dụ đơn giản, chúng ta hãy chỉ ra rằng các ngôn ngữ thông thường được đóng trong hoạt động xáo trộn , được định nghĩa như sau:
Bạn có thể hiển thị bao đóng dưới xáo trộn bằng các thuộc tính đóng, nhưng bạn cũng có thể hiển thị trực tiếp bằng DFA. Giả sử rằng là một DFA chấp nhận (với ). Chúng tôi xây dựng một DFA như sau:
L1SL2={x1y1…xnyn∈Σ∗:x1…xn∈L1,y1…yn∈L2}
Ai=⟨Σ,Qi,Fi,δi,q0i⟩Lii=1,2⟨Σ,Q,F,δ,q0⟩
- Tập hợp các trạng thái là , trong đó thành phần thứ ba ghi nhớ biểu tượng tiếp theo là (khi 1) hay (khi 2).Q1×Q2×{1,2}xiyi
- Trạng thái ban đầu là .q0=⟨q01,q02,1⟩
- Các trạng thái chấp nhận là .F=F1×F2×{1}
- Hàm chuyển đổi được xác định bởi và .δ(⟨q1,q2,1⟩,σ)=⟨δ1(q1,σ),q2,2⟩δ(⟨q1,q2,2⟩,σ)=⟨q1,δ2(q2,σ),1⟩
Một phiên bản tinh vi hơn của phương pháp này liên quan đến việc đoán . Ví dụ: chúng ta hãy chỉ ra rằng các ngôn ngữ thông thường được đóng dưới sự đảo ngược , nghĩa là,
(Ở đây .) Đây là một trong những thao tác đóng tiêu chuẩn và đóng cửa dưới sự đảo ngược dễ dàng sau khi thao tác các biểu thức chính quy (có thể được coi là đối tác của chuyển đổi tự động hữu hạn để biểu thức chính quy) - chỉ cần đảo ngược biểu thức thông thường. Nhưng bạn cũng có thể chứng minh việc đóng cửa bằng NFA. Giả sử rằng được chấp nhận bởi DFA . Chúng tôi xây dựng một NFA
LR={wR:w∈Σ∗}.
(w1…wn)R=wn…w1L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q′0⟩ , trong đó
- Tập hợp các trạng thái là .Q′=Q∪{q′0}
- Trạng thái ban đầu là .q′0
- Trạng thái chấp nhận duy nhất là .q0
- Hàm chuyển đổi được xác định như sau: và cho mọi trạng thái và , .δ′(q′0,ϵ)=Fq∈Qσ∈Σδ(q′,σ)={q:δ(q,σ)=q′}
(Chúng ta có thể thoát khỏi nếu chúng ta cho phép nhiều trạng thái ban đầu.) Thành phần đoán ở đây là trạng thái cuối cùng của từ sau khi đảo ngược.q′0
Đoán thường liên quan đến việc xác minh. Một ví dụ đơn giản là đóng cửa theo vòng quay :
Giả sử rằng được chấp nhận bởi DFA . Chúng tôi xây dựng một NFA , hoạt động như sau. Đầu tiên NFA đoán . Sau đó, nó xác minh rằng và , chuyển từ sang không xác định. Điều này có thể được chính thức hóa như sau:
R(L)={yx∈Σ∗:xy∈L}.
L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q′0⟩q=δ(q0,x)δ(q,y)∈Fδ(q0,x)=qyx
- Các trạng thái là . Ngoài trạng thái ban đầu , các trạng thái là , trong đó là trạng thái mà chúng tôi đoán, là trạng thái hiện tại và chỉ định xem chúng tôi có ở phần của đầu vào (khi 1) hoặc tại phần của đầu vào (khi 2).Q′={q′0}∪Q×Q×{1,2}q′0⟨q,qcurr,s⟩qqcurrsyx
- Các trạng thái cuối cùng là : chúng tôi chấp nhận khi .F′={⟨q,q,2⟩:q∈Q}δ(q0,x)=q
- Các hiệu ứng chuyển tiếp thực hiện đoán .δ′(q′0,ϵ)={⟨q,q,1⟩:q∈Q}q
- Các chuyển đổi (với mọi và ) mô phỏng DFA gốc.δ′(⟨q,qcurr,s⟩,σ)=⟨q,δ(qcurr,σ),s⟩q,qcurr∈Qs∈{1,2}
- Các hiệu ứng chuyển tiếp , với mọi và , thực hiện di chuyển từ phần sang phần. Điều này chỉ được phép nếu chúng tôi đạt đến trạng thái cuối cùng trên phần .δ′(⟨q,qf,1⟩,ϵ)=⟨q,q0,2⟩q∈Qqf∈Fyxy
Một biến thể khác của kỹ thuật kết hợp các quầy giới hạn. Ví dụ: chúng ta hãy xem xét việc đóng khoảng cách chỉnh sửa thay đổi :
Đưa ra một DFA cho , e xây dựng một NFA cho như sau:
Ek(L)={x∈Σ∗: there exists y∈L whose edit distance from x is at most k}.
⟨Σ,Q,F,δ,q0⟩L⟨Σ,Q′,F′,δ′,q′0⟩Ek(L)
- Tập hợp các trạng thái là , trong đó mục thứ hai đếm số lượng thay đổi được thực hiện cho đến nay.Q′=Q×{0,…,k}
- Trạng thái ban đầu là .q′0=⟨q0,0⟩
- Các trạng thái chấp nhận là .F′=F×{0,…,k}
- Với mỗi có các hiệu ứng chuyển tiếp .q,σ,i⟨δ(q,σ),i⟩∈δ′(⟨q,i⟩,σ)
- Các phần chèn được xử lý bởi các hiệu ứng chuyển tiếp cho tất cả sao cho .⟨q,i+1⟩∈δ′(⟨q,i⟩,σ)q,σ,ii<k
- Việc xóa được xử lý bằng các chuyển đổi cho tất cả sao cho .⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,ϵ)q,σ,ii<k
- Thay thế được xử lý tương tự bằng cách chuyển đổi cho tất cả sao cho .⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,τ)q,σ,τ,ii<k