【发布时间】:2012-11-23 11:26:37
【问题描述】:
什么是最好的(就使用简单性和性能而言)C++/C++11 库,可以简化如下公式?
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
到(例如)
a < 0 && (b > 0 || c > 0)
我认为解释一件事很重要(因为我看到这个问题被误解了)。
我不想简化 C/C++ 表达式 - 我知道,编译器可以做到。
我正在制作一个图形处理工具。在图的边缘,有一些关于其顶点的条件(假设顶点是a、b、c,这些条件类似于a<b、b>0 等 - 请注意,这些条件不表示为“字符串”,它们可以是任何函数或库调用)。在处理过程中,我将表达式收集在一起,在进一步的图形处理之前,我想简化它们。
条件和表达式将在运行时创建。
我希望能够向该库输入一些表达式,例如:
[...]
a = new Variable();
b = new Variable();
expr1 = lib.addExpr(a,0, lib.LESS);
expr2 = lib.addExpr(b,0, lib.MORE);
expr3 = lib.addExpr(expr1, expr2, lib.AND);
[...]
cout << lib.solve(exprn).getConditionsOf(a);
当然,这个库可能会有更多漂亮的 API。我把它写成方法调用只是为了展示我期望的底层机制——强调我不需要源代码编译器或者这个问题与源代码编译优化无关。
【问题讨论】:
-
你说的“一些条件”是什么(回应gnzlbg),举个例子吧。
-
另外,您确实意识到 x=simplifier.newVar() 是一个比 (x
-
当然它更复杂,而且这个库(我正在寻找)可以有漂亮的 PAI 让我写
(x<y)||(y<1)。这不是这个问题的重点。我们正在寻找一种可以简化表达式的解决方案,因为我们需要将简化形式作为算法的输入 -
remdezx,我在您的问题中添加了最初由@danilo2 编写的编辑(阅读之前的评论),因为他声称他在这方面与您合作。如果这不是真的,或者如果您不喜欢此编辑,请随时再次编辑问题。
-
感谢编辑!这正是我们需要的:)
标签: visual-c++ boolean expression linear-algebra