如何从总和构建二进制矩阵
How to build a binary matrix from sums
我有两个十进制数变量,colSum 和 rowSum,使用它们我想根据这些总和构建一个二进制值矩阵,rowSum 数组变量是将每一行的所有 1 相加的结果,相同用于 colSum 数组。
所以,如果你有
rowSum = [0,1,2]
colSum = [1,1,1]
您必须正确构建以下数组
matrix = [
[0,0,0],
[0,0,1],
[1,1,0]
]
我在 PHP 中使用了这种方法,它适用于 3x3 矩阵,但不适用于更大的矩阵,例如 8x8。
首先,使用 rowSum 值填充行中的所有 1。
然后,尝试找到 2 列的错误总和值,使用一个主元我在同一行中交换它们(1 个具有 cero 值),直到我得到正确的 colSum 值。
但它不起作用,因为我需要对标准进行一些控制,以更改同一行中两列的 1 和 0...
这是我正在使用的方法。
假设我们有这个矩阵(N=3 -> NxN):
0 0 0
0 0 1
1 1 0
然后我们有以下数组
R0 = {0,1,2} //--> result of sums of each rows: ( 0+0+0, 0+0+1 , 1+1+0 )
C0 = {1,1,1} // ->sums of each columns
第 1 步
创建并填充一个 NxN 数组,每行使用与 R0(i) 一样多的 1:
0 0 0
1 0 0
1 1 0
现在计算这个新矩阵的总和:
R1 = {0,1,2}
C1 = {2,1,0}
第 2 步
检查所创建矩阵的列和的所有元素是否具有与 C0(原点)相同的值
for ( i=0, N-1) do
if C0(i)!=C1(i) then
ReplaceColumn(i)
end
end
要替换列,我们必须挖掘内部条件。
C0(0) = 1 != C1(0) = 2
第一列 sum 确实满足调用替换的条件,所以
第 3 步
选择应用分支定界法的标准并找到满足全局条件(所有列总和)的更改列的最佳行。
列总和之间差异的变化量是:
|C0(i)-C1(i)|
对于这个例子,|C0(0)-C1(0)| = 1 次更改。
返回条件必须是如果更改在列的总和之间产生更大的差异。
Σi,N(|C0(i)-C1(i)|)
那么,这个方法真的有用吗?
目标是构造满足行列和的矩阵还是满足它们的a矩阵?从问题中不清楚,但如果是前者(“the”案例)那么这是不可能的。
假设您可以用这种方式唯一地表示任何 m × m 位矩阵。然后考虑下面假设的压缩算法。
- 取22n位数据
- 视为2n×2n位
- 为了描述数据,使用 2 × 2n 行和列总和,每个最多使用 log2(2n) = n 位
- 数据压缩为2×n×2n位
因为 2 × n × 2n << 22n 并且这个过程可以不断重复,假设你可以仅通过其行和列总和唯一地表示任何 m × m 位矩阵是错误的。
我有两个十进制数变量,colSum 和 rowSum,使用它们我想根据这些总和构建一个二进制值矩阵,rowSum 数组变量是将每一行的所有 1 相加的结果,相同用于 colSum 数组。
所以,如果你有
rowSum = [0,1,2]
colSum = [1,1,1]
您必须正确构建以下数组
matrix = [
[0,0,0],
[0,0,1],
[1,1,0]
]
我在 PHP 中使用了这种方法,它适用于 3x3 矩阵,但不适用于更大的矩阵,例如 8x8。 首先,使用 rowSum 值填充行中的所有 1。 然后,尝试找到 2 列的错误总和值,使用一个主元我在同一行中交换它们(1 个具有 cero 值),直到我得到正确的 colSum 值。 但它不起作用,因为我需要对标准进行一些控制,以更改同一行中两列的 1 和 0...
这是我正在使用的方法。
假设我们有这个矩阵(N=3 -> NxN):
0 0 0
0 0 1
1 1 0
然后我们有以下数组
R0 = {0,1,2} //--> result of sums of each rows: ( 0+0+0, 0+0+1 , 1+1+0 )
C0 = {1,1,1} // ->sums of each columns
第 1 步
创建并填充一个 NxN 数组,每行使用与 R0(i) 一样多的 1:
0 0 0
1 0 0
1 1 0
现在计算这个新矩阵的总和: R1 = {0,1,2} C1 = {2,1,0}
第 2 步
检查所创建矩阵的列和的所有元素是否具有与 C0(原点)相同的值
for ( i=0, N-1) do
if C0(i)!=C1(i) then
ReplaceColumn(i)
end
end
要替换列,我们必须挖掘内部条件。 C0(0) = 1 != C1(0) = 2 第一列 sum 确实满足调用替换的条件,所以
第 3 步
选择应用分支定界法的标准并找到满足全局条件(所有列总和)的更改列的最佳行。
列总和之间差异的变化量是:
|C0(i)-C1(i)|
对于这个例子,|C0(0)-C1(0)| = 1 次更改。 返回条件必须是如果更改在列的总和之间产生更大的差异。
Σi,N(|C0(i)-C1(i)|)
那么,这个方法真的有用吗?
目标是构造满足行列和的矩阵还是满足它们的a矩阵?从问题中不清楚,但如果是前者(“the”案例)那么这是不可能的。
假设您可以用这种方式唯一地表示任何 m × m 位矩阵。然后考虑下面假设的压缩算法。
- 取22n位数据
- 视为2n×2n位
- 为了描述数据,使用 2 × 2n 行和列总和,每个最多使用 log2(2n) = n 位
- 数据压缩为2×n×2n位
因为 2 × n × 2n << 22n 并且这个过程可以不断重复,假设你可以仅通过其行和列总和唯一地表示任何 m × m 位矩阵是错误的。