Để tìm hiểu hiệu quả, tôi khuyên bạn nên tìm hiểu tài liệu CAD về vấn đề mã hóa trạng thái (gán số nhận dạng nhị phân cho các trạng thái của DFA để giảm thiểu lượng logic cho hàm chuyển trạng thái.) Devadas và Newton, "Phân tách và nhân tố hóa hữu hạn tuần tự các máy trạng thái, " IEEE TCAD , 8 (11): 1206-1217, 1989 chỉ ra rằng có một mối quan hệ chặt chẽ giữa mã hóa trạng thái và phân tách máy trạng thái.
Nếu đối với một DFA có trạng thái, bạn chỉ định một mã định danh trạng thái bit M duy nhất cho mỗi trạng thái ( lg 2 N < M ≤ N ), thì về cơ bản bạn đã phân tách DFA thành một mạng gồm các máy M tương tác. Tương đương: bạn đã xác định một tập hợp S với các phần tử M và gán một tập hợp con duy nhất của S cho mỗi trạng thái trong DFA ban đầu của bạn. Đây cũng là những gì thuật toán xây dựng sức mạnh Rabin-Scott làm. Vì vậy, bằng cách thực hiện mã hóa trạng thái trên DFA, chúng tôi đang cố gắng thiết kế ngược lại tập hợp mà thuật toán xây dựng powerset bắt đầu từ đó.NMlg2N< M≤ NMSMS
Trong bài toán mã hóa trạng thái truyền thống, tất cả các mã hóa đều hợp pháp và có một số hàm mục tiêu (liên quan đến lượng logic trong hàm chuyển trạng thái) mà bạn đang cố gắng giảm thiểu. Để tạo NFA, bạn cần giải quyết một phiên bản bị ràng buộc của vấn đề bao vây trong đó:
một mã hóa các mã định danh bit sang các trạng thái DFA đại diện cho một NFA iff cho mỗi ký hiệu trong bảng chữ cái, chức năng chuyển đổi cho mỗi bit là một sự phân tách đơn giản của các bit. (Không cho phép kết hợp hoặc phủ định.)M
Vì vậy, bạn có thể liệt kê tất cả các cắn mã hóa cho tất cả lg 2 N < M ≤ N , và kiểm tra xem mỗi một đáp ứng các hạn chế. (Lưu ý rằng đối với M = N , mã hóa "một nóng" tầm thường luôn thỏa mãn các ràng buộc và cung cấp cho bạn DFA.) Mặc dù vậy, phép liệt kê là rất lớn, (sách giáo khoa của Di Micheli cho nó là 2 M !Mlg2N< M≤ NM= N.) Lý do tôi đề xuất tài liệu CAD là có các kỹ thuật để thực hiện tìm kiếm này thay vì liệt kê (ví dụ: bằng cách sử dụng BDD, xemLin, Touati và Newton, "Đừng quan tâm đến việc giảm thiểu tuần tự đa cấp mạng logic, "Int'l Conf Comp-Aided DsgnICCAD-90: 414-417, 1990.2M!( 2M- N) ! M!
Thí dụ
Lấy DFA sau, (với mã hóa trạng thái mà tôi có được do gian lận (Tôi đã tạo DFA từ NFA bằng Rabin-Scott và mã hóa đại diện cho các tập hợp con được chọn bởi Rabin-Scott.))
Nếu chúng ta gọi các bit trong trạng thái gán ABCD, thì khi ký hiệu đầu vào là 1, hàm chuyển đổi là A = A, B = A, C = B, D = C. Khi ký hiệu đầu vào là 0, hàm chuyển đổi là A = A, C = B, D = C. Đây là một chức năng chuyển tiếp hoàn toàn không phân biệt mà không có sự kết hợp hoặc phủ định, vì vậy mã hóa trạng thái này cung cấp cho chúng ta một NFA. Các trạng thái trong NFA tương ứng một-một với các bit trong mã hóa và chức năng chuyển tiếp được đưa ra:
Xây dựng như là vấn đề thỏa mãn boolean
Mô tả không chính thức ở trên dẫn trực tiếp đến một mã hóa như là một vấn đề thỏa mãn boolean. Có một bộ biến mô tả các chuyển đổi trong NFA và một bộ biến cho mã hóa trạng thái DFA sẽ được lấy từ Rabin-Scott cho NFA đã chọn. Các chuyển đổi của DFA cụ thể mà bạn đang cố gắng phân tách được sử dụng để đặt các ràng buộc trên các chuyển đổi NFA.
NSMlg2N< M≤ Nys ftys ftf t SSM2= 32 yy0 A A, y1 A Ay1 A By1 D A
xdnndN= 8M= 4xkxk Axk Cxk Dxk B là sai.
tôi < j{ Một , B , ⋯ , D }
( xtôi A≠ xj A) + ( xtôi B≠ xj B) + ⋯ + ( xtôi D≠ xj D) .
TôijSkjtôijtôiko(SN2)
xjAxjBxjD===ysAAxiA+ysBAxiB+⋯+ysDAxiDysABxiA+ysBBxiB+⋯+ysDBxiD⋯ysADxiA+ysBDxiB+⋯+ysDDxiD.
x0A+x0B+⋯+x0DfnxiAfA+xiBfB+⋯+xiDfDi¬(xjAfA+xjBfB+⋯+xjDfD)j