对于mxn二进制矩阵,行向量之和为(r 1 ,r 2 ... r i ),其中i in(1到n)..表示第1行中的one(1)数为r 1 ,第2行为r 2 ..,第m行为r m 。
现在,在给定矩阵1中以最大形式排列。即,对于每行,第一个r i 单元包含1,其余单元r i + 1 至r n 包含零。
现在,对于上述形式的矩阵,将计算每列中的1的数目...这将称为列向量和。
复杂度为o(mn)的解决方案已经存在
如果给定一个6x5矩阵,且行向量和为R =(3,4,5,2,3)。
使用此方法创建最大形式的二进制矩阵:
3-> | 1 1 1 0 0 0 |
4-> | 1 1 1 1 0 0 |
5-> | 1 1 1 1 1 0 |
2-> | 1 1 0 0 0 0 |
3-> | 1 1 1 0 0 0 |
现在计算上列示例的列和向量。 C =(5,5,4,2,1,0)
当前代码:
int m = 5;
int n = 6;
int row[m] = {3,4,5,2,3};//given: value in this array will always be <=n
int column_maximalColumnVector[n];// initialised to zero
for (int i = 0; i < m; i++) {
for (int j = 0; j < row[i]; j++) {
column_maximalColumnVector[j]++;
}
}
答案 0 :(得分:2)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m = 5;
int n = 6;
int row[m] = { 3, 4, 5, 2, 3 }; //given: value in this array will always be <=n
int k = sizeof(row) / sizeof(row[0]);
sort(row, row + m);
int steps = row[0];
int row_count = 0;
int col_count = 0;
int maximal_vector_value = m;
int column_maximalColumnVector[n] = { 0 }; // initialised to zero
while (row_count <= m - 1) {
for (int i = 0; i < steps; i++) {
column_maximalColumnVector[col_count++] = maximal_vector_value;
}
maximal_vector_value -= 1;
if ((row_count + 1) < m) {
steps = row[row_count + 1] - row[row_count];
}
row_count++;
}
return 0;
}
答案 1 :(得分:-1)