繁体   English   中英

在Java的布尔表达式树中找到所有可能的组合

[英]Find all possible combinations in a boolean expression tree in java

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

例如,请考虑以下情况。

((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)&(c|d) -> a&c,a&d,b&c,b&d 上面的comma (,)可被视为AND运算符。

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

布尔表达式树

我使用了博客中描述的解析器的修改版本。 这是我被困住的地方,因为我不提取最终表达式。

是否有我可以尝试的输入。

其他示例考虑以下条件。

((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)]

这里不需要树。 您可以先创建条件的2D矩阵。 因此对于

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

矩阵为2X2,如下所示:

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

在任何行中,邻居之间的条件将为OR,在任何列中邻居之间的条件将为AND。 现在您要做的就是生成此2D矩阵的所有可能组合。 为此,您可以按照如何获得2D数组的可能组合进行操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM