Một thuật toán tốt để tạo DFA ngẫu nhiên là gì?


9

Tôi đang tạo các DFA ngẫu nhiên để kiểm tra thuật toán giảm DFA trên chúng.

Thuật toán mà tôi đang sử dụng ngay bây giờ như sau: đối với mỗi trạng thái , đối với mỗi ký hiệu trong bảng chữ cái , hãy thêm vào một số trạng thái ngẫu nhiên. Mỗi trạng thái có cùng xác suất trở thành trạng thái cuối cùng.qδ ( q , c )cδ(q,c)

Đây có phải là một phương pháp tốt để tạo DFA không thiên vị? Ngoài ra, thuật toán này không tạo ra một DFA cắt (DFA không có trạng thái lỗi thời), vì vậy tôi tự hỏi liệu có cách nào tốt hơn để tạo DFA ngẫu nhiên mà bằng cách nào đó có thể đảm bảo rằng nó được cắt không?


2
Không có sự phân phối tự nhiên của các DFA ngẫu nhiên, do đó tùy thuộc vào bạn. Bạn muốn thực hiện những gì?
Yuval Filmus

Tôi đang tạo các DFA ngẫu nhiên để kiểm tra thuật toán giảm DFA trên chúng.
Duncan

Có lẽ bạn muốn bắt đầu từ một nhóm nhỏ DFA tối thiểu và thổi bay chúng? Bằng cách đó bạn biết rằng việc giảm thiểu thực sự đi đến kết quả đúng.
adrianN

tự hỏi, bạn đang thử nghiệm một thuật toán giảm không tối ưu hay nó đang tìm kiếm DFA tối ưu duy nhất tối thiểu?
vzn

2
Nếu bạn đang tạo cấu trúc dữ liệu để thử nghiệm, không thiên vị không quan trọng. Điều quan trọng là có cơ hội tốt để kích hoạt các hành vi thú vị. Để có một sự tương tự, khi bạn kiểm tra một thuật toán hình học, bạn cần đảm bảo rằng một số bài kiểm tra của bạn sẽ có ba điểm được căn chỉnh và những điều khác sẽ không bao giờ xảy ra trong một phân phối ngẫu nhiên.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:



4

Bạn nên xem trang chủ của Cyril Nicaud . Cụ thể, các tài liệu tham khảo sau có liên quan đến câu hỏi của bạn:

F. Bassino, J. David và C. Nicaud, liệt kê và tạo ngẫu nhiên các máy tự động xác định có thể chưa hoàn chỉnh, Toán học thuần túy và Ứng dụng 19 (2-3) (2009) 1-16.

F. Bassino và C. Nicaud. Liệt kê và tạo ngẫu nhiên của Automata có thể truy cập. Lý thuyết. Comp. Sc. . 381 (2007) 86-104.


3

Có các thuật toán để tạo ngẫu nhiên các DFA lên đến một hoán vị http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .

Nhưng, nó cũng được đề cập trong bài báo trên rằng hầu như tất cả các DFA đều đã ở mức tối thiểu. Các DFA không tối thiểu giống như các số nguyên tố ... chỉ có một vài trong số chúng. Và nếu bạn sử dụng thuật toán này để kiểm tra thuật toán thu nhỏ, nó sẽ giống như khi bạn đang kiểm tra một thuật toán trên số nguyên tố với một trình tạo số ngẫu nhiên đơn giản. Để có nhiều DFA không tối thiểu hơn, bạn có thể thay đổi thuật toán bằng cách thêm trạng thái chìm và chuyển hướng một tỷ lệ phần trăm quan trọng của các chuyển đổi sang trạng thái chìm này.

Nhưng theo quan điểm của tôi, nếu bạn muốn kiểm tra tốc độ thực hiện của mình, hãy kiểm tra nó dựa trên những gì bạn muốn sử dụng cho: với các bộ từ ngẫu nhiên hoặc REGEX ngẫu nhiên, tạo NFA hoặc DFA, sau đó giảm thiểu DFA kết quả .


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.