检查是否满足任意不等式的列表
Checking if a list of arbitrary inequalities are satisfied
我正在用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 < Q
或Q > P
,则构建一个以变量为顶点、从P
到Q
的边的有向图。
第三,检查图形是否包含循环。当图不包含环时,不等式是可满足的。
你可能想在谷歌上搜索2-SAT,这与这个问题有关。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 检查是否满足任意不等式的列表