检查是否满足任意不等式列表

时间:2013-11-28 14:48:38

标签: c++ constraints graph-theory inequality

我正在用C ++编写一些代码,需要检查是否满足两个未知变量中的不等式列表。

例如,一个可能的列表可以是P = Q,Q< S,P = S不应该满足

另一个例子,P = Q,Q< S,R = P,S> R应该得到满足

我一直在思考如何做到这一点,但我似乎找不到任何方法,除了一个冗长乏味的方法,其中包括检查所添加的每个新不等式是否满足所有以前的不等式。

2 个答案:

答案 0 :(得分:0)

这是布尔逻辑中比C ++更多的练习。如果你知道Python使用它。

更快的方法是一次构造一个“排序”(在数学意义上)一个语句。这就是你有序列的地方,b c假设和a

假设现在序列中的每个东西都是一个彼此相等的向量。在上面的例子中:

P = Q

我们的订购如下:

[P,Q]

下一个Q.

现在我们有了一个订单:

[P,Q],[S]

我们知道[P,Q]< [S]

所以P = S是一个明显的矛盾。

答案 1 :(得分:-1)

首先,通过将所有P = Q替换为Q来删除所有等级P。 这会将P = Q, Q < S, R = P, S > R缩减为R < S, S > R

其次,如果您的列表包含PQ,则构建一个有向变量作为顶点和从P < QQ > P的边的有向图。

第三,检查图表是否包含周期。如果图形不包含循环,则不等式是可以满足的。

你可能想要谷歌2-SAT,这与这个问题有关。