Добавил:
Адепт твердотельной электроники, последователь учений Михайлова Н.И. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы 2 Семестр / 0207 Маликов БИ Лабораторная работа №4.doc
Скачиваний:
1
Добавлен:
18.06.2024
Размер:
169.98 Кб
Скачать

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.

11