Algorithm 哪种算法可以解决变量为位、运算为异或的方程组?

Algorithm 哪种算法可以解决变量为位、运算为异或的方程组?,algorithm,equation-solving,bitwise-xor,Algorithm,Equation Solving,Bitwise Xor,我想解一个方程组。每个方程的形式如下: V1异或V2异或。。。异或Vx=Sx Vx和Sx是单位变量。 Sx是已知的,我需要找到所有Vx的值 例: 解决方案V1=0,V2=0,V3=1 实际上,我有数千个变量,每个变量都是一个位,数千个方程只有异或运算。 我知道至少有一个解决方案,我只需要一个解决方案 我知道如何为一个小系统手工解决这个问题,但我不知道如何构建一个算法来解决这个问题 你能帮我吗?我是一名开发人员,我了解如何使用位、异或运算符和数据结构,但我的数学经验较少,我不知道使用哪种方程系统求

我想解一个方程组。每个方程的形式如下:

V1异或V2异或。。。异或Vx=Sx

Vx和Sx是单位变量。 Sx是已知的,我需要找到所有Vx的值

例:

解决方案V1=0,V2=0,V3=1

实际上,我有数千个变量,每个变量都是一个位,数千个方程只有异或运算。 我知道至少有一个解决方案,我只需要一个解决方案

我知道如何为一个小系统手工解决这个问题,但我不知道如何构建一个算法来解决这个问题

你能帮我吗?我是一名开发人员,我了解如何使用位、异或运算符和数据结构,但我的数学经验较少,我不知道使用哪种方程系统求解方法。我对矩阵运算也不是很直观,所以如果我需要它,请尝试解释得非常慢!:p


谢谢

您可以使用高斯消去法:

XOR是加法和减法-对于取模2的整数也是一样的,所以非常简单:

例如,找到一个包含v1的方程式,并将其添加到包含v1的所有其他方程式中,以从中删除v1:

v1 XOR v2        = 1
      +
v1        XOR v3 = 0
--------------------
       v2 XOR v3 = 1

使用不同的方程从所有其他方程中删除v2,使用不同的方程删除v3,等等,直到所有方程只有一个变量。

您可以使用高斯消去法:

XOR是加法和减法-对于取模2的整数也是一样的,所以非常简单:

例如,找到一个包含v1的方程式,并将其添加到包含v1的所有其他方程式中,以从中删除v1:

v1 XOR v2        = 1
      +
v1        XOR v3 = 0
--------------------
       v2 XOR v3 = 1

使用不同的方程从所有其他方程中删除v2,使用不同的方程删除v3,等等,直到所有方程只有一个变量。

我几乎在另一条评论中提到了这一点,但这似乎是一个答案,所以在这里

恐怕你是索尔。例如,给定Sx为111,一个矩阵的前导是

L1 = 100   | Sx(L1) = 1
L2 = 010   | Sx(l2) = 1
L3 = 001   | Sx(L3) = 1
还有两个等价矩阵,它们可以很容易地拟合解L3,也可以是010或100


此外,如果Sx为001,你将不知道L3中的哪个Vx是活动位,即使你知道L1和L2在每个变量上的系数都为0。

我几乎在另一条评论中提到了这一点,但这似乎是一个答案,所以就在这里

恐怕你是索尔。例如,给定Sx为111,一个矩阵的前导是

L1 = 100   | Sx(L1) = 1
L2 = 010   | Sx(l2) = 1
L3 = 001   | Sx(L3) = 1
还有两个等价矩阵,它们可以很容易地拟合解L3,也可以是010或100


此外,如果Sx为001,即使知道L1和L2在每个变量上的系数为0,您也不知道L3中的哪个Vx是活动位。

好的,要做到这一点,您需要了解一些关于xor和not以及0=false和1=true的代数规则

首先,xor同时满足结合律和交换律。如果我们将一条长链异或在一起,我们可以随心所欲地重新排列

接下来,x xor x=0。当我们加上0 xor y=y这一事实时,我们可以删除匹配的变量对

其次是替代。一个形式为x1 xor x2 xor的方程。。。xor xn=0意味着x1=x2 xor x3 xor。。。xor xn。同样地,x1异或x2异或。。。xor xn=1意味着x1=1 xor x2 xor x3 xor。。。xor xn。这些事实可以用你的其他方程式来代替。这可能会导致重复变量,然后我们可以丢弃这些变量

这意味着每一个方程都可以用来写出一个变量与其他变量的关系,然后可以代入其他方程中。这现在是一个因变量。最后我们将有三个州中的一个

1=0表示没有解决方案。 没有方程和变量了。有一个解决办法。只要向后替换就可以了。 有几个变量从未被消除,但你已经脱离了方程。这些变量是免费的。你可以将它们设置为任何值,然后得到答案。您不妨将它们设置为1。 让我用你的方程式来说明

(1) 1 = V1 xor V2 xor V3
(2) 0 = V1 xor V2
(3) 1 = V2 xor V3
从1开始,我们知道:

(4) V1 = 1 xor V2 xor V3
注意,V1已消除。将4替换为2和3,得到:

(5) 0 = V1 xor V2
      = (1 xor V2 xor V3) xor V2
      = 1 xor V3

(6) 1 = V2 xor V3
注意,6是一个微不足道的替换

从5日起,我们得到:

注意,V3已被删除。将7替换为6,我们得到:

(8) 1 = V2 xor V3
      = V2 xor 1
