Đây không phải là một câu trả lời. Đó là một quan sát đơn giản nhưng dài. Tôi hy vọng nó sẽ hữu ích.
Phiên bản quyết định của vấn đề của bạn là: có chứa tập hợp con của A không?XA
Vấn đề này liên quan đến vấn đề đánh giá các hàm boolean đơn điệu của biến. Một tập hợp con của { 1 , ... , n } là tương đương với một n -bitstring, vì vậy gia đình X tương đương với một hàm boolean f của n biến. Với một hàm f , người ta có thể xác định các chức năng đơn điệu nhất đó là không lớn hơn f , cụ thể là g ( y ) = ( ∃ x ⊆ y ,n{1,…,n}nXfnff . Vấn đề ban đầu sau đó được giảm xuống để đánh giá g ( A ) . Ngược lại, vấn đề đánh giá hàm boolean đơn điệu có thể được giảm xuống thành vấn đề ban đầu, hoặc là ngây thơ bằng cách lấy f = g hoặc bằng cách chọn một f làm cho X nhỏ hơn.g(y)=(∃x⊆y,f( x ))g( A )f= gfX
Trong thực tế, BDD có xu hướng hoạt động tốt. Vì vậy, một cách tiếp cận khả thi là xây dựng BDD cho , xuất phát từ nó là BDD cho g , sau đó đánh giá g . Kích thước trung bình của BDD cho g phải là Ω ( ( nfggg, vìcó nhiều hàm boolean đơn điệu. Do đó, trên lý thuyết đây là một giải pháp tồi.Ω ( ( nn / 2) )
Nhưng (1) một phân tích tốt hơn có thể là có thể và (2) có thể có những điều chỉnh đối với phương pháp này làm cho nó tốt hơn. Ví dụ, tôi đã không sử dụng theo bất kỳ cách nào mối tương quan giữa kích thước của và kích thước của BDD của g . (Phải có một mối tương quan, nhưng tôi không biết nó đơn giản hay có thể sử dụng được ở đây.)Xg
Để hoàn thiện, một thuật toán đơn giản để tính toán BDD cho từ BDD cho f là như sau.
m ( x ? f 1 : f 0 ) = x ? ( m ( f 0 ) ∨ m ( f 1 ) ) : m ( f 0 )
Ở đây ∨ là tiêu chuẩn hoặc hoạt động trên các BDD.gf
m ( x ? f1: f0) = x ? ( m ( f0) ∨ m ( f1) ) : m ( f0)
∨