将多个交叉点重构为交叉联合组

时间:2014-01-21 01:32:28

标签: algorithm math union lookup intersection

给定一组规则,它们是某些已知值(组,类型,属性)的逻辑交集,它们组合起来给出一些值,如下所示:

group1 AND type1 AND property1 = value1
group1 AND type1 AND property2 = value2
group1 AND type1 AND property3 = value3
group1 AND type2 AND property1 = value1
group1 AND type2 AND property4 = value1
group2 AND type1 AND property2 = value2

以下情况属实:

  • 组/类型/属性的集合是有限的并且已知
  • 由group / type / property
  • 组合的唯一给定规则
  • 许多规则可能引用单个值

我如何最好地找到一种最佳解决方案,将这些规则“折叠”为一种格式,在该格式中,同一组的多个值组合在一起(下方),同时保持对原始查找的相同逻辑解释?

(group1) AND (type1 OR type2) AND (property1) = value1
(group1 OR group2) AND (type1) AND (property2) = value2
(group1) AND (type1) AND (property3) = value3
(group1) AND (type2) AND (property4) = value1

目标:包含与原始查找相同的逻辑信息的最少规则数。

一种方法可以是采用原始查找“密钥”,按第一个值分组,然后将两个密钥分组,并且可以针对每个密钥组合重复对剩余密钥的不同实例进行折叠。结果朝着正确的方向前进,但不能保证最佳的多步骤方法。

如果这实际上是一个普遍的问题,我会很感激有关更好的方法或阅读指针的任何想法。

如果需要,很高兴提供任何澄清。

*为笨重的标题道歉 - 希望这描述了一般问题

编辑:我认为这个问题(没有具体答案)表示问题是找到Union of all intersecting sets

编辑2:我应该说,目标表单实际上是一个要求,而不是来自@timrau的逻辑上最优的解决方案。表单为(groups) AND (types) AND (properties) => value,其中groups / types / properties仅用OR表示。

1 个答案:

答案 0 :(得分:2)

对于每个可能的值,以产品和形式形成布尔公式。 (为简单起见,我使用g1代表group1t1代表type1p1代表property1v1代表value1

v1 = g1 t1 p1 + g1 t2 p1 + g1 t2 p4
v2 = g1 t1 p2 + g2 t1 p2
v3 = g1 t1 p3

然后,如果您真的计划,您可以应用任何逻辑最小化算法/系统,例如Quine-McCluskeyEspressoABCLogic Friday甚至Karnaugh map尽量减少它们。

最小化后,我们得到

v1 = g1 (t1+t2) p1 + g1 t2 p4
v2 = (g1+g2) t1 p2
v3 = g1 t1 p3

然后可以将它们翻译回原来的逻辑公式。