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

Checking if a list of arbitrary inequalities are satisfied

本文关键字:列表 不等式 任意 是否 满足 检查      更新时间:2023-10-16

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

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

另一个例子,p=Q,Q<S、 R=P,S>R应满足

我想了很久,很难做到这一点,但除了一个漫长而乏味的方法,我似乎找不到任何其他方法,这个方法包括检查添加的每个新不等式是否满足以前的所有不等式。

与C++相比,这更像是布尔逻辑的练习。如果你知道Python,就用它。

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

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

p=Q

我们的订单看起来像:

[p,Q]

下一个Q

所以现在我们有一个订单:

[p,Q],[S]

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

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

首先,通过用P替换所有出现的Q来删除所有等式P = Q。这将P = Q, Q < S, R = P, S > R减少为R < S, S > R

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

第三,检查图形是否包含循环。当图不包含环时,不等式是可满足的。

你可能想在谷歌上搜索2-SAT,这与这个问题有关。