
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра безопасности информационных систем (БИС)
АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ Отчет по практической работе №2 по дисциплине «Структуры данных»
Студент гр. 733-1
_______ Сметанников Д.Е
_______
Принял:
преподаватель КИБЭВС
_______ Д.Р. Уразаев
_______
Томск 2024
Задание
Сгенерировать массивы заданной длины.
Последовательно задайте длину массивов 1, 2, 3, 4, 5, 10, 15, 20,25, 30, 40,50, 75, 100,150,200,250, 300, 400, 500, 600, 800, 1000.
Отсортировать все массивы при помощи ранее реализованных алгоритмов сортировки (т.е те, которые реализованы на практике 1) и подсчитать количество операций, выполненных для их сортировки (количество сравнений + количество перестановок) и время затраченное на сортировку массивов.
1.Вывести на графики данные по числу операций, по времени сортировки в зависимости от размера массива (зависимость числа операций от размера массива, зависимость времени выполнения алгоритма от размера массива). Для каждой сортировки сделайте разные графики.
2.На каждый график сортировки с числом операций выведете график эталонных функций: : y=n, y=n*log(n), y=n^2, y=n^3 (зависимость числа операций от размера массива). ТАБЛИЦЫ с замерами числа операций и времени также представьте в отчете.
3.Сделать выводы об алгоритмической сложности каждого алгоритма оценив форму графиков зависимости из пункта 2. Написать текст вывода в отчете.
4.Для каждой рассмотренной сортировки сгенерировать лучший и худший варианты (массивы длиной 100 элементов) и получить значения для них по числу операций и перестановок и времени сортировки. Проделать по 5 экспериментов а каждую сортировку и усреднить значения. Лучший вариант - это уже отсортированный массив. Худший вариант - это отсортированный в обратном направлении массив. Сделать выводы. Результаты представить в таблице.
5.Сформировать отчет с разделами:
2
|
|
Содержание |
|
Задание.................................................................................................................. |
.2 |
1 |
Введение................................................................................................................ |
.4 |
2 |
Ход работы............................................................................................................. |
5 |
|
Заключение........................................................................................................... |
10 |
|
Приложение А...................................................................................................... |
11 |
3
1Введение
Целью данного задания является исследование производительности различных алгоритмов сортировки (быстрой сортировки, сортировки обменом, сортировки расчёской), с учетом их временной сложности и количества операций (сравнений и перестановок), выполняемых при сортировке массивов разной длины.
4

|
|
|
|
2 |
Ход работы |
|
|
Быстрая сортировка: Имеет сложность O(n*logn), что подтверждается |
|||||||
графиком — растёт почти как жёлтая линия. (рис. 1) |
|
||||||
|
12000 |
|
|
|
|
|
|
|
10000 |
|
|
|
|
|
|
операций |
8000 |
|
|
|
|
|
|
6000 |
|
|
|
|
|
Быстрая, Count |
|
|
|
|
|
|
y=n |
||
Число |
4000 |
|
|
|
|
|
y=n*log(n) |
|
|
|
|
|
y=n^2 |
||
|
|
|
|
|
|
|
y=n^3 |
|
2000 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
|
|
|
Размер массива |
|
|
|
Рисунок 1 — Зависимость числа операций от размера массива быстрой сортировки
Сортировка обменом (пузырьковая): Имеет квадратичную сложность O(n^2), что видно по близости к зелёной линии. (рис. 2)
Рисунок 2 — Зависимость числа операций от размера массива сортировки обменом
5

1200000 |
|
|
|
|
|
|
1000000 |
|
|
|
|
|
|
800000 |
|
|
|
|
|
|
|
|
|
|
|
|
Обменом, Count |
600000 |
|
|
|
|
|
y=n |
|
|
|
|
|
y=n*log(n) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y=n^2 |
400000 |
|
|
|
|
|
y=n^3 |
200000 |
|
|
|
|
|
|
0 |
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
Сортировка расческой: Сложность ближе к O(n*logn), но может |
||||||
отклоняться от неё на больших данных. (рис. 3) |
|
|||||
30000 |
|
|
|
|
|
|
25000 |
|
|
|
|
|
|
20000 |
|
|
|
|
|
|
|
|
|
|
|
|
Расческой, Count |
15000 |
|
|
|
|
|
y=n |
|
|
|
|
|
y=n*log(n) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y=n^2 |
10000 |
|
|
|
|
|
y=n^3 |
5000 |
|
|
|
|
|
|
0 |
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
Рисунок 3 — Зависимость числа операций от размера массива сортировки
расческой
6

|
|
Зависимость времени от размера массива |
|||||
|
0,45 |
|
|
|
|
|
|
|
0,4 |
|
|
|
|
|
|
|
0,35 |
|
|
|
|
|
|
|
0,3 |
|
|
|
|
|
|
Время |
0,25 |
|
|
|
|
|
|
0,2 |
|
|
|
|
|
Быстрая, Т |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
0,15 |
|
|
|
|
|
|
|
0,1 |
|
|
|
|
|
|
|
0,05 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
|
|
|
Размер массива |
|
|
|
|
Рисунок 4 — Зависимость времени от размера массива быстрой сортировки |
|||||||
|
|
Зависимость времени от размера массива |
|||||
|
2,5 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
1,5 |
|
|
|
|
|
|
Время |
1 |
|
|
|
|
|
Обменом, Т |
|
|
|
|
|
|
||
|
0,5 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
|
|
|
Размер массива |
|
|
|
Рисунок 5 — Зависимость времени от размера массива сортировки обменом
7

|
|
Зависимость времени от размера массива |
|||||
|
0,16 |
|
|
|
|
|
|
|
0,14 |
|
|
|
|
|
|
|
0,12 |
|
|
|
|
|
|
|
0,1 |
|
|
|
|
|
|
Время |
0,08 |
|
|
|
|
|
Расческой, Т |
|
|
|
|
|
|
||
0,06 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0,04 |
|
|
|
|
|
|
|
0,02 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
200 |
400 |
600 |
800 |
1000 |
1200 |
|
|
|
Размер массива |
|
|
|
Рисунок 6 — Зависимость времени от размера массива сортировки расческой
Алгоритм |
Структура |
Кол-во операций |
Время |
||
|
данных |
|
|
|
|
|
|
|
|
|
|
|
|
В |
В |
В лучшем |
В худшем |
|
|
лучшем |
худшем |
|
|
|
|
|
|
|
|
Сортировка |
Массив |
1471 |
1487 |
0,01 |
0,011 |
расческой |
|
|
|
|
|
|
|
|
|
|
|
Быстрая |
Массив |
252 |
448 |
0,339 |
0,343 |
сортировка |
|
|
|
|
|
|
|
|
|
|
|
Пузырьковая |
Массив |
7108 |
7367 |
0,04 |
0,036 |
сортировка |
|
|
|
|
|
Таблица 1 — Сравнение средних значений алгоритмов
Исходя из данных, представленных в таблице, можно сделать вывод, что в лучшем исходе показания сортировок лучше, в отличие от худшего.
8
В приложении А представлен листинг программы всех сортировок.
9
Заключение
В ходе выполнения практической работы было выявлено, что быстрая сортировка имеет наилучшую производительность O(n*logn)) и эффективна для любых размеров массива. Сортировка обменом O(n^2) крайне неэффективна для больших массивов. Сортировка расческой близка к O(n*logn), но уступает быстрой по скорости.
10