Professional Documents
Culture Documents
Ta Laba11
Ta Laba11
Звіт
з лабораторної роботи № 11
Варіант №3
Виконали:
Поліщук Дарія
Вінницький Артем
Заскалета Богдан
Перевірив:
Дорошенко К.С.
Київ 2023
Лабораторна робота №11
Абстрактні типи даних
Мета роботи: Дослідження та порівняння алгоритмів
сортування.
Завдання: Головнокомандувач армії вирішив провести ревізію
флоту. Для цього штаб повинен скласти впорядкований за
кількістю матросів список кораблів кожної армади та всього
флоту. І з’ясувалося, що флот є великим. Альянс сусідніх держав
теж вирішив провести ревізію, і під час складання
впорядкованого списку виявилося багато суден з однаковою
кількістю матросів. Допоможіть скласти штабам відповідні
списки
Постановка задачі
Умова нашої задачі потребувала реалізації заповнення та
сортування списків кораблів. Для сортування мали використати
методи бульбашкового сортування і швидкого сортування. Ці
методи потрібно застосувати для сортування різних видів даних:
хаотичних, частково впорядкованих та з багатьма повторами. Для
кожного з типів даних треба було провести порівняння
ефективності цих двох алгоритмів, побудувати відповідні
графіки.
Побудова моделі
Створена програма здійснює сортування кораблів та відображає
час роботи заданих умовою методів сортування в залежності від
типів даних та кількості даних. Після закінчення сортування та
оцінки використаного часу програма повертає відсортований
масив.
Основні та Тип змінної Призначення
допоміжні змінні
q int Випадковий
(головний) елемент
в списку
Сортування злиттям
Плавне сортування
Швидке сортування
Найкращий+середній випадки - O(n*log n), найгірший - O(n^2)
Плавне сортування
Як і пірамідальне сортування, плавне сортування в найгіршому
випадку має швидкодію О(n log n). Перевагою плавного
сортування є те, що його швидкодія наближається до O(n), якщо
вхідні дані частково відсортовано, в той час як швидкодія
пірамідального сортування є незмінною та не залежить від стану
вхідних даних.
Швидке сортування
Хаотичні дані:
Контрольні питання
1.Перерахуйте та прокоментуйте переваги та недоліки
швидкого сортування.
Швидке сортування (QuickSort) є одним з найпоширеніших
алгоритмів сортування. Ось переваги та недоліки швидкого
сортування:
Переваги:
- Швидкість: Швидке сортування - один з найшвидших
алгоритмів сортування в середньому. Його часова складність
O(n*logn), що робить його ефективним для обробки великих
об'ємів даних.
- Рекурсивний алгоритм: Швидке сортування реалізовано як
рекурсивний алгоритм, що дозволяє легко розуміти та
реалізовувати.
- Легко змінити: Швидке сортування дуже легко змінювати та
адаптувати для різних типів даних та вимог.
- Ін-Place: Швидке сортування виконується на місці (in-place),
тобто він не потребує додаткової пам'яті для зберігання даних.
Недоліки:
- Не стабільний: Швидке сортування не є стабільним алгоритмом,
що означає, що порядок елементів з однаковим значенням може
бути змінений.
- Не ефективний в найгіршому випадку: Найгірший випадок для
швидкого сортування відбувається тоді, коли вхідний масив вже
відсортований або майже відсортований. У такому випадку,
часова складність може бути O(n^2), що робить його менш
ефективним, ніж інші алгоритми сортування.
- Вимагає стека: Швидке сортування використовує рекурсію, що
може призвести до переповнення стека, якщо оброблюється дуже
великий масив.
- Недостатньо безпечний: Якщо програміст не виконує перевірок
на вхідні дані, то це може привести до помилок виконання, таких
як вихід за межі масиву.
Загалом, швидке сортування є ефективним та швидким
алгоритмом сортування, що добре підходить для багатьох
застосувань. Однак, він має деякі недоліки, такі як нестабільність
та неефективність в найгіршому випадку, які необхідно
враховувати при виборі алгоритму сортування для конкретної
задачі.
Переваги:
- Стабільність: Сортування злиттям є стабільним алгоритмом
сортування, що означає, що порядок елементів з однаковим
значенням не змінюється під час сортування.
- Ефективність: Сортування злиттям має часову складність
O(nlogn), що робить його ефективним для сортування великих
масивів даних.
- Легкість реалізації: Сортування злиттям є легким для реалізації
та розуміння, що робить його популярним серед програмістів.
Недоліки:
- Вимагає додаткової пам'яті: Сортування злиттям потребує
додаткової пам'яті для зберігання тимчасових даних під час
злиття підмасивів. Це може бути проблемою для дуже великих
масивів даних.
- Не ін-плейс сортування: Сортування злиттям не є ін-плейс
сортуванням, тобто воно не може сортувати дані на місці, а
потребує додаткової пам'яті для зберігання відсортованого
масиву.
- Спеціальні випадки: Сортування злиттям може вимагати
спеціальної обробки для випадків, коли масив містить велику
кількість повторюваних значень або відсортований майже
повністю.
2. Стабільність:
- Швидке сортування: Залежно від реалізації, може бути як
стабільним, так і нестабільним. Деякі реалізації можуть зберігати
порядок рівних елементів, але інші - ні.
- Сортування злиттям: Це стабільний алгоритм сортування,
який зберігає порядок рівних елементів.
5. Рекурсивний підхід:
- Швидке сортування: Швидке сортування використовує
рекурсивний підхід, що може викликати перевищення обмеження
стеку для великих наборів даних.
- Сортування злиттям: Сортування злиттям використовує
рекурсивний підхід, але його глибина рекурсії зазвичай обмежена
до O(log n), що робить його безпечнішим для великих наборів
даних.
1. Часова складність:
- Пірамідальне сортування: Часова складність становить O(n log
n) у всіх випадках, де n - кількість елементів. Воно гарантує
ефективну роботу незалежно від властивостей вхідних даних.
- Сортування злиттям: Часова складність також складає O(n log
n) у всіх випадках. Воно також гарантує ефективну роботу
незалежно від властивостей вхідних даних.
2. Стабільність:
- Пірамідальне сортування: В основному не є стабільним,
оскільки порядок рівних елементів під час сортування може бути
зміненим.
- Сортування злиттям: Сортування злиттям є стабільним
алгоритмом, який зберігає порядок рівних елементів.
4. Поганий кеш-доступ:
- Пірамідальне сортування: Може мати поганий кеш-доступ
через несистематичний доступ до елементів піраміди.
- Сортування злиттям: Отже, сортування злиттям має кращий
кеш-доступ, оскільки елементи зчитуються послідовно.
5. Гнучкість:
- Пірамідальне сортування: Застосовується до масивів та інших
джерел даних і не потребує додаткового простору для