Кэ
Кэт

Определение числа операций в зависимости от размера исходных данных на основе описания алгоритма

В общем, мне нужно на основе описания алгоритма вывести формулу определения числа операций в зависимости от размерности исходных данных.

Само задание к коду: В данном двухмерном массиве 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.Конец

Короче, не получается сюда отправить весь код, часть символов пропадает: ( Спасибо всем, вроде посчитала кол-во операций с грехом пополам:)

Дмитрий Гусев
Дмитрий Гусев

как-как.. .
если лень учебник по вычислительной сложности открывать - фиксируешь n, считаешь кол-во операций.
берешь другое n. считаешь.
и т. д. , пока в общем виде оценить не сможешь.
индукция, так сказать.

АА
Александр Антошин

Этот псевдокод неоднозначный. И вообще псевдокод нужен, чтобы не заморачиваться ограничениями языков программирования, а не для того, чтобы повторять их конструкции. И, кстати, даже если прояснить, что там и как, все равно работать не будет.
А определяют очень просто: считают. Две операции подряд - сложить. Цикл - умножить на длину цикла. Развилка - определяют для лучшего и худшего случая.

КН
Константин Носачев

В данном псевдокоде отсутствуют логические скобки, да и часть самого псевдокода тоже. Поэтому берусь определить только сложнось алгоритма. Судя вот по этому:

for i = 0; i < n; i ++
for j = 0; j < n; j ++

O(n)=n^2

Похожие вопросы
Составить следующий алгоритм. видите число. если даное число отр, то умн. ево на 10,если полож то отнимите от него 3
Дано двузначное число. Вывести число, полученное при перестановке цифр исходного числа. ПОМОГИТЕ В языке Pascal!!!!
Дано целое число Х и натуральное число Nя . Составить алгоритм вычесления Х ( в степени N) . Проверить алгоритм трассиров
нужен алгоритм. описание внутри.
Не существует алгоритма для определения факта того что первое число больше второго?
Решите задачу с помощью циклического алгоритма? Даны целые числа K и N. Вывести N раз число K.
Помогите с заданием по С++.Дано трехзначное число. Вывести число, полученное при прочтении исходного числа справа налев
составить алгоритм проверки числа на отчетность. составить алгоритм проверки числа на отчетность
Ну откуда брать исходные данные для точного алгоритма расчёта энтропии?
Написать программу для определения количества цифр в данных числах. C++