Определение числа операций в зависимости от размера исходных данных на основе описания алгоритма
В общем, мне нужно на основе описания алгоритма вывести формулу определения числа операций в зависимости от размерности исходных данных.
Само задание к коду: В данном двухмерном массиве A[1..n,1..n] с вещественными коэффициентами найти такое значение A[i,j], которое является максимальным в i-й строке и минимальным в j-м столбце.
Саму прогу я написала. По псевдокоду нужно определить число операций. Вот мой псевдокод:
1. Алгоритм arrayElem:
Input: Двухмерный массив A, содержащий n2 вещественных чисел
Output: Элемент A[j], который является максимальным в i-той строке и минимальным в j-том столбце.
1. Начало
2. i, j
3. A[1…n][1…n], maxstr, minstolb, M1[1…n], M2[1…n]
4. for i = 0; i < n; i ++
5. maxstr = -5000, minstolb = 5000
6. for j = 0; j < n; j ++
7. if A[j] >= maxstr
8. maxstr = A[j]
9. if A[j] <= minstolb
10. minstolb = A[j]
11. M1 = maxstr
12. M2 = minstolb
13. for i = 0; i < n; i ++
14. for j = 0; j < n; j ++
15. if M1 == M2
16. cout << M1
17. Конец
Помогите определить число операций по описанию алгоритма! Не могу разобраться как выводить формулу подсчёта операций. Просмотрела кучу литературы, везде разные задачи и для каждой своя формула подсчёта числа операций. Как её определяют - не пойму. Буду очень признательна за помощь и пояснение вывода формулы.
Точно, код не совсем верный. С индексами напутала. При нахождении минимальных значений в столбцах индексы идут j и i. И в конце М1==M2[j].
При вбивании псевдокода я напутала, поэтому отправляю сам код:
#include "stdafx.h"
#include
#include
using namespace std;
void main()
{
setlocale(0, "Rus");
int i, j;
double maxstr, minstolb;
const int n = 5;
double M1[n], M2[n];
double A[n][n] =
{
{1.0, 6.6, 3.0, 4.4, -8.6},
{-5.2, 7.7, 6.4, 0.1, 3.0},
{2.0, 9.8, -4.7, 3.5, 1.2},
{0.0, 5.2, 3.5, -2.0, 1.7},
{4.1, 8.4, 2.0, 9.9, -6.0}
};
cout << "Исходная матрица A:\n";
for (i = 0; i < n; i ++)
{
maxstr = -5000, minstolb = 5000;
for (j = 0; j < n; j ++)
{
if (A[j] >= maxstr) maxstr = A[j];
if (A[j] <= minstolb) minstolb = A[j];
cout.width(5); cout.precision(2);
cout << A[j] << " |";
}
M1 = maxstr;
M2 = minstolb;
cout << "\n";
}
for (i = 0; i < n; i ++)
{
for (j = 0; j < n; j ++)
{
if (M1 == M2[j])
{
cout << "Элемент - максимальный в " << i << " строке и минимальный в " << j << " столбце: \n";
cout << M1;
}
}
}
cout << "\n" << "Нумерация строк и столбцов идёт с нуля. \n";
_getch();
}
И исправленный псевдокод:
1.Алгоритм arrayElem:
Input: Двухмерный массив A, содержащий n2 вещественных чисел
Output: Элемент A[j], который является максимальным в i-той строке и минимальным в j-том столбце.
1.Начало
2.i, j
3.A[1…n][1…n], maxstr, minstolb, M1[1…n], M2[1…n]
4.for i = 0; i < n; i ++
5.maxstr = -5000, minstolb = 5000
6.for j = 0; j < n; j ++
7.if A[j] >= maxstr
8.maxstr = A[j]
9.if A[j] <= minstolb
10.minstolb = A[j]
11.M1 = maxstr
12.M2 = minstolb
13.for i = 0; i < n; i ++
14.for j = 0; j < n; j ++
15.if M1 == M2[j]
16.cout << M1
17.Конец
Короче, не получается сюда отправить весь код, часть символов пропадает: ( Спасибо всем, вроде посчитала кол-во операций с грехом пополам:)