查找二进制矩阵的列向量总和,该二进制矩阵使用给定的行向量总和以最大形式排列

时间:2019-06-03 10:52:57

标签: c++ math matrix vector sum

对于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]++;

    }
 }

2 个答案:

答案 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)