我有两个十进制数变量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列的错误总和值,使用数据透视表I在同一行中互换它们(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步
使用与每行中的R0(i)一样多的1来创建和填充NxN数组:
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 第一列总和符合调用替换的条件,所以
第3步
选择应用分支的标准&绑定方法并找到满足全局条件的最佳行更改列(所有列总和)。
列总和之间差异的变化量为:
|C0(i)-C1(i)|
对于这个例子,,| C0(0)-C1(0)| = 1改变。 如果更改在列总数之间产生更大的差异,则必须返回条件。
Σi,N(|C0(i)-C1(i)|)
那么,这种方法真的有用吗?
答案 0 :(得分:1)
目标是构建满足行和列总和的 矩阵还是满足它们的 a 矩阵?从问题中不清楚,但如果它是前者(“ ”案例)那么它就不可能了。
假设您可以通过这种方式唯一地表示任何m×m位的矩阵。然后考虑以下假设的压缩算法。
因为2×n×2 n << 2 2n 并且这个过程可以继续重复,假设你可以唯一地表示任何m×m位的矩阵,只有它的行和列总和是假的。