Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GrozI_Course_Work

.pdf
Скачиваний:
12
Добавлен:
03.05.2021
Размер:
337.65 Кб
Скачать

20

Для кожного алгоритму , для кожної розмірності даних було проведено по 10 сортувань і взято середній час. Час замірявся за допомогою функції

high_resolution_clock з бібліотеки chrono.

Для запуску програмної реалізації тестування необхідно зробити наступне: 1. Після відкриття проекту , відкрити файл main.cpp

(main.cpp виглядає наступним чином)

2.Ввести ім’я алгоритму сортування ,яке буде відображатися при виконанні програми в змінній name.

2.Ввести ім’я функції , яка викликає потрібний алгоритм сортування варгуменах функції tester. (ім’я всіх функції можна подивитись в файлі – sort_algorithms.h)

2.Скомпілювати та запустити програму.

3.Очікуваний результат виконання програми

21

(Очікуваний результат виконання програми)

22

Тестування

Після тестування всіх алгоритмів було виявлено декілька залежностей деяких тестових даних та алгоритмів повя’язаних з принципами роботи цих алгоритмів. Спершу розглянемо графіки всіх тестів:

1.1. Довільні дані ,I-група

 

 

 

Random data

(I-group)

 

 

0.35

 

 

 

 

 

0.3

 

 

 

 

 

0.25

 

 

 

 

(seconds)

0.2

 

 

 

 

0.15

 

 

 

 

Time

0.1

 

 

 

 

 

 

 

 

 

 

0.05

 

 

 

 

 

0

 

 

 

 

 

10

100

1000

10000

100000

N-elements (array size)

Selection sort Insertion sort Shaker sort Counting sort

Time (seconds)

 

 

 

 

Random data

(I-group)

 

 

 

0.35000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.30000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.25000000

 

 

 

 

 

 

 

 

 

 

 

Selection sort

 

 

 

 

 

 

 

 

 

 

 

0.20000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Insertion sort

 

 

 

 

 

 

 

 

 

 

 

 

0.15000000

 

 

 

 

 

 

 

 

 

 

 

Shaker sort

 

 

 

 

 

 

 

 

 

 

 

0.10000000

 

 

 

 

 

 

 

 

 

 

 

Counting sort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.05000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.00000000

 

 

 

 

 

 

 

 

 

 

 

 

10

100

1000

10000

100000

 

N-elements (array size)

23 Можемо побачити, що insertion sort найшвидший з представлених алгоритмів, (не враховуючи counting sort) для довільних даних. Selection, Insertion, Shaker sorts - алгоритми з квадратичною складнітю. Відповідно, особливих результатів ми не побачимо. Із зростанням кількості даних швидкість квадатично зменшується.

1.2. Довільні дані ,II-група

 

 

 

 

 

 

Random data

(II-group)

 

0.45

 

 

 

 

 

0.4

 

 

 

 

 

0.35

 

 

 

 

 

0.3

 

 

 

 

 

0.25

 

 

 

 

 

0.2

 

 

 

 

 

0.15

 

 

 

 

 

0.1

 

 

 

 

 

0.05

 

 

 

 

 

0

 

 

 

 

 

10

100

1000

10000

100000

1000000

24

Quick sort

Counting sort

Merge sort

Heap sort

Random data (II-group)

0.45000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.40000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.35000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.30000000

 

 

 

 

 

 

 

 

 

 

 

 

Quick sort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.25000000

 

 

 

 

 

 

 

 

 

 

 

 

Counting sort

 

 

 

 

 

 

 

 

 

 

 

 

Merge sort

 

 

 

 

 

 

 

 

 

 

 

 

 

0.20000000

 

 

 

 

 

 

 

 

 

 

 

 

Heap sort

 

 

 

 

 

 

 

 

 

 

 

 

0.15000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.10000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.05000000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.00000000

 

 

 

 

 

 

 

 

 

 

 

 

 

10

100

1000

10000

100000

1000000

 

25

В другу групу входять Quick, Counting, Merge, Heap sorts. Heap sort показав гірші результати ніж інші алгоритми групи. Quick sort в свою чергу швидкий та стабільний алгоритм . Counting sort працює за лінійний час, майже незалежно від кількості даних він юуде працювати майже однаково. Це погано якщо на сортування подається мало даних, але як можна побачити на графіку ,всже післе 100000 елементів Counting sort показує гарну швидкість яка буда доречна при великих об’ємах даних.

