Добавил:
Адепт твердотельной электроники, последователь учений Михайлова Н.И. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы 2 Семестр / 0207 Маликов БИ Лабораторная работа №4

..pdf
Скачиваний:
2
Добавлен:
18.06.2024
Размер:
711.97 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Санкт-Петербургский государственный электротехнический университет "ЛЭТИ"

Факультет электроники Кафедра радиотехнической электроники

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к лабораторной работе №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