Chuyển đổi NDFA sang DFA
Báo cáo vấn đề
Để cho X = (Qx, ∑, δx, q0, Fx)là NDFA chấp nhận ngôn ngữ L (X). Chúng tôi phải thiết kế một DFA tương đươngY = (Qy, ∑, δy, q0, Fy) như vậy mà L(Y) = L(X). Quy trình sau đây chuyển đổi NDFA thành DFA tương đương của nó:
Thuật toán
Input - NDFA
Output - Một DFA tương đương
Step 1 - Tạo bảng trạng thái từ NDFA đã cho.
Step 2 - Tạo một bảng trạng thái trống dưới các bảng chữ cái đầu vào có thể có cho DFA tương đương.
Step 3 - Đánh dấu trạng thái bắt đầu của DFA bằng q0 (Giống như NDFA).
Step 4- Tìm ra sự kết hợp của các Kỳ {Q 0 , Q 1 , ..., Q n } cho mỗi bảng chữ cái đầu vào có thể có.
Step 5 - Mỗi khi chúng tôi tạo một trạng thái DFA mới dưới các cột bảng chữ cái đầu vào, chúng tôi phải áp dụng lại bước 4, nếu không thì chuyển sang bước 6.
Step 6 - Các trạng thái chứa bất kỳ trạng thái cuối cùng nào của NDFA là trạng thái cuối cùng của DFA tương đương.
Thí dụ
Chúng ta hãy xem xét NDFA được thể hiện trong hình bên dưới.
q | δ (q, 0) | δ (q, 1) |
---|---|---|
a | {a, b, c, d, e} | {d, e} |
b | {c} | {e} |
c | ∅ | {b} |
d | {e} | ∅ |
e | ∅ | ∅ |
Sử dụng thuật toán trên, chúng tôi tìm thấy DFA tương đương của nó. Bảng trạng thái của DFA được hiển thị bên dưới.
q | δ (q, 0) | δ (q, 1) |
---|---|---|
[a] | [a, b, c, d, e] | [d, e] |
[a, b, c, d, e] | [a, b, c, d, e] | [b, d, e] |
[d, e] | [e] | ∅ |
[b, d, e] | [c, e] | [e] |
[e] | ∅ | ∅ |
[c, e] | ∅ | [b] |
[b] | [c] | [e] |
[c] | ∅ | [b] |
Biểu đồ trạng thái của DFA như sau: