Как найти столбец с минимальной суммой

0 / 0 / 0

Регистрация: 18.03.2013

Сообщений: 75

1

Найти столбец матрицы с минимальной суммой элементов

22.04.2013, 17:56. Показов 9067. Ответов 4


Студворк — интернет-сервис помощи студентам

дано двумерный массив целых чисел найти столбик с минимальной суммой элементов



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

22.04.2013, 17:56

4

BumerangSP

4299 / 1421 / 463

Регистрация: 16.12.2010

Сообщений: 2,939

Записей в блоге: 3

22.04.2013, 19:24

2

Заполняете массив, а после пишите следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int sum = 0, pos = 0, minSum = -1000; // munSum (минимальная сумма) изначально 
                                          // должна быть меньше любой из сумм в столбцах
    for (int i=0; i<n; ++i)
    {
        for (int j=0; j<n; ++j)
            sum +=a[j][i];
        if (minSum < sum)
        {
            minSum = sum;
            pos = i;
        }
        sum = 0;
    }
    std::cout << minSum << ' ' << pos+1;



0



BodyRockSam

0 / 0 / 0

Регистрация: 01.04.2013

Сообщений: 2

24.04.2013, 12:45

3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <ctime>
#include <climits>
 
const int Str = 4;
const int Col = 5;
 
void print(int * di)
{
    for (int i = 0; i < Str; ++i)
    {
        for (int j = 0; j < Col; ++j)
            std::cout << *(di + i * Col + j) << 't';
        std::cout << 'n';
    }
}
 
 
int main()
{
    /*******************************/
    int di[Str][Col];
    srand(unsigned(time(0)));
    for (int i = 0; i < Str; ++i)
        for (int j = 0; j < Col; ++j)
            di[i][j] = rand() % 26;
        print(di[0]);
    /******************************/
    int Min = INT_MAX; // summa
    int ColumnNum = 0; // Nomer stolbika
    for (int i = 0; i < Col; ++i)
    {
        int Res = 0;
        for (int j = 0; j < Str; ++j)
            Res += di[j][i];
        if (Res < Min)
        {
            Min = Res;
            ColumnNum = i;
        }
    }
    std::cout << "Min Column: " << ColumnNum + 1 << ", Sum: " << Min << 'n';
    return 0;

Как вариант.



0



Olivеr

414 / 410 / 95

Регистрация: 06.10.2011

Сообщений: 832

13.05.2013, 20:59

4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <limits>
#include <iomanip>
 
using namespace std;
 
typedef int vecType;
typedef vector<vecType> oneDimenVec;
typedef vector<oneDimenVec> twoDimenVec;
 
int main()
{
    srand(time(0));
    twoDimenVec vec(5, oneDimenVec(5));
 
    for (auto &v : vec) {
        generate(v.begin(), v.end(), []() { return rand() % 10 + 90; });
        for_each(v.begin(), v.end(), [](const vecType &val) { cout << setw(3) << val; } );
        cout << endl;
    }
 
    vecType sum1 = 0, sum2 = INT_MAX, index = 0;
    for (size_t i = 0; i != vec[0].size(); i++) {
        for (size_t j = 0; j != vec.size(); j++)
            sum1 += vec[j][i];
        if (sum1 < sum2) {
            index = i;
            sum2 = sum1;
        }
        sum1 = 0;
    }
 
    cout << index;
    return 0;
}



0



Genn55

413 / 250 / 118

Регистрация: 26.12.2012

Сообщений: 786

14.05.2013, 02:12

5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
 
int main()
{
    const int N = 8;
    const int M = 5;
 
    int A[N][M];
    srand(time(NULL));
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
         {
            A[i][j]=rand()%20;//заполняем
            cout<<A[i][j]<<"t";// выводим сформированный массив
         }
        cout<<"n";
    }
cout<<"n";
int sum=0;
    for (int i = 0; i < M; ++i)
    {
        for (int j = 0; j < N; ++j)
           {
             sum += A[j][i];//накапливаем сумму столбцов
           }
    }
    int min = sum;//сумма
    int minSt = 0,rez = 0;
    for (int i = 0; i < M; ++i)
    {
       rez = 0;
        for (int j = 0; j < N; ++j)
            rez += A[j][i];//сумма столбца
        if (rez < min)
        {
            min = rez;//мин сумма
            minSt = i;
        }
    }
   cout << "Min St =  " << minSt + 1 << " Suma min =  " << min <<"n";
    return 0;
}



