Thuật toán của Brzozowski có thể được mở rộng sang Moore automata nhưng độ phức tạp thời gian của nó nói chung là theo cấp số nhân. Có thuật toán nào khác để giảm thiểu Moore automata không? Thời gian chạy của các thuật toán này là gì nếu có?
Thuật toán của Brzozowski có thể được mở rộng sang Moore automata nhưng độ phức tạp thời gian của nó nói chung là theo cấp số nhân. Có thuật toán nào khác để giảm thiểu Moore automata không? Thời gian chạy của các thuật toán này là gì nếu có?
Câu trả lời:
Thuật toán tối thiểu hóa DFA ban đầu thực sự được thiết kế cho Moore Machines , được hướng dẫn bởi hành vi rõ ràng dễ quan sát hơn của chúng. Nhưng thuật toán được trình bày ở đây là một bản dựng lại từ tối thiểu hóa DFA, vì tôi đã phát hiện ra bằng chứng lịch sử sau thực tế.
Sau Wikipedia (với một số thay đổi về công chứng):
Một máy Moore có thể được định nghĩa là 6 tuple bao gồm:
- một tập hợp hữu hạn các trạng thái
- trạng thái bắt đầu (còn được gọi là trạng thái ban đầu) là một yếu tố của Q
- một tập hữu hạn gọi là bảng chữ cái đầu vào
- một bộ hữu hạn được gọi là bảng chữ cái đầu ra
- một hàm chuyển đổi ánh xạ một trạng thái và bảng chữ cái đầu vào sang trạng thái tiếp theo
- một hàm đầu ra ánh xạ từng trạng thái vào bảng chữ cái đầu ra
Từ định nghĩa này, một máy Moore là một bộ chuyển đổi trạng thái hữu hạn xác định.
Tôi không có tài liệu tham khảo để giảm thiểu Moore automata. Tuy nhiên, dường như không quá khó để tưởng tượng một thuật toán, xuất phát từ thuật toán được sử dụng cho automata trạng thái hữu hạn xác định.
Ý tưởng trong tối thiểu hóa DFA dựa trên đặc tính hóa Myhill-Nerode của các ngôn ngữ thông thường .
Cho một ngôn ngữ , và một cặp chuỗi và , xác định một phần mở rộng phân biệt là một chuỗi như vậy mà chính xác một trong hai chuỗi và thuộc về . Xác định mối quan hệ trên chuỗi theo quy tắc iff không có phần mở rộng phân biệt cho và . Thật dễ dàng để chỉ ra rằng là một mối quan hệ tương đương trên các chuỗi và do đó, nó chia tập hợp của tất cả các chuỗi thành các lớp tương đương.x y z x z y z L R L x R L y x y R L
Định lý Myhill-Nerode nói rằng là chính quy khi và chỉ khi có số lượng các lớp tương đương hữu hạn, và hơn nữa, số lượng trạng thái trong máy tự động hữu hạn xác định nhỏ nhất (DFA) nhận ra bằng với số lượng các lớp tương đương trong .R L L R L
Thật vậy, mỗi trạng thái của DFA nhỏ nhất sao cho như được định nghĩa ở trên là một trong các lớp tương đương cho mối quan hệ .W q R L
Đối với một DFA không tối thiểu cho ngôn ngữ thông thường , thật dễ dàng để chỉ ra rằng mỗi bộ chứa các chuỗi đều thuộc cùng một lớp tương đương với .W q R L
Do đó, việc tối thiểu hóa DFA thực sự bao gồm các trạng thái hợp nhất (được coi là tập hợp các chuỗi tương đương), bất cứ khi nào có hai trạng thái riêng biệt chứa các chuỗi tương đương.
Hai thuật toán khá nhanh tồn tại cho mục đích đó là thuật toán Moore (1956) trong thời gian và thuật toán Hopcroft (1971) trong thời gian .
Phần mở rộng để Moore automata được hiểu tốt nhất trong việc xác định mối quan hệ tương đương như cho một bộ chuyển đổi . Mối quan hệ liên quan đến việc liệu đầu vào trong tương lai có dẫn đến trạng thái chấp nhận hay không. Các quan hệ tương đương của Moore automata là có liên quan với liệu đầu vào tương lai sẽ cho kết quả tương tự.
Do đó, với một bộ chuyển đổi và hai chuỗi và , chúng tôi xác định một phần mở rộng phân biệt là một chuỗi sao cho và với , nghĩa là hành vi đầu ra của đầu dò khác với tùy thuộc vào việc nó đi theo hoặc .
Một lần nữa, là một mối quan hệ tương đương, chia tất cả các chuỗi trong thành các lớp tương đương. Trong trường hợp của máy Moore, các lớp này sẽ lại tương ứng với trạng thái của bộ chuyển đổi tối thiểu.
Thuật toán sau bắt chước thuật toán Moore để giảm thiểu DFA.
Chúng tôi định nghĩa một phân vùng ban đầu của thành các lớp trạng thái như sau:
Sau đó, chúng tôi chia các lớp trong như sau:
lặp lại liên tiếp cho từng loại trạng thái , cho đến khi không có thay đổi nào repeat Nếu sau đó không làm gì khác chia thành các tập con sao cho cho mỗi tập hợp con , có một lớp khác nhau rằng (các tập con thay thế trong
)
Khi không còn lớp nào cần phải phân tách, các lớp trạng thái còn lại sẽ tạo thành trạng thái của máy Moore tối thiểu.
Bằng cách xây dựng, tất cả các trạng thái trong một lớp có cùng một đầu ra là đầu ra cho lớp.
Tương tự, đối với mọi đầu vào , tất cả các trạng thái trong một lớp sẽ chuyển sang một trạng thái nào đó trong cùng một lớp khác, định nghĩa hàm chuyển đổi cho máy Moore tối thiểu.
Phân tích độ phức tạp:
Đặtlà số lượng trạng thái vàkích thước của bảng chữ cái đầu vào.
Vòng lặp chính được thực hiện tối đa lần, vì mỗi lần lặp phải chia ít nhất một lớp trạng thái và mỗi lớp chứa ít nhất một trạng thái. Mỗi lần lặp của vòng lặp kiểm tra mỗi trạng thái một số lần hữu hạn và tỷ lệ với số ký hiệu đầu vào. Do đó, độ phức tạp của thuật toán là , giống như thuật toán tối thiểu hóa DFA được dùng làm hướng dẫn cho thuật toán này.s = | Σ | n O ( s n 2 )
Tôi không có bất kỳ tài liệu tham khảo nào cho việc giảm thiểu máy Moore này. Có thể nó được bao gồm trong bài báo của mình:
Moore, Edward F (1956). "Gedanken-thí nghiệm trên các máy tuần tự". Nghiên cứu tự động , Biên niên sử của nghiên cứu toán học (Princeton, NJ: Nhà in Đại học Princeton) (34): 129-153.
Bài viết này là tài liệu tham khảo chính giới thiệu Moore Machines . Nó cũng là tài liệu tham khảo cho thuật toán tối thiểu hóa DFA của Moore . Do đó, sẽ rất đáng ngạc nhiên nếu sự thích ứng của thuật toán với việc tối thiểu hóa Máy Moore ít nhất không được đề xuất trong bài báo đó. Tôi đã kiểm tra bài báo và phiên bản của thuật toán thu nhỏ được trình bày thực sự dành cho máy Moore, không phải cho DFA. Bài viết được viết tốt, nhưng phong cách của thời gian làm cho nó khó đọc hơn một chút. Thật thú vị khi thấy rằng nhiều ý tưởng của lý thuyết Myhill-Nerode của Finite State Machines đã được phác thảo trong bài báo này.
Thuật toán gần đây do John Hopcroft (1971) gần đây có thể thích ứng tương tự với các máy Moore. Không rõ ràng rằng có bất kỳ lý do để xuất bản bản chuyển thể này ở bất cứ đâu và bài báo Hopcroft dường như không có liên quan đến máy Moore.
Một phiên bản thuật toán của Brzozowski sử dụng các dẫn xuất của biểu thức chính quy được đưa ra trong [2], Chương 12, Phần 4, trong đó nó được ghi có vào [4]. Xem [1] và [3] để biết trường hợp tổng quát hơn của các bộ chuyển đổi tiếp theo (thuật ngữ này hơi lỗi thời và thuật ngữ bộ chuyển đổi tuần tự có lẽ phù hợp hơn hiện nay).
[1] C. Choffrut, Tối thiểu hóa các bộ chuyển đổi tiếp theo: một khảo sát, Theoret. Comp. Khoa học. 292 (2003), 131 Từ143.
[2] S. Eilenberg, Automata, Ngôn ngữ và máy móc, tập. A, Nhà xuất bản Học thuật, 1974.
[3] J.-E. Pin, Một hướng dẫn về các chức năng tuần tự . (Trang trình bày)
[4] GN Raney, Hàm tuần tự, JACM 5 (1958), 177 trừ180.
Thuật toán của Brzozowski là một điểm khởi đầu tồi tệ (nếu bạn quan tâm đến thời gian chạy trường hợp xấu nhất không có triệu chứng). Ngay cả Wikipedia cũng nói với bạn rất nhiều:
Như Brzozowski (1963) đã quan sát, việc đảo ngược các cạnh của DFA tạo ra một máy tự động hữu hạn không xác định (NFA) để đảo ngược ngôn ngữ gốc và chuyển đổi NFA này thành DFA bằng cách sử dụng cấu trúc sức mạnh tiêu chuẩn (chỉ xây dựng các trạng thái có thể tiếp cận của DFA được chuyển đổi) dẫn đến một DFA tối thiểu cho cùng một ngôn ngữ đảo ngược. Lặp lại thao tác đảo ngược này lần thứ hai tạo ra một DFA tối thiểu cho ngôn ngữ gốc. Độ phức tạp trong trường hợp xấu nhất của thuật toán Brzozowski là theo cấp số nhân, vì có những ngôn ngữ thông thường mà DFA tối thiểu của sự đảo ngược lớn hơn theo cấp số nhân so với DFA tối thiểu của ngôn ngữ, [6] nhưng nó thường hoạt động tốt hơn trường hợp xấu nhất này.
Thuật toán có thời gian chạy trường hợp xấu nhất theo cấp số nhân ngay cả trên DFA vì nó tính toán một máy tự động cho đảo ngược, có thể phải lớn theo cấp số nhân. Vì vậy, vấn đề của bạn không đến từ phần mở rộng cho đầu dò.
Cố gắng thích ứng với một thuật toán tối thiểu hóa DFA khác.