Chuyển NFA thành DFA
Ta sẽ xem cách chuyển một ôtômat không đơn định thành ôtômat đơn định, qua đó chứng minh rằng khả năng tính toán của ôtômat không đơn định và ôtômat đơn định là như nhau.
Ý tưởng cơ bản
Cho ôtômat không đơn định ⟨QN, ΣN, δN, q0, FN⟩ không có phép chuyển epsilon. Ta xây dựng ôtômat đơn định ⟨QD, ΣD, δD, p0, FD⟩ sao cho
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
Hàm chuyển trạng thái δD được định nghĩa như sau:
Điều này có nghĩa là gì? Ôtômat không đơn định có thể đồng thời ở nhiều trạng thái, nên chẳng hạn có thể xảy ra tình huống ôtômat không đơn định của ta ở các trạng thái {q0, q1}. Đọc kí hiệu tiếp theo, chẳng hạn 1, ta có thể đến tập trạng thái {q0, q2, q3}. Ở bản đơn định của cùng ôtômat đó, điều này thể hiện như sau: ta tạo hai trạng thái, đặt tên chúng là {q0, q1} và {q0, q2, q3}, rồi thêm phép chuyển giữa chúng ứng với kí hiệu 1. Về hình thức, ta đi từ một trạng thái sang một trạng thái khác, nhưng nhờ cách đặt tên, ta biết rằng khi đó ôtômat không đơn định ở hai trạng thái, rồi ở ba trạng thái.
Ví dụ
Cho ôtômat không đơn định sau:
Để xây dựng ôtômat đơn định, trước hết cần xây dựng hàm chuyển trạng thái mới. Để làm việc này, ta dùng một bảng ghi lại mọi phép chuyển. Ban đầu bảng như sau:
Khi thuật toán kết thúc, cột bên trái sẽ chứa mọi trạng thái của ôtômat đơn định. Bảng đã điền đầy đủ sẽ xác định hàm chuyển trạng thái. Bây giờ ta điền vào bảng các trạng thái đến được khi đang ở các trạng thái {q0} và đầu vào là kí hiệu 0 hoặc 1.
Từ trạng thái q0, ứng với kí hiệu 0 chỉ có phép chuyển đến trạng thái q1, còn ứng với kí hiệu 1 có phép chuyển đến các trạng thái q1 và q2. Bây giờ ta thêm vào bảng hai trạng thái mới: {q1} và {q1, q2}. Vì sao? Mỗi khi điền vào bảng một tập trạng thái chưa có ở cột bên trái, ta thêm tập trạng thái đó vào cột bên trái.
rồi lại điền tiếp. Với trạng thái {q1, q2}, không được quên kiểm tra cả hai trạng thái, tức là lấy hợp của các trạng thái đến được từ q1 và các trạng thái đến được từ q2.
Ta được một số trạng thái mới, cần thêm vào bảng:
…và lại điền các phép chuyển:
Các trạng thái {q0, q1, q3}, {q1} và {q1,q2} đã có trong bảng, nên ta chỉ thêm trạng thái {q0,q1,q2,q3}.
Không có trạng thái mới nào được thêm vào, vậy bảng đã điền xong. Bây giờ chỉ còn vẽ đồ thị chuyển trạng thái. Các trạng thái của ôtômat đơn định nằm ở cột thứ nhất, các phép chuyển ứng với kí hiệu 0 và 1 nằm ở các cột tiếp theo. Mỗi trạng thái chứa một trạng thái kết thúc nào đó của ôtômat ban đầu cũng là trạng thái kết thúc của ôtômat này. Nghĩa là mọi trạng thái chứa q3 đều là trạng thái kết thúc. Ôtômat như sau:
Ta có thể kiểm tra rằng ôtômat này hoạt động đúng. Thử đoán nhận xâu 11001. Ở ôtômat đơn định, ta đi theo đường
và ôtômat đoán nhận xâu, vì trạng thái cuối cùng {q0, q1, q2, q3} là trạng thái kết thúc. Ở ôtômat không đơn định, khi mô phỏng ta cũng đi qua đúng các trạng thái đó: bắt đầu ở trạng thái q0, với kí hiệu 1 ta đến các trạng thái {q1, q2}. Kí hiệu 1 tiếp theo đưa ta đến các trạng thái {q0,q3}, và cứ thế với các trạng thái tiếp theo. Cuối cùng ta ở tất cả các trạng thái {q0, q1, q2, q3} và ôtômat đoán nhận xâu.
Tài liệu tham khảo
Mục lục: Ôtômat hữu hạn, Ôtômat đầy đủ, Ôtômat hữu hạn không đơn định, Mô phỏng ôtômat không đơn định, Chuyển NFA thành DFA