2012-05-22 54 views
5

Tôi có một loạt các phần tử được sắp xếp thành các bộ không phân tách. Tôi có các biểu thức m được xây dựng bằng cách sử dụng các bộ này, sử dụng các toán tử union/intersection/differential. Vì vậy, cho một yếu tố, tôi cần phải đánh giá các biểu thức m, để tìm ra các bộ "có nguồn gốc" chứa phần tử. Tôi không muốn tính toán bộ "có nguồn gốc" vì nó sẽ rất thời gian và không gian không hiệu quả. Có cách nào để nói liệu một phần tử sẽ nằm trong một trong những bộ dẫn xuất chỉ bằng cách nhìn vào biểu thức của nó? Ví dụ: nếu biểu thức là C = A U B và phần tử nằm trong tập A, thì tôi có thể nói rằng nó sẽ nằm trong tập C. Có bất kỳ thư viện C nào để thực hiện tính toán bản chất này không?Đánh giá các biểu thức đã đặt

Trả lời

4

nếu im không nhầm lẫn, let e = yếu tố

thay thế mỗi bộ A, B với đúng nếu e là trong tập, false nếu không nó. Sau đó, chuyển đổi các toán tử thiết lập thành các phép toán tương đương của chúng và đánh giá biểu thức là boolean. Tất cả nên ánh xạ tốt với các toán tử boolean, thậm chí là xor và các công cụ.

ví dụ, nếu e là trong cả hai AB, nhưng không phải D

C = (A U B) xor D 

nó sẽ là trong C vì

C = (true or true) xor false 
->  (true)  xor false 
-> true 

Đó có thể là khá nhanh nếu bạn có thể nhanh chóng tìm thấy nếu một yếu tố đang ở trong một tập hợp

+0

heh, tôi đang ghi nhớ nội dung này ngay bây giờ. 'A - B' là true nếu và chỉ khi A là true và B là false. – goat

+0

Đó là một giải pháp khá tuyệt vời, cảm ơn! Tôi đã có một bản đồ của các yếu tố và các bộ họ thuộc về, do đó, tính toán nên được nhanh chóng. – Oceanic

Các vấn đề liên quan