- •Цель работы.
- •Задание.
- •1. Реализуем алгоритм «быстрой» сортировки (по возрастанию) для вектора исходных данных s(7) в программе Matlab;
- •Листинг результатов:
- •Elapsed time is 0.037977 seconds.
- •1.1 Модифицируем программу:
- •2. Определим зависимость количество вызовов функции quicksort для векторов s(80), s(100), s(150), s(200), s(250). Построим график зависимости:
- •3. Для векторов s(104), s(105), s(106), s(107) зафиксируем время выполнения программы (наибольшее из 20 прогонов программы) и соответствующее ему количество вызовов функции quicksort:
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
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
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.
Построим график зависимости:
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);
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.
4. Составим в Excel таблицу из четырех строк (i=1, 2, 3, 4), включив столбики с размерностью вектора, временем выполнения сортировки и количеством вызовов функции quicksort:
|
S(n) |
t, c |
cm |
1 |
104 |
0,243428 |
50 |
2 |
105 |
1,161511 |
50 |
3 |
106 |
14,273 |
50 |
4 |
107 |
139,7442 |
50 |
Также, дополнительно построим график для 5 первых векторов:
-
S(n)
t, c
cm
1
80
0,048272
38
2
100
0,054458
42
3
150
0,063415
46
4
200
0,075983
49
5
250
0,092237
50
5. Рассчитаем коэффициенты: KN=Nj/Ni, Kt=tj/ti для комбинаций i-i (1-2, 1-3, 1-4). Установим закономерность изменения времени сортировки от изменения размерности вектора (Kt ~ KN):
i-j |
KN |
Kt |
1-2 |
10 |
4,8 |
1-3 |
100 |
58,6 |
1-4 |
1000 |
574,1 |
Вывод.
В ходе данной лабораторной работы был изучен алгоритм быстрой сортировки (quicksort). Был построен график зависимости количества вызовов функции quicksort от значения вектора. Было определено, что при малой размерности вектора быстрая сортировка происходит примерно в одном временном диапазоне. Однако, начиная со значения 104 время выполнения сортировки начинает увеличиваться. При этом, сравнивая коэффициенты Kt и KN, можно понять, что с увеличением размерности вектора время сортировки линейно увеличивается. Также, было определено, что при увеличении значения вектора количество вызовов функции увеличивается, но начиная со значения 104 становится равным 50.