2.1. Реверсивно відсортовані дані, I-група

 

 

 

Reversed data

(I-group)

 

 

50

 

 

 

 

 

45

 

 

 

 

 

40

 

 

 

 

(seconds)

35

 

 

 

 

30

 

 

 

 

25

 

 

 

 

20

 

 

 

 

Time

 

 

 

 

15

 

 

 

 

 

10

 

 

 

 

 

5

 

 

 

 

 

0

 

 

 

 

 

10

100

1000

10000

100000

N-elements (array size)

Selection sort Insertion sort Shaker sort Counting sort

Time (seconds)

Reversed data (I-group)

50

45

40

35

30

25

20

15

10

5

0

10

100

1000

10000

100000

Selection sort

Insertion sort

Shaker sort Counting sort

N-elements (array size)

Можему бачити таку саму картину.

 

 

 

2.2. Реверсивно відсортовані дані, II-група

 

 

 

 

Reversed data

(II-group)

 

0.4

 

 

 

 

 

0.35

 

 

 

 

 

0.3

 

 

 

 

 

0.25

 

 

 

 

 

0.2

 

 

 

 

 

0.15

 

 

 

 

 

0.1

 

 

 

 

 

0.05

 

 

 

 

 

0

 

 

 

 

 

10

100

1000

10000

100000

1000000

26

Quick sort

Counting sort

Merge sort

Heap sort

 

Reversed data

(II-group)

0.4

 

 

 

 

 

 

0.35

 

 

 

 

 

 

0.3

 

 

Quick sort

 

 

0.25

 

 

 

 

Counting sort

 

 

 

0.2

 

 

Merge sort

 

 

 

 

 

Heap sort

0.15

0.1

0.05

0

10

100

1000

10000

100000

1000000

Майже ніякої різниці.

3.1. Частково відсортовані дані, I-група

Half-sorted data (I-group)

 

0.35

 

 

 

 

 

 

 

0.3

 

 

 

 

 

 

 

0.25

 

 

 

 

 

 

(seconds)

0.2

 

 

 

 

 

 

0.15

 

 

 

 

 

 

Time

0.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.05

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

20000

40000

60000

80000

100000

120000

N-elements (array size)

27

Selection sort

Shaker sort

Counting sort

Time (seconds)

Half-sorted data (I-group)

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0

10

100

1000

10000

100000

Selection sort

Insertion sort

Shaker sort Counting sort

N-elements (array size)

28

На частково відсортованих даних для даних сортувань можемо бачити схожі результати, але шейкерне сортування сповільнилось, а сортування вставками на його фоні трохи збільшило швидкість сортування. Досить зрозуміла повеінка. 3.2. Частково відсортовані дані, II-група

Half-sorted data (II-group)

0.4

 

 

 

 

 

0.35

 

 

 

 

 

0.3

 

 

 

 

 

0.25

 

 

 

 

 

0.2

 

 

 

 

 

0.15

 

 

 

 

 

0.1

 

 

 

 

 

0.05

 

 

 

 

 

0

 

 

 

 

 

10

100

1000

10000

100000

1000000

Quick sort Counting sort Merge sort Heap sort

 

 

 

 

 

 

Half-sorted data

(II-group)

 

 

 

0.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.35

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.3

 

 

 

 

 

 

 

 

 

 

 

 

 

Quick sort

 

 

 

 

 

 

 

 

 

 

 

 

 

0.25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Counting sort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

 

 

 

Merge sort

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Heap sort

0.15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.05

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

100

1000

10000

100000

1000000

 

Нічого незвичайного

4.1. Відсортовані дані, I-група

Sorted data (I-group)

 

0.25

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

(seconds)

0.15

 

 

 

 

 

 

0.1

 

 

 

 

 

 

Time

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.05

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

20000

40000

60000

80000

100000

120000

N-elements (array size)

29

Selection sort

Shaker sort

Counting sort

Time (seconds)

Sorted data (I-group)

0.25

0.2

0.15

0.1

0.05

0

10

100

1000

10000

100000

Selection sort Series1

Shaker sort Counting sort

N-elements (array size)

Соседние файлы в предмете Объектно ориентированное программирование