Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Дослідження алгоритму сортування

Автор:   •  Февраль 27, 2020  •  Лабораторная работа  •  1,321 Слов (6 Страниц)  •  452 Просмотры

Страница 1 из 6

Міністерство освіти та науки України

Вінницький національний технічний університет

Кафедра комп’ютерних наук

Лабораторна робота №4

З дисципліни: “Теорія алгоритмів”

Тема: “Дослідження алгоритму сортування ”

 

Виконав студент групи 1КН-19б:

Попіль Р.В.

Перевірив викладач:

Арсенюк І.Р.

Вінниця – 2019

Тема: Дослідження та аналіз алгоритмів сортування за лінійний час.

Мета: Ознайомитись з алгоритмами сортування за лінійний час, на прикладі алгоритму сортування вичерпуванням. Вивчити його структуру, зрозуміти принцип дії та поглибити свої знання з теми різних типів сортування.

Ідея алгоритму

Алгоритм сортування вичерпуванням (bucket sort) працює за лінійний середній час. Як і сортування підраховуванням, сортування вичерпуванням застосовується не для будь-яких вихідних даних: вказуючи на лінійний середній час, ми припускаємо, що на вхід подається послідовність незалежних випадкових чисел, рівномірно розподілених на проміжку [0,1]. Ідея алгоритму полягає в тому, що проміжок [0,1] поділяється на n рівних частин, після чого для чисел з кожної частини виділяється свій ящик-черпак (bucket), і n чисел, що підлягають сортуванню, розкладаються по цих ящиках. Оскільки числа рівномірно розподілені на проміжку [0,1], варто очікувати, що в кожному ящику їх буде небагато.

Принцип роботи

Тепер відсортуємо числа в кожному ящику окремо й пройдемося по ящиках у порядку зростання, виписуючи числа, що потрапили в кожний з них, також у порядку зростання. Будемо вважати, що на вхід подається n-елементний масив А, причому 0 ≤ А[i]<1 для всіх i. Використовується також допоміжний масив В[0.. n-1], що складається зі списків, що відповідають ящикам. Алгоритм використовує операції зі списками.

 Псевдокод даного алгоритму матиме вигляд:[pic 1]

Щоб довести, що алгоритм сортування вичерпуванням правильний, розглянемо два числа А[i] та A[j]. Якщо вони потрапили в різні ящики, то менше з них потрапило в ящик з меншим номером, і у вихідній послідовності воно виявиться раніше; якщо вони потрапили в один ящик, то після сортування вмісту ящика менше число буде також передувати більшому.

Аналіз складності алгоритму

Проаналізуємо час роботи алгоритму. Операції у всіх рядках, крім п'ятого, потребують загального часу O(n). Перегляд всіх ящиків також забирає час O(n). Таким чином, нам залишається тільки оцінити час сортування вставками всередині ящиків.  Нехай у ящик В[i] потрапило ni чисел (ni – випадкова величина). Оскільки сортування вставками працює за квадратичний час, математичне очікування часу сортування чисел у ящику номер i має значення O(М[ni2]), а математичне очікування сумарного часу сортування у всіх ящиках має значення

[pic 2]

Знайдемо функцію розподілу випадкових величин ni. Оскільки числа розподілені рівномірно, а довжини всіх відрізків рівні, ймовірність того, що дане число потрапить у ящик номер і, дорівнює 1/n. Отже, ми перебуваємо в відомій ситуації з кулями й урнами: у нас n куль-чисел, n урн-ящиків, і ймовірність влучення даної кулі в дану урну дорівнює  

[pic 3]

Підставляючи цю оцінку в (3.11), одержуємо, що математичне очікування сумарного часу сортування вмісту всіх ящиків має значення O(n), так що математичне очікування часу роботи алгоритму сортування вичерпуванням справді лінійно залежить від кількості чисел. У найгіршому випадку швидкодія буде О(n^2)

Приклад роботи алгоритму:[pic 4]

На рис. 3.23 показано роботу цього алгоритму на прикладі масиву з 10 чисел.  

#include

#include

#include

#include

#include

#include

using namespace std;

static void BucketSort(int* data, int count) {

        int minValue = data[0];

        int maxValue = data[0];

        for (int i = 1; i < count; i++)

        {

                if (data[i] > maxValue)

                        maxValue = data[i];

                if (data[i] < minValue)

...

Скачать:   txt (10.2 Kb)   pdf (217.6 Kb)   docx (69.5 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club