Định nghĩa: Gọi E = (Q, , , q0, F) là một ε–NFA.
L(E) là ngôn ngữ được chấp nhận bởi E nếu:
L(E) = {w | ^(q0, w) ∩ F ≠ }
Chuyển từ ε–NFA sang DFA
Cho trước ε–NFA E, chúng ta có thể xây dựng DFA D chấp nhận cùng một ngôn ngữ của E. Phương pháp xây dựng gần giống với kỹ thuật
“Kiến tạo tập con”: mỗi trạng thái của D là tập các trạng thái của E.
65
Gọi E = (QE, , E, q0, FE). Khi đó, DFA tương ứng
D = (QD, , D, qD, FD) được định nghĩa như sau: QD QD qD = ECLOSE(q0) FD: Tập hợp của tập các trạng thái. D(S, a) được xác định với mọi a và S QE ε–NFA E = ({q0, q1, …, q5}, {., +, –, 0, 1, …, 9}, , q0, {q5}) Xây dựng DFA D tương ứng.
qD = ECLOSE(q0) = ^(q0, ε) = {q0} {q1} = {q0, q1}
Các trạng thái mới của D là tập các trạng thái của E,
đầu tiên được xây dựng từ tập {q0, q1} trên mọi ký hiệu nhập. Đây là trạng thái bắt đầu của D.
Mỗi tập vừa mới hình thành tiếp tục được mở rộng thông qua bao đóng rỗng.
67DFA D được xây dựng từ ε–NFA E đoán nhận số DFA D được xây dựng từ ε–NFA E đoán nhận số
thực.
Để tránh phức tạp, các “trạng thái chết” (dead state) Ø và những phép truyền đến “trạng thái chết” này không được trình bày.
Mỗi trạng thái trong hình đều có những cung truyền bổ sung dẫn đến “trạng thái chết”. Nhãn của những cung truyền này là mọi ký hiệu nhập vốn không xuất hiện trong hình tại trạng thái đang xét.
“Trạng thái chết” có phép truyền lên chính nó với tất cả các ký hiệu nhập. Start {q0, q1} {q1} {q1, q4} {q2} {q3, q5} {q2, q3, q5} +, – 0, 1, …, 9 0, 1, …, 9 0, 1, …, 9 0, 1, …, 9 0, 1, …, 9 0, 1, …, 9 · · ·
69
Định lý 2.22: Ngôn ngữ L được chấp nhận bởi ε– NFA nào đó nếu và chỉ nếu L được chấp nhận bởi một DFA D.
Chứng minh:
(If) Giả sử L = L(D) được chấp nhận bởi DFA D
71(Only–if) Gọi E = (QE, , E, q0, FE) là một ε–NFA. (Only–if) Gọi E = (QE, , E, q0, FE) là một ε–NFA.
Bước qui nạp: Giả sử w = xa, với a là ký hiệu