Добавлен: 09.01.2024
Просмотров: 128
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИФедеральное государственное бюджетное образовательное учреждение высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. проф. М. А. Бонч-Бруевича»(СПбГУТ)Факультет Информационных систем и технологийКафедра Безопасности информационных системОтчетПо предмету «Алгоритмы и структуры данных»о практической работе №1:«Разработка алгоритмов и программ обработки массивов данных»Выполнил студент гр. ИСТ-022:Волков Кирилл // // //оценка подпись Проверил: Бородянский Ю.М. // //ПодписьЗадача работыПровести работу по разработке блок-схемы и программы по умножению матриц на языке С++, приобрести навыки и умения анализа алгоритма и всего кода разработанной программы в Big-O-нотации.Блок-схема
Рассчет сложности Big-OСтроки 14 – 22: О(1)+O(1)+O(1)+O(1)+O(1) = O(1)Строки 29– 32: (O(1)+O(1)+O(1))*O(n) = O(n)Строка 28: O(n)*O(n) = O(n^2)Строка 34-38: ((O(1)+O(1)+O(1))*O(n))*O(n) = O(n^2)Строка 41-48: ((O(1)+O(1)+O(1))*O(n))*O(n) = O(n^2)Строка 52-60: (O(1)*O(n))*O(n)Строка 62-68: (((O(1)*O(n))+O(1))*O(n))*O(n) = O(n^3)Строка 70-77: (O(1)*O(n))*O(n) = O(n^2)Ответ: общая сумма сложности O(n^3);ВыводВ результате работы была разработана программа, которая вычисляет произведение двух матриц, заполненных случайными числовыми данными, Мы получили новые знания о языке программирования C++, узнали о генерации случайных чисел. Была проведена работа по анализу программного кода и была вычислена сложность нотации Big-O.Код программы находится в приложение 1.Приложение
1#include
#include
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int a,b,c,d;
cout<<"Введите размер матрицы A -> ";
cin>>a; // O(1);
cin>>b; // O(1);
cout<<"Введите размер матрицы B -> ";
cin>>c; // O(1);
cin>>d; // O(1);
if (b!=c) // O(1);
cout<<"Программа не может выполнить задачу умножения. \nКоличество столбцов первой матрицы не равно количеству строк второй матрицы";
else
{
int matrix1[a][b],matrix2[c][d],matrix3[a][d];
for(int i=0;i
for(int j=0;j
{
matrix1[i][j] = -100 + rand() % 201; // O(max(1,1,1)=O(1)
}
for(int i=0;i
for(int j=0;j
{
matrix2[i][j] = -100 + rand() % 201; //O(max(1,1,1)=O(1)
}
cout<<"Матрица 1:"<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
cout<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
for(int i=0;i
for(int j=0;j
{
matrix3[i][j]=0;
for(int k=0;k
matrix3[i][j]+=(matrix1[i][k]*matrix2[k][j]);
} // O(n^3)
cout<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
}
return 0;
}
Гор. Санкт-Петербург
2021
Рассчет сложности Big-OСтроки 14 – 22: О(1)+O(1)+O(1)+O(1)+O(1) = O(1)Строки 29– 32: (O(1)+O(1)+O(1))*O(n) = O(n)Строка 28: O(n)*O(n) = O(n^2)Строка 34-38: ((O(1)+O(1)+O(1))*O(n))*O(n) = O(n^2)Строка 41-48: ((O(1)+O(1)+O(1))*O(n))*O(n) = O(n^2)Строка 52-60: (O(1)*O(n))*O(n)Строка 62-68: (((O(1)*O(n))+O(1))*O(n))*O(n) = O(n^3)Строка 70-77: (O(1)*O(n))*O(n) = O(n^2)Ответ: общая сумма сложности O(n^3);ВыводВ результате работы была разработана программа, которая вычисляет произведение двух матриц, заполненных случайными числовыми данными, Мы получили новые знания о языке программирования C++, узнали о генерации случайных чисел. Была проведена работа по анализу программного кода и была вычислена сложность нотации Big-O.Код программы находится в приложение 1.Приложение
1#include
#include
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int a,b,c,d;
cout<<"Введите размер матрицы A -> ";
cin>>a; // O(1);
cin>>b; // O(1);
cout<<"Введите размер матрицы B -> ";
cin>>c; // O(1);
cin>>d; // O(1);
if (b!=c) // O(1);
cout<<"Программа не может выполнить задачу умножения. \nКоличество столбцов первой матрицы не равно количеству строк второй матрицы";
else
{
int matrix1[a][b],matrix2[c][d],matrix3[a][d];
for(int i=0;i
for(int j=0;j
{
matrix1[i][j] = -100 + rand() % 201; // O(max(1,1,1)=O(1)
}
for(int i=0;i
for(int j=0;j
{
matrix2[i][j] = -100 + rand() % 201; //O(max(1,1,1)=O(1)
}
cout<<"Матрица 1:"<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
cout<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
for(int i=0;i
for(int j=0;j
{
matrix3[i][j]=0;
for(int k=0;k
matrix3[i][j]+=(matrix1[i][k]*matrix2[k][j]);
} // O(n^3)
cout<
for(int i=0;i
for(int j=0;j
{
if (j == 0)
cout<<"\n";
else
cout<<"\t";
cout<
}
}
return 0;
}
Гор. Санкт-Петербург
2021