从8日起,我们得到:

注意,V2已消除

规则9、7和4消除了V2、V3和V1,因此只有一个解决方案。它是:

(9) V2 = 0
(7) V3 = 1
(4) V1 = 1 xor V2 xor V3 = 1 xor 0 xor 1 = 0
请注意,这完全是一个机械过程。在每一步中,我取下我留下的第一个等式,用它写出一个变量和其他变量的关系,然后把它代入其他变量。少一个等式,少一个变量。它总是有效的


您必须为此制定一个良好的表示和代码。但是知道你想做什么很有帮助。

好的,要做到这一点,你需要知道一些关于xor和not以及0=false的代数规则 和1=真

首先,xor同时满足结合律和交换律。如果我们将一条长链异或在一起,我们可以随心所欲地重新排列

接下来,x xor x=0。当我们加上0 xor y=y这一事实时,我们可以删除匹配的变量对

其次是替代。一个形式为x1 xor x2 xor的方程。。。xor xn=0意味着x1=x2 xor x3 xor。。。xor xn。同样地,x1异或x2异或。。。xor xn=1意味着x1=1 xor x2 xor x3 xor。。。xor xn。这些事实可以用你的其他方程式来代替。这可能会导致重复变量,然后我们可以丢弃这些变量

这意味着每一个方程都可以用来写出一个变量与其他变量的关系,然后可以代入其他方程中。这现在是一个因变量。最后我们将有三个州中的一个

1=0表示没有解决方案。 没有方程和变量了。有一个解决办法。只要向后替换就可以了。 有几个变量从未被消除,但你已经脱离了方程。这些变量是免费的。你可以将它们设置为任何值,然后得到答案。您不妨将它们设置为1。 让我用你的方程式来说明

(1) 1 = V1 xor V2 xor V3
(2) 0 = V1 xor V2
(3) 1 = V2 xor V3
从1开始,我们知道:

(4) V1 = 1 xor V2 xor V3
注意,V1已消除。将4替换为2和3,得到:

(5) 0 = V1 xor V2
      = (1 xor V2 xor V3) xor V2
      = 1 xor V3

(6) 1 = V2 xor V3
注意,6是一个微不足道的替换

从5日起,我们得到:

注意,V3已被删除。将7替换为6,我们得到:

(8) 1 = V2 xor V3
      = V2 xor 1
从8日起,我们得到:

注意,V2已消除

规则9、7和4消除了V2、V3和V1,因此只有一个解决方案。它是:

(9) V2 = 0
(7) V3 = 1
(4) V1 = 1 xor V2 xor V3 = 1 xor 0 xor 1 = 0
请注意,这完全是一个机械过程。在每一步中,我取下我留下的第一个等式,用它写出一个变量和其他变量的关系,然后把它代入其他变量。少一个等式,少一个变量。它总是有效的

您必须为此制定一个良好的表示和代码。但是知道你想做什么很有帮助。

你可以使用这个算法。例如,在Java中,它在项目中可用

您的示例可以像这样发布在的中。在引擎盖下,逻辑被调用

SatisfiabilityInstances(Xor(v1,v2,v3)&&Not(Xor(v1,v2))&&Xor(v2,v3),{v1,v2,v3})
结果:

{{False,False,True}}
您可以使用该算法。例如,在Java中,它在项目中可用

您的示例可以像这样发布在的中。在引擎盖下,逻辑被调用

SatisfiabilityInstances(Xor(v1,v2,v3)&&Not(Xor(v1,v2))&&Xor(v2,v3),{v1,v2,v3})
结果:

{{False,False,True}}

你能详细说明你到底想解决什么问题吗?您的示例是否意味着您试图确定哪个位设置为V3?在示例中,您通常在另一个方向求解方程组,您知道3个Vx变量的3个方程,并且您正在寻找Sx解决方案。给定Sx解决方案-你想发现一个有数千行和数千列的矩阵的方程组吗?Thx,我正在尝试反转一个算法,更准确地说是一个非安全的随机生成器。使用PRG的输出,我想找到输入的内部状态。这就是我如何得到一个xor方程的系统,我知道它的结果,我想知道它的输入。这也是为什么我知道至少有一个有效的解决方案。现在我有了方程组,但我不知道怎么解它,因为我对矩阵计算很在行:你可以把它扔给约束解算器:你能详细说明你到底想解什么吗?您的示例是否意味着您试图确定哪个位设置为V3?在示例中,您通常在另一个方向求解方程组,您知道3个Vx变量的3个方程,并且您正在寻找Sx解决方案。给定Sx解决方案-你想发现一个有数千行和数千列的矩阵的方程组吗?Thx,我正在尝试反转一个算法,更准确地说是一个非安全的随机生成器。使用PRG的输出,我想找到输入的内部状态。这就是我如何得到一个xor方程的系统,我知道它的结果,我想知道它的输入。这也是为什么我知道至少有一个有效的解决方案。现在我有了方程组,但我不知道怎么解它,因为我对矩阵计算很在行:你可以把它扔给约束解算器:谢谢。你能再描述一下如何使用高斯消去法来解决我的问题吗?或者指向在我的情况下可以工作的代码?我不是在偷懒,但我就是不懂矩阵计算!当然希望这对汉克斯有帮助。你能再描述一下如何使用高斯消去法来解决我的问题吗?或者指向在我的情况下可以工作的代码?我不是在偷懒,但我就是不懂矩阵计算!当然希望有帮助