
Лабы 2 Семестр / 0207 Маликов БИ Лабораторная работа №4
..pdf
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Санкт-Петербургский государственный электротехнический университет "ЛЭТИ"
Факультет электроники Кафедра радиотехнической электроники
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к лабораторной работе №4 по дисциплине "Информационные технологии"
Доцент, к.т.н. |
И.А. Рябцев |
Студент гр.0207 |
Б.И. Маликов |
Санкт-Петербург
2021

Цель работы.
Изучение и программирование стандартного алгоритма «быстрой сортировки».
Задание.
Задан алгоритм сортировки выбором и вектор исходных данных S(n):
1.Реализовать алгоритм «быстрой» сортировки (по возрастанию) для вектора исходных данных S(7) в программе Matlab;
2.Вставить комментарии к операторам программы;
2
3.Вставить в программу стандартные функции tic, toc для оценки времени решения задачи;
4.Проверить программу Matlab на векторе исходных данных;
5.Определить количество вызовов функции quicksort, используя глобальный счетчик (сm);.
6.Получить листинг отсортированного вектора S(7);
7.Модифицировать программу Matlab, задав исходный вектор S(50). Для этого использовать функции rand и fix: s=fix(50*rand ([1 50])); выключить в отчет количество вызовов функции quicksort;
8.Определить зависимость количество вызовов функции quicksort для векторов S(80), S(100), S(150), S(200), S(250). Построить график зависимости;
9.Для векторов S(104), S(105), S(106), S(107) зафиксировать время выполнения программы (наибольшее из 20 прогонов программы) и соответствующее ему количество вызовов функции quicksort;
10.Составить в Excel таблицу из четырех строк (i=1, 2, 3, 4), включив столбики с размерностью вектора, временем выполнения сортировки и количеством вызовов функции quicksort.;
11.Рассчитать коэффициенты: KN=Nj/Ni, Kt=tj/ti для комбинаций i-i (1-2, 1- 3, 1-4). Установить закономерность изменения времени сортировки от изменения размерности вектора (Kt ~ KN);
12.Оформить отчет, включив в него тексты программ Matlab, листинг отсортированного вектора S(7), таблицу времени выполнения от размерности вектора, таблицу с коэффициентами KN, Kt,;
13.В выводы включить закономерность изменения времени сортировки от изменения размерности вектора (Kt ~ KN) и закономерность изменения количества вызовов функции от размерности векторов;
Выполнение заданий.
1. Реализуем алгоритм «быстрой» сортировки (по возрастанию) для вектора исходных данных S(7) в программе Matlab;
Алгоритм быстрой сортировки:
function[vector]=quicksort(vector)
if ~isempty(vector)%накладываем условие global cm;
3
cm=cm+1; %количество возовов команды pivot=vector(1); %фиксированный опорный элемент
A1=quicksort(vector(vector<pivot)); %определяем границы A2=vector(vector==pivot); A3=quicksort(vector(vector>pivot));
vector=[A1 A2 A3]; %вывод end
end
Реализация алгоритма:
clear all; %удалим все переменные из текущей рабочей области clc;
global cm;%начальные условия cm=0;
N=7; %значение количества элементов массива s=[10 8 3 28 11 4 1]; %сам массив tic; %начало отсчета времени
y=quicksort(s); %алгоритм быстрой сортировки disp(s); %вывод исходного массива
disp(y); %вывод результата сортировки disp (cm);
toc; %конец отсчета времени
Листинг результатов:
10 |
8 |
3 |
28 |
11 |
4 |
1 |
1 |
3 |
4 |
8 |
10 |
11 |
28 |
7 |
|
|
|
|
|
|
Elapsed time is 0.037977 seconds.
1.1 Модифицируем программу:
function[vector]=quicksort(vector) if ~isempty(vector)
global cm; cm=cm+1; pivot=vector(1);
A1=quicksort(vector(vector<pivot));
A2=vector(vector==pivot);
A3=quicksort(vector(vector>pivot)); vector=[A1 A2 A3];
end end
clear all; clc;
4
global cm; cm=0; N=50; M=0;
s=fix(50*rand ([1 50])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
Columns 1 through 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
21 |
45 |
9 |
13 |
7 |
|
6 |
43 |
28 |
27 |
7 |
42 |
31 |
17 |
|
25 |
20 |
3 |
11 |
|
6 |
|
9 |
11 |
||||
Columns 21 through 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
20 |
2 |
45 |
47 |
24 |
|
24 |
16 |
45 |
18 |
|
5 |
39 |
19 |
12 |
20 |
4 |
6 |
47 |
47 |
28 |
2 |
||||||
Columns 41 through 50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
11 |
17 |
41 |
0 |
2 |
|
8 |
32 |
36 |
32 |
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Columns 1 through 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
0 |
2 |
2 |
2 |
3 |
4 |
5 |
6 |
6 |
6 |
7 |
7 |
|
8 |
9 |
|
9 |
11 |
11 |
11 |
|
12 |
|
13 |
|
|
||
Columns 21 through 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
16 |
17 |
17 |
18 |
19 |
|
20 |
20 |
20 |
21 |
|
22 |
|
24 |
24 |
25 |
27 |
28 |
28 |
31 |
32 |
32 |
36 |
|||||
Columns 41 through 50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
39 |
41 |
42 |
43 |
45 |
|
45 |
45 |
47 |
47 |
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Elapsed time is 0.078775 seconds.
5
2. Определим зависимость количество вызовов функции quicksort для векторов S(80), S(100), S(150), S(200), S(250). Построим график зависимости:
1:
clear all; clc; global cm; cm=0; N=80; M=0;
s=fix(50*rand ([1 80])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
Columns 1 through 20
28 |
32 |
44 |
17 |
|
41 |
24 |
16 |
37 |
2 |
3 |
43 |
13 |
37 |
37 |
22 |
24 |
32 |
31 |
40 |
29 |
Columns 21 through 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
44 |
41 |
41 |
7 |
|
21 |
47 |
43 |
11 |
6 |
47 |
20 |
23 |
45 |
23 |
32 |
3 |
28 |
27 |
32 |
49 |
Columns 41 through 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
38 |
33 |
44 |
27 |
|
19 |
48 |
12 |
24 |
11 |
14 |
26 |
19 |
4 |
25 |
47 |
21 |
22 |
13 |
24 |
15 |
Columns 61 through 80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
39 |
2 |
37 |
29 |
|
43 |
21 |
49 |
45 |
23 |
20 |
20 |
5 |
17 |
39 |
41 |
5 |
39 |
22 |
22 |
12 |
Columns 1 through 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
2 |
2 |
3 |
3 |
4 |
5 |
5 |
6 |
7 |
11 |
11 |
12 |
12 |
13 |
13 |
14 |
15 |
16 |
17 |
17 |
|
Columns 21 through 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
19 |
19 |
20 |
20 |
|
20 |
21 |
21 |
21 |
22 |
22 |
22 |
22 |
23 |
23 |
23 |
24 |
24 |
24 |
24 |
25 |
Columns 41 through 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
26 |
27 |
27 |
28 |
|
28 |
29 |
29 |
31 |
32 |
32 |
32 |
32 |
33 |
37 |
37 |
37 |
37 |
38 |
39 |
39 |
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
Columns 61 through 80
39 |
40 |
41 |
41 |
41 |
41 |
43 |
43 |
43 |
44 |
44 |
44 |
45 |
45 |
47 |
47 |
47 |
48 |
49 |
49 |
38
Elapsed time is 0.048272 seconds.
В дальнейших вычислениях будем указывать только значение количества вызовов функции быстрой сортировки и значение занятого на это времени.
2:
clear all; clc; global cm; cm=0; N=100; M=0;
s=fix(50*rand ([1 100])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
42
Elapsed time is 0.054458 seconds.
3:
clear all; clc; global cm; cm=0; N=150; M=0;
s=fix(50*rand ([1 150])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
46
7
Elapsed time is 0.063415 seconds.
4:
clear all; clc; global cm; cm=0; N=200; M=0;
s=fix(50*rand ([1 200])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
49
Elapsed time is 0.075983 seconds.
5:
clear all; clc; global cm; cm=0; N=250; M=0;
s=fix(50*rand ([1 250])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
50
Elapsed time is 0.092237 seconds.
Построим график зависимости:
8

3. Для векторов S(104), S(105), S(106), S(107) зафиксируем время выполнения программы (наибольшее из 20 прогонов программы) и соответствующее ему количество вызовов функции quicksort:
1:
clear all; clc; global cm; cm=0; N=10^4; M=0;
s=fix(50*rand ([1 10^4])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
50
Elapsed time is 0.243428 seconds.
2:
clear all; clc; global cm; cm=0; N=10^5; M=0;
s=fix(50*rand ([1 10^5])); tic; y=quicksort(s); disp(s);
9
disp(y); disp (cm); toc;
Листинг результатов:
50
Elapsed time is 1.161511 seconds.
3:
clear all; clc; global cm; cm=0; N=10^6; M=0;
s=fix(50*rand ([1 10^6])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
50
Elapsed time is 14.273001 seconds.
4:
clear all; clc; global cm; cm=0; N=10^7; M=0;
s=fix(50*rand ([1 10^7])); tic; y=quicksort(s); disp(s);
disp(y); disp (cm); toc;
Листинг результатов:
50
Elapsed time is 139.744213 seconds.
10