【问题标题】:Find all possible combinations in a boolean expression tree in java在java中的布尔表达式树中查找所有可能的组合
【发布时间】:2016-04-04 19:53:57
【问题描述】:

我试图找到给定条件下所有可能的表达式组合。

例如,考虑以下条件。

((b > 5) | (c > 4)) & ((c < 6) | (b < 2))) 

我需要像这样的最终组合

[(b > 5) , (c < 6)]
[(b > 5) , (b < 2)]
[(c > 4) , (c < 6)]
[(c > 4) , (b < 2)]

逻辑就像(a|b)&amp;(c|d) -&gt; a&amp;c,a&amp;d,b&amp;c,b&amp;d。 上面的comma (,) 可以认为是AND 运算符。

由于树是解析表达式的最佳解决方案,因此我设法使用 Java 的递归下降解析器构建了一个抽象语法树,该树如下所示。

我使用this 博客中描述的解析器的修改版本。这是我卡住的地方,因为我不知道如何提取最终表达式。

有什么我可以尝试的方向吗?

其他示例 考虑以下条件。

((b > 5) & ((c < 6) | (b < 2))) 

结果:

[(b > 5) , (c < 6)]
[(b > 5) , (b < 2)]

考虑以下条件。

((b > 5) | ((c < 6) & (b < 2))) 

结果:

[(b > 5)]
[(c < 6) , (b < 2)]

【问题讨论】:

    标签: java tree expression boolean-expression recursive-descent


    【解决方案1】:

    这里不需要树。 您可以从制作条件的二维矩阵开始。所以对于

            (b > 5) | (c > 4)) & ((c < 6) | (b < 2)))
    

    矩阵为 2X2,如下所示:

    (b > 5) (c > 4)
    (c < 6) (b < 2)
    

    在任何行中,邻居之间的条件为 OR,在任何列中,邻居之间的条件为 AND。 现在您所要做的就是生成这个二维矩阵的所有可能组合。 为此你可以关注How to get 2D array possible combinations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多