0



#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int N, M, summ, min = 0;
cout << "Введите размер матрицы: n";
cin >> N >> M;
int** A = new int* [N];
for (int i = 0; i < N; i++)
    A[i] = new int[M];
cout << "Введите значения матрицы: n";

for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++) {
        printf("nA[%d][%d] = ", i, j);
        cin >> A[i][j];
    }

cout << "Вот Ваша матрица:" << endl << endl;
for (int i = 0; i < N; i++)
{
    for (int j = 0; j < M; j++)
        cout << A[i][j] << " ";
    cout << endl;
}
cout << "nИскомые суммы в столбцах:" << endl;
for (int j = 0; j < M; j++)
{
    summ = 0;
    for (int i = 0; i < N; i++)
    {
        if (A[i][j] >= 0) summ += A[i][j];
    }
    cout << "Cтолбец №" << j + 1 << ": " << summ << endl;
}
}

введите сюда описание изображения

Должно вывести «Минимальный столбец этой суммы: 1»

задан 7 июн 2022 в 19:47

Алексей Новиков's user avatar

2

cout << "nИскомые суммы в столбцах:" << endl;
int min_idx = 0, min_sum = INT_MAX;
for (int j = 0; j < M; j++)
{
    summ = 0;
    for (int i = 0; i < N; i++)
    {
        if (A[i][j] >= 0) summ += A[i][j];
    }
    if (min_sum > summ) min_idx = j;
    cout << "Cтолбец №" << j + 1 << ": " << summ << endl;
}
cout << "Минимальный столбец этой суммы: " << min_idx << endl;

ответ дан 8 июн 2022 в 5:06

Harry's user avatar

HarryHarry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

Сумма элементов столбцов матрицы

Задача

Вариант 1. Вычислить сумму элементов каждого столбца матрицы (двумерного массива).

Вариант 2. Найти сумму элементов определенного столбца матрицы.

Похожие задачи

Решение

Матрицу можно представить как массив, в который вложены другие массивы. Эти другие массивы имеют одинаковую длину (например, M), а количество этих вложенных массивов — другое число (например, N). Так, если M = 7, а N = 5, то это значит, что матрица состоит из 5 одномерных массивов, в каждом из которых по 7 элементов.

Элементы одного вложенного массива обычно считают строкой матрицы. Столбцы же матрицы формируют элементы разных вложенных массивов, но имеющие в них одинаковые индексы (занимающие одинаковые позиции). Так, все первые элементы вложенных массивов, формируют первый столбец матрицы. Элементы с индексом 2 образуют второй столбец.

Если mat — это переменная-матрица, то выражение mat[i,j] обозначает обращение к элементу, имеющему номер строки i (это номер вложенного массива), и номер столбца j (это номер самого элемента во вложенном массиве).

Обычно матрицы заполняются по-строчно: во внешнем цикле перебираются строки, во внутреннем — элементы строк (формируют столбцы). Однако это не обязательно. Заполнять можно и по столбцам: во внешнем цикле перебирать столбцы, во внутреннем — обращаться к элементам разных вложенных массивов, но имеющих идентичный индекс.

В программе ниже заполнение двумерного массива происходит по-строчно (стандартно), затем вычисляется сумма элементов каждого столбца, и здесь обход происходит по столбцам. Обратите внимание, что в данном случае внешний цикл отсчитывает до M, а внутренний — до N. В разных итерациях вложенного цикла различна первая переменная-индекс (в данном случае i), обозначающая номер строки, а столбец остается постоянным.

Пример выполнения кода программы:

Когда поставлена задача нахождения суммы элементов только определенного столбца, то она решается проще, без вложенного цикла. Вместо переменной j используется конкретное число, обозначающее столбец, сумму которого следует посчитать. Например, для вычисления суммы элементов третьего столбца код будет таким:

