我有一个形式的方程组:
x1 * x2 * .... * xn = a,其中*可以是+或 - 。
我正在构建相同形式的其他方程式,我想验证 如果他们对第一个系统感到满意。
我的问题是:是否有一个解算器可以确认给定的等式是否满足?
非常感谢, 干杯
答案 0 :(得分:1)
这是partition problem的变体,带有偏差(您需要通过a
结束一个比另一个更大的子集,而不是它们相等)。可以通过将a
添加到集合中来解决,现在解决"常规"分区问题。
这个问题是NP-Complete,但可以使用动态编程在伪多项式时间内解决:
D(x,i) = false x<0
D(0,i) = true
D(x,0) = false x != 0
D(x,i) = D(x,i-1) OR D(x-arr[i],i-1)
您正在寻找总和(x1 + x2 + ... + xn + a) / 2
我们的想法是获得2套,其中一套有a
(让它为A
),另一套没有它(让它为B
)。
在a
A
符号中添加所有元素(-
除外),并在B
中添加+
符号中的所有元素。
由于sum(A)= sum(B),你得到
sum(B)-(sum(A)-a) = sum(B) - sum(A) + a = 0 + a = a