Sự tƣơng đƣơng giữa DFA và NFA

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 40 - 41)

III. ÔTÔMAT HỮU HẠN (FA: FINITE AUTOMATA)

3.3. Sự tƣơng đƣơng giữa DFA và NFA

Vì mỗi DFA là một NFA, nên rõ ràng lớp ngôn ngữ đƣợc chấp nhận bởi NFA cũng bao gồm các tập chính quy (đây chính là ngôn ngữ đƣợc chấp nhận bởi DFA). Tuy nhiên, không có cơ sở để nói rằng NFA chỉ chấp nhận duy nhất các tập hợp này. Điều đó cho thấy DFA có thể mô phỏng đƣợc hoạt động của NFA, nghĩa là với mỗi NFA, ta có thể xây dựng một DFA tƣơng đƣơng (chấp nhận cùng một ngôn ngữ với nó). Đặt một DFA mô phỏng hoạt động của NFA là cho phép các

Tin học Lý Thuyết trên WEB‖ trạng thái của DFA tƣơng ứng với tập các trạng thái của NFA. Tại mỗi thời điểm, DFA lƣu giữ trong bộ điều khiển tất cả các trạng thái mà NFA có thể di chuyển đến khi đọc cùng một input nhƣ DFA.

Định lý: Nếu L là tập đƣợc chấp nhận bởi một NFA thì tồn tại một DFA chấp nhận L.

Ví dụ 3.3: Cho NFA M({q0,q1}, {0,1}, δ, q0, {q1} với hàm chuyển δ nhƣ sau:

δ(q0,0) = { q0, q1}, δ(q0,1) = { q1}, δ(q1,0) = Ø, δ(q1,1) = { q0, q1}

Ta xây dựng DFA tƣơng đƣơng M‘(Q‘, {0,1}, δ‘, [q0], F‘) chấp nhận L(M) nhƣ sau:

. Q‘: chứa tất cả các tập con của { q0, q1}. Vậy Q‘ = {[ q0], [q1], [q0, q1], Ø} . Hàm chuyển δ‘: Vì δ(q0,0) = { q0, q1} nên δ‘([q0],0) = [q0, q1] Tƣơng tự: δ‘([q0],1) = [q1] δ‘([q1],0) = Ø δ‘([q1],1) = [q0, q1] Mặt khác: δ‘(Ø,0) = δ‘(Ø,1) = Ø Cuối cùng: δ‘([q0, q1], 0) = [q0, q1] δ‘([q0, q1], 1) = [q0, q1] . Tập trạng thái kết thúc: F‘= {[ q1], [q0, q1]}

Thực tế, có rất nhiều trạng thái của NFA không có hàm chuyển đến từ trạng thái bắt đầu [q0]. Do đó, thông thƣờng, cách tốt nhất là ta nên xây dựng DFA tƣơng đƣơng bắt đầu từ trạng thái [q0] và thêm vào các trạng thái mới cho DFA chỉ khi có các hàm chuyển từ một trạng thái đã đƣợc thêm vào trƣớc đó.

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 40 - 41)