Задания к лабораторной работе 3

Лабораторная работа 2.

Тема: Векторы и матрицы

Цель: научить создавать векторы и матрицы разными способами, производить с ними различные операции.

Общие сведения

Задачи линейной алгебры, решаемые в MathCAD, можно условно разделить на два класса. Первый ‑ это простейшие матричные операции, которые сводятся к определенным арифметическим действиям над элементами матрицы. Они реализованы в виде операторов и нескольких специфических функций, предназначенных для создания, объединения, сортировки, получения основных свойств матриц и т. д. Второй класс ‑ это более сложные действия, которые реализуют алгоритмы вычислительной линейной алгебры, такие как вычисление определителей и обращение матриц, вычисление собственных векторов и собственных значений, решение систем линейных алгебраических уравнений и различные матричные разложения.

Простейшие операции матричной алгебры реализованы в MathCAD в виде операторов, причем их запись максимально приближена к математическому значению. Каждый оператор выражается соответствующим символом. Некоторые операции применимы только к квадратным матрицам N ´ N, некоторые допускаются только для векторов (например, скалярное произведение), а другие, несмотря на одинаковое написание, по-разному действуют на векторы и матрицы.

Имеется два способа создать матрицу.

1-й способ. Использование команды создания массивов:

· Воспользоваться командой Вставка ® Матрица;

· нажатие клавиш Ctrl+M;

· выбор пиктограммы с изображением шаблона матрицы на панели инструментов Матрицы.

В диалоговом окне указать размерность матрицы, т. е. количество ее строк m (Rows) и столбцов n (Columns).

Для векторов один из этих параметров должен быть равен 1. При m = 1 получим вектор-столбец, а при n = 1- вектор-строку.

Далее на экране появится шаблон , в который нужно ввести значения элементов массива.

Обращаться к отдельным элементам вектора или матрицы можно используя нижний индекс. Для элемента матрицы указываются два индекса, один ‑ для номера строки, другой ‑ для номера столбца.

Чтобы ввести нижний индекс, нужно нажать клавишу [ после имени вектора или матрицы или выбрать команду на панели Матрицы.

2-й способ. Использование ранжированной переменной.

Ранжированная переменная используется для определения индекса (номера) элемента массива.

1) Создать матрицу В, состоящую из 2 строк и 3 столбцов.

2) Создать вектор S, состоящий из 3 элементов

Команды панели инструментов Матрицы

Кнопка Назначение
Создание матрицы
Обратная матрица
Определитель матрицы
Транспонирование матрицы
Выделение столбца матрицы

Операторы для работы с массивами

Обозначения: для векторов ‑ V, для матриц ‑ М и для скалярных величин ‑ z.

Оператор Ввод Назначение оператора
V1+V2 V1+V2 Сложение двух векторов V1 и V2
V1-V2 V1-V2 Вычитание двух векторовV1 и V2
Смена знака у элементов матрицы M
V-z V-z Вычитание из вектора V скаляра z
z*V, V*z z*V, V*z Умножение вектора V на скаляр z
z*M, M*z z*M, M*z Умножение матрицы М на скаляр z
V1*V2 VI*V2 Умножение двух векторов V1 и V2
M*V M*V Умножение матрицы М на вектор V
М1*М2 М1*М2 Умножение двух матриц М1 и М2
V/z Деление вектора V на скаляр z
M/z Деление матрицы М на скаляр z
М^n Возведение матрицы М в степень п

Фрагмент документа MathCAD:

Функции для работы с векторами и матрицами.

Некоторые из них (V должен быть вектором, A может быть вектором либо матрицей):

length(V) ‑возвращает число элементов в векторе v;

last(V) ‑ возвращает индекс последнего элемента;

max(A) ‑ возвращает максимальный по значению элемент;

min(A) ‑ возвращает минимальный по значению элемент.

Для работы с матрицами также существует ряд встроенных функций:

augment(M1, М2) ‑ объединяет в одну матрицы М1 и М2, имеющие одинаковое число строк;

identity(n) ‑ создает единичную квадратную матрицу размером , (n – размер матрицы(число));

