如何自动解决这类方程?

时间:2014-06-20 05:30:19

标签: math equation boolean-logic

x = z + (x^y)v(x^z)
y = z + (x^z)
z = (x^y)

认为x,y,z都是这些方程中的8位数,这意味着将进行加法运算。

是否有某些程序或算法能够以编程方式解决这些方程?

进步,如果将移位操作带入方程怎么办?假设将第二个等式改为

y = z + (x^z)<<<5

更严重,

y = z + (x^z)<<<x

是否可以通过编程方式解决?如果没有,如何用手解决?

感谢。

1 个答案:

答案 0 :(得分:2)

查看Boolean satisfiability problem。基本上,任何布尔方程组都可以简化为单个正规形式表达式(a V b V ... V c)^(x V y V ... V z)。 BSAT问题询问是否有一组布尔值表示表达式求值为true。在计算方面,这是一个NP完全问题,基本上需要很多计算能力才能解决涉及大量变量的表达式。页面下方有一些程序可以解决大量值的问题。

如果您拥有的变量数量很少,那么最简单的算法就是蛮力算法。尽一切可能。如果你有n个变量,那么将有2 ^ n组值要尝试。如果n = 10,那么只有1024套可以测试哪一个会在眨眼之间完成。

如果没有+或移位运算符,你可以按位处理方程,比如说x=(x1,x2,x3,x4,x5,x6,x7,x8)为每组位给出一组方程,可以独立求解。添加+和shift会使事情变得更复杂,但它们仍然是一组按位方程式。对于只有三个变量,暴力仍然是合理的,2 ^ 24 = 16,777,216套试试这可以在现代硬件上的第二个解决。四个变量需要256倍的长度,五个变量开始变慢。