Những thuật toán nào tồn tại để xây dựng một DFA nhận ra ngôn ngữ được mô tả bởi một biểu thức chính quy?


11

Tất cả các sách giáo khoa của tôi đều sử dụng cùng một thuật toán để tạo ra một DFA được cung cấp một biểu thức chính: Đầu tiên, tạo một NFA nhận ra ngôn ngữ của biểu thức chính, sau đó, sử dụng cấu trúc tập hợp con (còn gọi là "powerset"), chuyển đổi NFA thành một DFA tương đương ( tùy chọn giảm thiểu DFA). Tôi cũng đã từng nghe một giáo sư ám chỉ rằng có các thuật toán khác. Có ai biết về bất kỳ? Có lẽ một trong đó đi trực tiếp từ regex đến DFA mà không có NFA trung gian?


Chào mừng bạn đến với cstheory, một trang web hỏi đáp cho các câu hỏi ở cấp độ nghiên cứu trong khoa học máy tính lý thuyết (TCS). Câu hỏi của bạn dường như không phải là một câu hỏi cấp độ nghiên cứu trong TCS. Vui lòng xem FAQ để biết thêm thông tin về ý nghĩa của việc này. Câu hỏi của bạn có thể phù hợp với Khoa học Máy tính có phạm vi rộng hơn.
Kaveh

1
Tại sao bạn luôn sử dụng nhận xét mẫu này? Rõ ràng có ít nhất 5 người không đồng ý với bạn. Tôi sẽ đề nghị bạn cho một câu hỏi như vậy một cơ hội.
AJed

@AJed, tôi không luôn sử dụng bình luận này. Tôi sử dụng nó khi một câu hỏi có vẻ lạc đề với tôi nhưng có thể phù hợp với Khoa học Máy tính . Bỏ phiếu không có nghĩa là một câu hỏi thuộc chủ đề và câu hỏi này dường như không phải là một câu hỏi cấp độ nghiên cứu đối với tôi, vì vậy tôi nghĩ rằng nhận xét là phù hợp. (Việc ai đó có thể viết câu trả lời ở cấp độ nghiên cứu cho câu hỏi không làm cho câu hỏi ở cấp độ nghiên cứu.) Ps: Tôi nghĩ rằng cuộc thảo luận này phù hợp hơn với Meta Khoa học máy tính lý thuyết .
Kaveh

Câu trả lời:


13

Có các thuật toán khác nhau để chuyển đổi các biểu thức chính quy thành automata hữu hạn. Bạn có thể chuyển trực tiếp từ biểu thức chính quy sang DFA mà không cần xây dựng bất kỳ thiết bị tự động nào khác trước bằng cách thực hiện việc xây dựng tập hợp con trong khi tạo tự động. Một lựa chọn khác để trực tiếp có được automata xác định là sử dụng phương pháp phái sinh.

Kiểm tra xem một biểu thức chính quy đại diện cho ngôn ngữ chứa tất cả các chuỗi có phải là vấn đề hoàn chỉnh của PSPACE không (xem câu trả lời này để tham khảo). Kiểm tra xem DFA có chấp nhận ngôn ngữ đó có thể được thực hiện trong thời gian đa thức hay không, vì vậy nếu bạn chuyển trực tiếp từ biểu thức chính quy sang DFA, sẽ có tiếng nổ ở đâu đó.

Sự hiểu biết của tôi về văn học là chúng tôi có thể chọn các bản dịch cho phép chúng tôi bản địa hóa. Có nghĩa là, có nhiều cách khác nhau để chuyển từ biểu thức chính quy sang tự động hữu hạn và các phương pháp tuyến tính hoặc đa thức được ưu tiên. Thông thường, các chi phí theo cấp số nhân được đẩy vào việc xác định automata.

Đã có rất nhiều công việc xác định các tiểu họ của các biểu thức chính quy từ đó chúng ta có thể tạo DFA một cách hiệu quả . Dòng công việc này phụ thuộc vào bản dịch bạn sử dụng. Có nghĩa là, bạn sửa ánh xạ từ biểu thức chính quy thành NFA và cố gắng mô tả biểu thức chính quy ánh xạ tới DFA.