stack(MI, M2) ‑ объединяет две матрицы М1 и M2, имеющие одинаковое число столбцов, сажая M1 над M2;

diag(V) ‑ создает диагональную матрицу, элемент главной диагонали которой ‑ вектор V;

cols(M) ‑ возвращает число столбцов матрицы М;

rows(M) ‑ возвращает число строк матрицы М;

rank(M) ‑возвращает ранг матрицы М;

tr(M) ‑ возвращает след (сумму диагональных элементов) квадратной матрицы М;

mean(M) ‑ возвращает среднее значение элементов массива М;

median(M) ‑ возвращает медиану элементов массива М;

eigenvals(M) ‑ возвращает вектор, элементами которого являются собственные значения матрицы M (M должна быть квадратной матрицей.);

submatrix(M,ir,jr,ic,jc) ‑ возвращает подмассив, состоящий из всех элементов, которые содержатся в строках с ir по jr и столбцах с ic по jc массива М.

Все матричные и векторные операторы допустимо использовать как в численных, так и в символьных расчетах. Мощь символьных операций заключается в возможности проводить их не только над конкретными числами, но и над переменными.

Фрагмент документа MathCAD:

Задания к лабораторной работе 3

1. Ввести в документ название лабораторной работы, вариант задания и фамилию студента

2. Создать квадратные матрицы А, В, D, размером (5,5,4 соответственно) первым способом

3. Исследовать следующие свойства матриц на примере преобразования заданных массивов:

· транспонированная матрица суммы двух матриц равна сумме транспонированных матриц (A+B) T =A T +B T ;

· транспонированная матрица произведения двух матриц равна сумме произведению транспонированных матриц, взятых в обратном порядке: (A*B) T =B T *A T ;

· при транспонировании квадратной матрицы определитель не меняется : |D|=|D T |;

· произведение квадратной матрицы на соответствующую ей квадратную дает единичную матрицу (элементы главной диагонали единичной матрицы равны 1, а все остальные – 0) D*D -1 =E.

4. Для матриц A,B найти обратные матрицы.

5. Найти определители матриц A,B.

6. Для матрицы А увеличить значения элементов в № раз, где № ‑ номер варианта.

7. Для матрицы В увеличить значения элементов на №.

8. Создать вектор C вторым способом, количество элементов которого равно 6.

9. Применить к матрицам А, В, D встроенные матричные функции (всевозможные) из приведенных в пункте “Функции для работы…..”

10. Применить к вектору С встроенные векторные функции.

11. Применить ко всем матрицам и вектору общие встроенные функции.

12. Сохранить документ.

1. Как создать матрицу, вектор ‑ строку, вектор ‑ столбец?

2. Какие операторы есть для работы с матрицами?

3. Перечислите команды панели инструментов Матрицы.

4. Как вставить матричные функции?

5. Как выполнять вычисления, если матрица задана в символьном виде?

Найти столбец матрицы с максимальной суммой элементов

Задана матрица неотрицательных чисел. Посчитать сумму элементов в каждом столбце. Определить, какой столбец содержит максимальную сумму.

Для решения данной задачи необходимо найти сумму элементов каждого столбца матрицы, после чего сравнить между собой суммы. При этом надо запомнить, какому столбцу принадлежит какая сумма.

Однако не будем сначала искать все суммы, а после выполнять сравнений. Вычислив сумму элементов очередного столбца, сравним ее со значением переменной, предназначенной для хранения максимальной суммы. Если текущая окажется больше, то запишем ее в указанную переменную. Кроме того, запомним в отдельной переменной номер текущего столбца.

Если сумма следующего столбца окажется больше, то снова перезапишем указанные переменные. Если же меньше или равна, то перезаписывать не будем.

Перебрав таким образом всю матрицу, мы найдем столбец с максимальной суммой элементов. Но только первый. Данный вариант решения задачи приводится в примерах кода ниже.

Если же в матрице содержится несколько столбцов с одинаковой максимальной суммой и все их надо определить, то задача решается немного по-другому. Сначала ищется максимум, при этом номер столбца запоминать не надо. После этого снова считаются суммы столбцов и при совпадении с ранее найденным максимальным значением номер столбца выводится на экран.

