Chuyển đổi một NFA sang regex bằng thuật toán GNFA?


7

Vì vậy, tôi đã cố gắng để giải quyết vấn đề này trong một thời gian dài và gần như cảm thấy như tôi đang đi vào vòng lặp về câu hỏi này.

Cho NFA sau:

nhập mô tả hình ảnh ở đây

Sử dụng thuật toán GNFA có được biểu thức chính quy.

Tôi hiểu rằng bạn sẽ có những bước sau cho bước đầu tiên (thêm trạng thái trống): nhập mô tả hình ảnh ở đây

Bước tiếp theo sẽ xóa trạng thái [q1] Tôi sẽ nhận được: nhập mô tả hình ảnh ở đây

Cuối cùng, xóa [q2] sẽ nhận được: nhập mô tả hình ảnh ở đây

Tuy nhiên, câu trả lời mà người khác nhận được là: (mộtbb*một)*bb* Điều đó không có ý nghĩa như tôi đã nhận, một*b(bmộtmột*b)*? Một GNFA (máy tự động hữu hạn hữu hạn không tổng quát) được mô tả như sau:

GNFA tương tự như NFA nhưng phải tuân theo các quy tắc nhất định:

  • Nó chỉ có một trạng thái chấp nhận
  • Trạng thái ban đầu không có sự chuyển tiếp vào nó
  • Trạng thái chấp nhận không có chuyển tiếp đi ra từ nó
  • Chuyển đổi có thể biểu thị bất kỳ biểu thức chính quy nào, thay vì chỉ là một biểu tượng từ bảng chữ cái Lưu ý rằng biểu tượng là một loại biểu thức chính quy.

Hơn nữa, chúng tôi có thể chuyển đổi NFA thành GNFA như sau:

  • Thêm trạng thái bắt đầu mới với chuyển đổi to sang trạng thái bắt đầu cũ
  • Thêm trạng thái chấp nhận mới với chuyển đổi from từ trạng thái chấp nhận cũ
  • Nếu mũi tên có nhiều nhãn hoặc nếu có nhiều mũi tên giữa hai trạng thái, hãy thay thế chúng bằng liên kết (hoặc) của các nhãn đó

@Jeff, Nó được gọi là máy tự động hữu hạn không phổ biến tổng quát (GNFA)
Anish B

Gợi ý: DFA của bạn thực sự chấp nhận ngôn ngữ nào? Bạn sẽ có thể tìm ra một mô tả tiếng Anh về ngôn ngữ được chấp nhận chỉ bằng cách xem DFA. Bây giờ, trong hai biểu thức chính quy(một+bb*một)bb*một*b(b+mộtmột*b)*mô tả chính xác ngôn ngữ đó?
JeffE

@JeffE Ngoài ra, tôi đồng ý rằng cái này có ý nghĩa hơn cái kia, tuy nhiên, khi sử dụng thuật toán GNFA, nó thường không giống như đọc nó trong một mô tả tiếng Anh do đó tôi nhầm lẫn.
Anish B

1
Tôi chưa bao giờ nói "cái này có ý nghĩa hơn cái kia". Tôi đề nghị bạn giải quyết vấn đề từ các nguyên tắc đầu tiên, sử dụng bộ não của bạn thay vì thuật toán GNFA, sau đó kiểm tra xem hai biểu thức chính quy nào là đúng. (Lưu ý: Tôi đã không viết "biểu thức nào trong hai biểu thức chính quy đúng.")
JeffE

1
Xem thêm câu hỏi tham khảo của chúng tôi để biết thêm các kỹ thuật, tất cả đều có thể mang lại kết quả khác nhau (nhưng vẫn đúng).
Raphael

Câu trả lời:


8

Bạn muốn biết tại sao "những người khác" có được một biểu hiện khác nhau?

Khi xây dựng một biểu thức chính quy không có câu trả lời đúng duy nhất. Thường có một vài thành ngữ "có ý nghĩa". Trong trường hợp này, bạn sử dụng phương pháp loại bỏ trạng thái (tôi đã học được điều này dưới tên của Brzozowski và McCluskey). Ở đây thứ tự loại bỏ xác định biểu thức tìm thấy. Vậy: bạn nhận được gì khi gỡ bỏq2 Đầu tiên?

Bạn cũng có thể làm "thủ thuật thông minh" trong quá trình xây dựng. Trong ví dụ của bạn, bạn cóbmộtmột*b tương đương với một*b.


+1 cho b U aa*b = a*bvà tên Brzozowski và McCluskey
Maha
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.