Cấu trúc tiêu chuẩn của automata từ các biểu thức thông thường không phải là cấu trúc được ưu tiên trong công việc đó. Các cấu trúc của sự lựa chọn tạo ra automata gần giống với cấu trúc của biểu thức chính quy. Các cấu trúc này sử dụng khái niệm đạo hàm của biểu thức chính quy.

Đạo hàm của biểu thức chính quy , JA Brzozowski. 1964.

srara

Các dẫn xuất một phần của các biểu thức chính quy và các cấu trúc tự động hữu hạn , V. Antimirov. 1995.

Nếu bạn nghĩ về trạng thái của máy tự động như là một đại diện của tất cả các chuỗi được chấp nhận từ trạng thái đó, các đạo hàm (một phần) cho phép bạn coi các biểu thức chính quy là trạng thái . Tương phản với cấu trúc sách giáo khoa tiêu chuẩn, trực giác coi các biểu thức chính quy là automata, không phải trạng thái.

Từ biểu thức chính quy đến automata xác định , G. Berry và R. Sethi, 1986.

Sự tương ứng giữa các biểu thức chính quy và trạng thái của máy tự động và tính xác định được thảo luận rõ ràng bởi Berry và Sethi, người đã kết hợp khái niệm các dẫn xuất Brzozowski với ý tưởng phân biệt giữa các lần xuất hiện của cùng một biểu tượng để đưa ra một bản dịch dựa trên cú pháp của các biểu thức chính quy thành hữu hạn máy tự động.

Một ngôn ngữ thông thường không rõ ràng , A. Brüggemann-Klein và Derick Wood, 1998.

Bài viết này dựa trên công trình trước đây của Brüggemann-Klein và nghiên cứu các trường hợp mà bạn có thể sử dụng các công cụ phái sinh để tạo DFA trong thời gian đa thức. Có một lượng lớn công việc theo bài báo này. Nó rất có ý nghĩa từ quan điểm của các công nghệ web vì các biểu thức chính quy có thể được thao tác hiệu quả (hay còn gọi là tương ứng với DFA) rất quan trọng để xử lý SGML và XML.

Đã có nhiều công việc nghiên cứu các trường hợp đặc biệt khác của biểu thức chính quy xác định. Một bài báo gần đây nghiên cứu khi một số vấn đề này có thể được giải quyết trong thời gian tuyến tính là từ năm 2012.

Biểu thức chính quy xác định trong thời gian tuyến tính , Benoit Groz, Sebastian Maneth, Slawomir Staworko. 2012.


5
Bạn đã đề cập đến các công cụ phái sinh trong câu trả lời của mình, vì vậy bạn cũng nên thêm JA Brzozowski: Công cụ phái sinh của các biểu thức chính quy, Tạp chí ACM 11 (4): 481 Muff494 (1964), vì ông đưa ra thuật toán trực tiếp để chuyển đổi biểu thức chính quy sang DFA .
Neel Krishnaswami

3
Tôi đã tranh luận về điều đó. Nhưng cả ba bài báo trên đều trực tiếp xây dựng dựa trên kết quả đó, vì vậy tôi nghĩ không có lý do gì để đề cập đến nó. Giấy Brueggeman-Klein và Wood cũng có đầy đủ các ví dụ. Nếu tôi đề cập đến Brzozowski, tôi cảm thấy Antimirov cũng nên được đề cập. Tôi muốn tránh một cuộc khảo sát, nhưng có lẽ tôi nên đi tìm nó. Nói gì?
Vijay D

5
Nếu bạn có thời gian và sức lực, tôi nghĩ những câu trả lời giống như khảo sát dài rất thích hợp ở đây.
David Eppstein

1
@VijayD: vâng, tôi đồng ý với David. Câu trả lời ngắn là tốt, nhưng nếu bạn có năng lượng, thật tốt để đưa ra một câu trả lời toàn diện.
Neel Krishnaswami
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.