источники:

http://poisk-ru.ru/s10940t3.html

http://gospodaretsva.com/sum-col-max.html

const
  size = 4; {Размер матрицы. Можно изменить}
 
type
  matrix = array [1..size, 1..size] of integer;
 
function Sum(x: matrix; col: integer): integer;
var
  i, s: integer;
begin
  s := 0;
  for i := 1 to size do
    if x[i, col] > 0 then
      s := s + x[i, col];
  Sum := s
end;
 
var
  a: matrix;
  i, j, min, jmin: integer;
 
begin
  Randomize;
  min := MAXINT;
  for i := 1 to size do
  begin
    for j := 1 to size do
    begin
      a[i, j] := -50 + Random(101);
      Write(a[i, j]:6)
    end;
    WriteLn
  end;
  for i := 1 to size do
    if (Sum(a, i) < min) and (Sum(a, i) <> 0) then
    begin
      min := Sum(a, i);
      jmin := i
    end;
  WriteLn('Номер столбца с минимальной суммой положительных элементов = ', jmin, ' (Сумма = ', min, ')');
  ReadLn
end.

We can have an application for finding the lists with the minimum value and print it. This seems quite an easy task and may also be easy to code, but having shorthands to perform the same are always helpful as this kind of problem can come in web development. 

Method #1 : Using reduce() + lambda The above two function can help us achieving this particular task. The lambda function does the task of logic and iteration and reduce function does the task of returning the required result. Works in python 2 only. 

Python3

test_matrix = [[1, 3, 1], [4, 5, 3], [1, 2, 4]]

print("The original matrix is : " + str(test_matrix))

res = reduce(lambda i, j: i if sum(i) < sum(j) else j, test_matrix)

print("Minimum sum row is : " + str(res))

Output : 

The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]]
Minimum sum row is : [1, 3, 1]

Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements

Method #2: Using min() + key The min function can get the minimum of all the list and key is used to specify on what the min condition has to be applied which is summation in this case. 

Python3

test_matrix = [[1, 3, 1], [4, 5, 3], [1, 2, 4]]

print("The original matrix is : " + str(test_matrix))

res = min(test_matrix, key=sum)

print("Minimum sum row is : " + str(res))

Output : 

The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]]
Minimum sum row is : [1, 3, 1]

Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements

Method #3 : Using sum(),extend(),sort() and index() methods

Python3

test_matrix = [[1, 3, 1], [4, 5, 3], [1, 2, 4]]

print ("The original matrix is : " + str(test_matrix))

a=[]

for i in test_matrix:

    a.append(sum(i))

y=[]

y.extend(a)

y.sort()

res=test_matrix[a.index(y[0])]

print ("Minimum sum row is : " + str(res))

Output

The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]]
Minimum sum row is : [1, 3, 1]

Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements

Method #4: Using numpy library

Note: Install numpy module using command “pip install numpy”

Python3

import numpy as np

test_matrix = np.array([[1, 3, 1], [4, 5, 3], [1, 2, 4]])

print("The original matrix is : n", test_matrix)

res = test_matrix[np.argmin(np.sum(test_matrix, axis=1))]

print("Minimum sum row is : ", res)

Note: Install numpy module using command "pip install numpy"

Output:

The original matrix is : 
[[1 3 1]
[4 5 3]
[1 2 4]]
Minimum sum row is :  [1 3 1]

The above code uses the numpy library to find the row with the minimum sum in the matrix. The argmin() function is used to find the index of the row with the minimum sum and the sum() function is used to calculate the sum of elements in each row. The axis parameter is set to 1 to calculate the sum of elements in each row. The result is then stored in the variable ‘res’. The time complexity is O(n) and Auxiliary space  is O(1)

Last Updated :
17 Apr, 2023

Like Article

Save Article

Понравилась статья? Поделить с друзьями:
  • Как найти корни слау
  • Если белок не взбивается в густую пену что делать как исправить
  • Как найти треть числа правило
  • Как найти часть длину части трубы
  • Fallout 2 application error как исправить