Найти векторную сумму столбца для двоичной матрицы, которая расположена в максимальной форме, используя заданную сумму вектора строки - PullRequest
1 голос
/ 03 июня 2019

Для двоичной матрицы mxn сумма вектора строки определяется как (r 1 , r 2 ... r i ), где i в (1к n) .., что означает, что количество номеров единиц (1) в строке 1 равно r 1 , строка 2 равно r 2 .. и строка m равно r m.Теперь в данной матрице 1 расположены в максимальной форме, т. Е. Для каждой строки первые ячейки r i содержат 1, а оставшиеся ячейки от r i + 1 до r n содержит ноль.Теперь для матрицы вышеприведенной формы необходимо вычислить число единиц в каждом столбце ... которое будет называться векторной суммой столбца.
Решение со сложностью 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 11 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 ]

2 голосов
/ 08 июня 2019
#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;
}
0 голосов
/ 03 июня 2019

Поймите, что это первое https://www.geeksforgeeks.org/program-for-rank-of-matrix/ эта документация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...