评估集合表达式

时间:2012-05-22 06:39:20

标签: c++ c set

我有一系列元素被组织成n个非不相交的集合。我有使用这些集合构建的表达式,使用union / intersection / difference运算符。因此,给定一个元素,我需要评估这些m表达式,以找出哪些“派生”集合包含该元素。我不想计算“派生”集,因为它会非常节省时间和空间。有没有办法通过查看其表达式来说明元素是否会位于其中一个派生集中?对于例如如果表达式是C = A U B并且元素位于集合A中,那么我可以说它将位于集合C中。是否有任何C库来执行这种性质的计算?

1 个答案:

答案 0 :(得分:4)

如果我没有错, 设e =元素

如果e在集合中,则将每个集合A,B替换为true,否则为false。然后,将集合运算符转换为它们的逻辑等价物,并将表达式计算为布尔值。它应该都能很好地映射到布尔运算符,甚至是xor和stuff。

例如,如果e在A B中,而不是D

C = (A U B) xor D

它会在C中,因为

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

如果您可以快速查找元素是否在集合

中,那么这可能会非常快