【问题标题】:Optimize calculation of a large set of binary predicate based rules优化大量基于二元谓词的规则的计算
【发布时间】:2018-05-18 21:02:02
【问题描述】:

我有一组已知且有限的二元谓词:A, B, C, ...

还有一大组规则,包含带有OR, AND, NOT 运算符的谓词。即

R1 = A AND B
R2 = NOT(C) OR B
R3 = ((A OR B) AND C) OR NOT(C)

当得到所有谓词的二进制赋值时,我想优化规则的计算。

为此,我可以随意修改规则定义,只要逻辑不会改变(相同的谓词分配将在每个规则上给出相同的计算结果)。

我正在考虑创建某种联合决策树,但不知道如何判断优化的排列方式。

注意:我不关心构建计算算法的复杂度,只关心计算复杂度。

【问题讨论】:

    标签: algorithm graph-theory decision-tree predicate boolean-logic


    【解决方案1】:

    对于少量的谓词,您可以提前计算所有结果以创建缓存。请注意,您的缓存中将有 2 个 ^(谓词的数量)条目。

    对于大量谓词,您不能这样做。我会说这听起来像动态编程,因为规则可能有重叠的组件。要增加这种重叠,您可以重写所有规则以使用单一类型的操作,例如与非。然后,您可以创建一个图表,其中谓词是输入,规则是输出。

    所以你的规则看起来像:

    R1 = (A NAND B) NAND (A NAND B)
    R2 = (B NAND B) NAND C
    R3 = (A NAND A) NAND (B NAND B) NAND C
    

    您已经可以看到一些重叠。这将随着规则的数量而增加。您的图表将如下所示:

    一旦你得到二进制赋值,你就可以从左到右计算图形。或者在动态编程风格中,您从 R1 开始并缓存所有中间结果以供以后使用,然后对 R2 和 R3 执行相同操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多