Làm thế nào để XOR automata?


7

Nói rằng chúng tôi có 3 DFA. Chúng tôi biết cách HOẶC, VÀ, hoặc KHÔNG. Nhưng làm thế nào để một XOR chúng? Không có một đề cập duy nhất về điều này trực tuyến.

xXORyXORz=((x|y)(¬x|y)|z)(¬((x|y)(¬x|y))|z). Đây là cách quá phức tạp và tốn thời gian để vẽ. Có cách nào khác không?

Cảm ơn bạn đã dành thời gian!



1
Cảm ơn bạn Raphael! Điều cuối cùng tôi làm là ε-đóng cửa, nhưng đặt trạng thái là chấp nhận số lượng trạng thái chấp nhận mà nó kèm theo là số lẻ. Nếu một trạng thái không có sự chuyển đổi cho một biểu tượng, tôi chỉ giả sử từ chối cho trạng thái đó chứ không phải cho các trạng thái khác mà nó được nhóm lại.
Xpl0

Câu trả lời:


10

Lưu ý rằng việc xây dựng giao lộ và liên kết ("và" và "hoặc") của hai automata là hoàn toàn giống nhau, ngoại trừ định nghĩa về trạng thái nào được chấp nhận. Nguyên tắc tương tự áp dụng cho mọi kết hợp Boolean của bất kỳ nhóm ngôn ngữ hữu hạn nào: sử dụng cấu trúc sản phẩm và định nghĩa phù hợp về trạng thái nào sẽ được chấp nhận.


Rất hữu ích, mọi thứ có ý nghĩa ngay lập tức. Cảm ơn bạn!
Xpl0

6

Vì ba máy đều mang tính quyết định nên hoạt động kết hợp không phức tạp chút nào. Chạy các máy song song, sử dụng cấu trúc sản phẩm trực tiếp giống như cấu trúc cũng được sử dụng cho giao lộ và tại mỗi trạng thái ba XOR, sự hiện diện của các trạng thái cuối cùng để xác minh xem trạng thái mới cho sản phẩm XOR có được chấp nhận hay không.


Không có nhiều khác biệt giữa câu trả lời của bạn và David, nhưng tôi phải chọn một. Tôi thực sự biết ơn sự giúp đỡ của bạn!
Xpl0

Đúng: câu trả lời của chúng tôi đã được viết trong vòng một phút của nhau. Vui mừng chúng tôi có thể giúp đỡ. Lời cảm ơn của bạn có giá trị hơn các khoản tín dụng đang bị đe dọa ở đây.
Hendrik

2

Vì bạn chỉ làm việc với DFA, bạn có thể XOR hai automata bằng cách xây dựng sản phẩm chéo của hai automata và sau đó chấp nhận trạng thái chấp nhận các cặp trạng thái mà một trạng thái là trạng thái chấp nhận, nhưng không phải cả hai.

Lưu ý rằng cấu trúc này chỉ hoạt động cho các DFA trong đó mỗi trạng thái có chính xác một trạng thái kế tiếp cho mỗi biểu tượng bảng chữ cái. Điều này đảm bảo rằng bạn luôn đạt đến trạng thái khi mô phỏng thiết bị tự động và việc chấp nhận một từ chỉ phụ thuộc vào trạng thái này có phải là trạng thái kết thúc hay không. Đôi khi, các DFA được định nghĩa sao cho mỗi trạng thái có nhiều nhất một trạng thái kế tiếp cho mỗi ký hiệu bảng chữ cái. Trong trường hợp này, việc xây dựng ở trên không còn hoạt động nữa, bởi vì bây giờ có một lý do thứ hai tại sao một từ không được chấp nhận: với một số từ không có trạng thái nào đạt được.


"Trong trường hợp này, việc xây dựng ở trên không còn hoạt động nữa" - về cơ bản là như vậy. Chèn trạng thái lỗi và sử dụng cấu trúc tiêu chuẩn hoặc thực hiện các chuyển tiếp bị thiếu (nghĩa là từ chối) đối với thiết bị tự động của sản phẩm.
Raphael

@Raphael. Tất nhiên bạn có thể thêm một trạng thái lỗi. Bằng cách này, bạn đảm bảo rằng mỗi tiểu bang có chính xác một trạng thái kế, và sau đó các công trình xây dựng. Vấn đề là đây là một bước cần thiết.
Hoopje

Không, không phải vậy. Việc xây dựng dễ dàng thích nghi; có lẽ tôi đã không đủ rõ ràng? Nếu một trong hai automata thành phần không có chuyển đổi cho chữ cái, bạn tiến hành như thể nó bị từ chối (nghĩa là không bao gồm chuyển đổi cho giao lộ; bao gồm một cho sự khác biệt của tập hợp và đối xứng và đi đến bộ tự động gốc tương ứng).
Raphael

Cảm ơn bạn Về cơ bản, tôi đã làm theo hướng dẫn của bạn, chỉ với những gì Raphael thêm vào.
Xpl0

@Raphael. Sau đó, bạn cần biết hàm boolean nào được áp dụng trong quá trình xây dựng các trạng thái và không chỉ khi chọn trạng thái nào được chấp nhận (như được nêu trong tất cả các câu trả lời cho câu hỏi).
Hoopje
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.