【问题标题】:Evaluating set expressions评估集合表达式
【发布时间】:2012-05-28 15:28:54
【问题描述】:

我有一个由 n 个不相交的集合组成的元素世界。我使用这些集合构建了 m 个表达式,使用联合/交集/差异运算符。因此,给定一个元素,我需要评估这些 m 表达式,以找出哪些“派生”集合包含该元素。我不想计算“派生”集,因为它会在时间和空间上非常低效。有没有办法仅仅通过查看它的表达式来判断一个元素是否会位于其中一个派生集中?例如如果表达式是 C = A U B 并且元素位于集合 A 中,那么我可以说它将位于集合 C 中。是否有任何 C 库来执行这种性质的计算?

【问题讨论】:

    标签: c++ c set


    【解决方案1】:

    如果我没记错的话, 让 e = 元素

    如果 e 在集合中,则将每个集合 A、B 替换为 true,否则为 false。然后,将集合运算符转换为其逻辑等效项,并将表达式计算为布尔值。它应该很好地映射到布尔运算符,甚至是 xor 和其他东西。

    例如,如果 e 在 A B 中,但不在 D 中

    C = (A U B) xor D
    

    它会在 C 中,因为

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

    如果你能快速找到一个元素是否在集合中,那可能会非常快

    【讨论】:

    • 嘿,我现在想起了这些东西。 A - B 为真当且仅当 A 为真且 B 为假。
    • 这是一个非常好的解决方案,谢谢!我已经有了元素的映射和它们所属的集合,所以计算应该很快。
    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多