即
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
是否可以通过编程方式解决?如果没有,如何用手解决?
感谢。
答案 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倍的长度,五个变量开始变慢。