Вы находитесь на странице: 1из 11

Федеральное государственное бюджетное образовательное учреждение

высшего образования
«Российский технологический университет – МИРЭА»

Кафедра КБ-3 «Управление и моделирование систем»

Отчет о выполнении
лабораторной работы №1 по предмету
«Анализ сложности алгоритмов».
Тема: «Математические основы О-символики».

Выполнил:
студент __ курса,
группы_____
№ студ. билета _____
__________________________
(ф.и.о.)

Проверил: ________________

Москва 2020
Вариант №___

Задание:

По экспериментальным данным T(N) замеров времени выполнения (числа


фактически выполненных инструкций) некоторой программы эмпирически
определить характер функции роста трудоемкости реализованного
алгоритма, вид и значения её асимптотической оценки Θ(N), O(N), o(N),
Q(N), ω(N), предложить и реализовать пример программы, трудоемкость
которой соответствует полученным эмпирическим оценкам. Для чего
необходимо:
1. По полученному ряду T(N) построить график зависимости T(N) от N;
2. Выдвинуть гипотезу о характере функции роста (классе эффективности,
виде полинома функции роста) f(N) и определить вид функций
асимптотических оценок Θ(f(N)), O(f(N)), o(f(N)), Ω(f(N)), ω(f(N));
3. На график T(N) наложить графики предложенных Θ(f(N)), O(f(N)), o(f(N)),
Ω(f(N)), ω(f(N)), вычислив численно каждую из них в точках N={1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 20, 30, 50, 100, 500} и определить соответствующие константы с
и n0 для каждой функции, согласно их определениям в теории О-символики;
4. На основе предложенного полинома f(N) предложить структуру (с смысле
парадигмы структурного программирования) фрагмента программы,
соответствующего полиному f(N) и написать программу, реализующую
данную структуру операторов, внутри которого некоторый счетчик (для
определенности назовем его N_op), увеличиваясь при каждой итерации на
единицу, моделирует выполнение одной инструкции. Определить и вывести
значение счетчика N_op после выполнения всего фрагмента программы
(управляющей конструкции) для каждого значения N. Выполнить и занести в
отчет о лабораторной работе значение счетчика для каждого N={1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 20, 30, 50, 100, 500}, то есть получить ряд N_op(N).
5. Оформить отчет о выполнении лабораторной работы, где указать:
- задание и номер варианта задания, предполагаемый вид полинома функции
роста f(N), и соответствующие ей Θ(f(N)), O(f(N)), o(f(N)), Ω(f(N)), ω(f(N));
- единую таблицу с исходными значениями T(N) и расчетными значениями
f(N), Θ(f(N)), O(f(N)), o(f(N)), Ω(f(N)), ω(f(N)) (столбцы - значения N, а строки -
значения функций);
- графики функций на едином рисунке;
- листинг программы, соответствующей предложенной функции роста;
- на втором рисунке-графике привести зависимости T(N), c·f(N), N_op(N),
постараться обеспечить единство масштаба при помощи константы cN_op.

N 1 2 3 4 5 6 7 8 9 10 20 30 50 100 500

T(N) 13 45 154 265 443 822 1205 1430 1610 2593 10264 31507 98381 427791 12571521

2
3
Полученные результаты работы:

Предполагаемый вид полинома функции роста f(n), и соответствующие ей


Θ(f(n)), O(f(n)), o(f(n)), Ω(f(n)), ω(f(n)):

4
5
Таблица:

n T(n) c1*f(n) c2*f(n) O(f(n)) Ω(f(n)) o(f(n)) ω(f(n)) c1 c2 N_op(n)


1 13 0 0 51 13 51 1 1 2,03 0
2 45 25 50,75 204 52 408 2 1 2,03 25
3 154 100 203 459 117 1377 3 1 2,03 100
4 265 225 456,75 816 208 3264 4 1 2,03 225
5 443 400 812 1275 325 6375 5 1 2,03 400
6 822 625 1268,75 1836 468 11016 6 1 2,03 625
7 1205 900 1827 2499 637 17493 7 1 2,03 900
8 1430 1225 2486,75 3264 832 26112 8 1 2,03 1225
9 1610 1600 3248 4131 1053 37179 9 1 2,03 1600
10 2593 2025 4110,75 5100 1300 51000 10 1 2,03 2025
20 10264 9025 18320,75 20400 5200 408000 20 1 2,03 9025
30 31507 21025 42680,75 45900 11700 1377000 30 1 2,03 21025
50 98381 60025 121850,8 127500 32500 6375000 50 1 2,03 60025
100 427791 245025 497400,8 510000 130000 51000000 100 1 2,03 245025
500 12571521 6225025 12636801 12750000 3250000 6375000000 500 1 2,03 6225025
Графики:

6
Программа (вариант А), соответствующая предложенной
функции роста:

var i,j,k,n:integer;
schet:longint;
begin

write('Vvedite n -> ');


readln(n);

schet:=0;
for i:=1 to n do begin
for j:=1 to 25 do
for k:=1 to (n-2) do
schet:=schet+1;
end;

schet:=schet+25;

writeln('ZNACHENIE SCHETCHIKA ---->>> ',schet);


readln;
end
.Графики:

7
8
Программа (вариант В), соответствующая предложенной
функции роста:

var i,j,n:integer;
schet:longint;
begin

write('Vvedite n -> ');


readln(n);

schet:=0;
for i:=1 to n do begin
for j:=1 to (n-2) do
schet:=schet+25;
end;

schet:=schet+25;

writeln('ZNACHENIE SCHETCHIKA ---->>> ',schet);


readln;
end.
.Графики:

9
10
Программа (вариант С), соответствующая предложенной
функции роста:

var i,j,k,n:integer;
schet:longint;
begin

write('Vvedite n -> ');


readln(n);

schet:=0;
for i:=1 to 25 do begin
for j:=1 to (n-1) do
for k:=1 to (n-1) do
schet:=schet+1;
end;

writeln('ZNACHENIE SCHETCHIKA ---->>> ',schet);


readln;
end.
.Графики:

11

Оценить