Istrazivacki Rad Treci

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

Истраживачки рад у машинству

Научни рад

Никола Николић 1 Алгоритми за сортирање различито уређених


података

Rezime: Научни рад се бави темом избора алгоритама за


сортирање у различито уређеним подацима.Дато је
понашање најпознатијих алгоритама за уређење
података при насумично генерисаним елементима,
делимиччно и обрнуто уређеним елементима.На крају
истраживања дате су информације битне при избору
алгоритма за сортирање.Биће приказана времена
потребна за извршашвање операције сортирања, као и
поређења и понашања алгоритама за различито уређене
низове.
Кључне речи: Алгоритам , Сортирање , Перформансе ,
Selection sort , Quick sort

1. Uvod података.Поред проблема обимности


података које треба сортирати битна и
урећеност међу њима.Да ли се ради о
Како би се утврдила ефикасност и
обрнуто урећеним низовима, делимично
брзина неких од најпознатијих
уређеним или о насумично урећеним
алгоритама, потребно је спровести
подацима.Још један од проблема који се
истраживање које би за циљ имало
јављају када је потребно сортирати
добијање информација тј.
велики број података јесте и меморијски
карактеристика о самом
простор.Алгоритми са много
алгоритму.Подаци у пракси долазе
компарација нису ефикасни и
уређени према различитим
оптерећују меморију.
критеријумима.Битно је познавати у ком
облику долазе подаци како би се изабрао Истраживањем у овом раду се жели
вањани алгоритам.То заправо значи да показати понашање познатих
ефикасност алгоритма може у многоме алгоритама у свету програмирања, за
зависити од саме уређености података скупове различите уређености.Тиме би
које треба алгоритам сортирати.Зато је смо помогли при избору истих.Биће
важно испитати најпознатије алгоритме приказани резултати извршавања
над различито уређеним подацима. сортирања поређани у табели, са
временом извршавања уређења података
Погрешно одабрани алгоритми могу
по одређеном критеријуму.
смањити ефикасност сортирања, а
посебно када се ради о великим Истраживање ће се спровести кроз три
количинама информација.Посебан различито урећена низа од 10 000
значај се придаје овој теми тј. избору чланова.Подаци ће бити генерисани
алгоритама када постоји велики број тако да прву групу чине насумично
података које треба сортирати, зато је генерисани подаци организовани
потребно испитати како се понаша низ.Ово значи да се тестни подаци
одрећени алгоритам за велики број налазе у низу на свим позицијама и могу

Student: Никола Николић, broj indeksa: 378/2018, email: nikola.nikkolic@gmail.com

1
бити на било ком индексу.Друга група су од осталих тек за велики обим
података биће смештена у низ тако ће података.Због тога се време извршавања
подаци бити обрнуто сортирани од изажава бројем операција који
жељеног сотирања (од већег ка функционално зависи од величиине
мањем).Трећа група података је ппроблема, априликом поређења се
организована у низу тако да је низ у разматра асимптотско понашање ових
великој мери сортиран тј. биће функција.Испитивањем описаних
потребноо да алгоритми које тестирамо алгоритама утврђене су перформансе за
пронађу индексе „залуталих“ података карактеристичне случајеве. Најтеже је
,у низу на своје место, према утврђеном утврдити особине Shell sort-а, јер је
правилу.Све три групе података биће његову сложеност најтеже утврдити.
тестиране на следећим алгоритмима : Међутим, показно је да временска
bubble sort, selection sort, insertion sort, сложеност за одговарајућу секвенцу
quick sort, merge sort и shell инкремената може апроксимирати.
sort.Побијеним подацима се жели
Експериментално је доказано да овај
утврдити брзина извршавања сортирања
за различито урећене скупове и доказати метод може имати сложеност О(𝑛1.5 ),
појава да се одрећени алгоритам боље што је побољшање у односу на
понаша за одређени скуп у односу на директно уметање, али и даље не
алгоритам који има боље перформансе представља довољно малу сложеност.
за неку другу врсту урећења података. Што се тиче Selection сорт-а, његова
сложеност није променљива и износи
О(𝑛2 ), јер се алгоритам увек одвија у
2. Преглед литературе
n-1 корака. Овај алгоритам је погодан за
врло мало n на коме показује најбоље
Анализа алгоритама је област резултате, док за веће листе је ова
рачунарских наука која проучава
перформансе алгоритама, посебно сложеност неприхватљива.(Сарановац и
времена извршавања и меморијске Рајковић, 2014).Алгоритам quick sort не
захтеве.Представља важан део теорије захтева додатну меморију, само nlog(n)
сложености,која даје теоријске оцене операција у просеку за сортирање n
ресурса који су потребнин било ком елемената, и има изузетно кратку
алгоритму који решава посматрани унутрашњу петљу. Лоше стране
рачунарски проблем. Анализе и оцене алгоритма су што је рекурзиван
до којих се долази истраживањем на ову (нерекурзивна варијанта је много
тему омогућавају боље сагледавање у сложенија), у најгорем случају извршава
својства алгоритма, усмеравају развој око 𝑛2 операција. Постоје и верзије овог
ефикаснијих алгоритама и омогућавају алгоритма које га побољшавају.
међусобно поређење различитих Алгоритам је врло осетљив на
алгоритама.Један од фактора који имплементацију (ефикасност се може
свакако утичу на анализу алгоритама нарушити лошим избором у
јесте обим података.Алгоритми имају имплементацији). Ако се не жели
често различите перформансе за анализирати најбоља имплементација,
различит обим улазних података.Неки боље је применити Shell-sort.
алгоритми сортирања су бржи за мали (Сарановац и Рајковић, 2014) На основу
обим података, док зсу за већи обим резултата овог истраживања долазимо
података релативно спорији од других, а до закључка да у зависности од
неки други алгоритми сортирања бржи структуре података и броја

2 Никола Николић
елмената листе можемо бирати време извршавања.(Живковић, 2010)
одговарајући алгоритам сортирања. Чак Приметићемо да је, то време, мера
и ако бирамо један од најпоузданији брзине раста тачног времена
алгоритам, qуицксорт, не мора да значи извршавања алгоритма са повећањем
да ћемо имати загарантоване добре броја његових улазних података.Када
перформансе. То представља главни постоји велики број података, битно је
проблем код унутрашњег сортирања. одредити асимптотско време
Иако се заинтересованост за овај извршавања алгоритма.
проблем смањила, и даље се трага за Са порастом броја података расте и
алгоритмом чије перформансе не време извршавања сваког
варирају и који даје оптималне алгоритма.Ако имамо проблем за који
резултате без обзира на какву листу се имамо више алгоритама а притом је
примењује.(Сарановац и Рајковић, 2014) велики број улазних података онда је
време извршавања јако битно.Уколико
имамо два алгоритма од којих је један
3. Асимптотско време ефикаснији за мали број улазних
извршавања алгоритма података све једно је који би смо
изабрали.Ако је време извршавања
Анализирајући алгоритме могу се једног 5 милисекунди а другог 3, то је за
добити врло компликоване функцијеј за људе неприметна разлика.Мећутим ако
њихова времена извршшавања.Могуће један алгоритам за милион улазних
је да за неки алгоритам добијемо време података ради 10 минута а други 200
извршавања изражено функцијом, нпр. онда је то значајна разлика.
Т1 (𝑛) = 10𝑛3 + 𝑛2 + 40𝑛 + 80 Уколико имамо велике вредности
аргумената, вредност функције времена
Узмимо још један алгоритам нпр.
извршавања је преовладујуће одређена
Т2 (𝑛) = 17𝑛 𝑙𝑜𝑔𝑛 − 23𝑛 − 10 доминантним термом.(Живковић, 2010)
Ако узмемо још компликованију У следећој табели 1 приказани су
функцију времена извршавања, резултати извршавања три алгоритма а
доћићемо до питања, да ли нам овај то су : 2𝑛 , 5𝑛2 и 100𝑛.
израз може створити слику о
временском извршавању алгоритма или
нам само смојом компликованошћу
одмаже у томе.Да ли на основу функције
Т1 и Т2 можемо рећи који алгоритам ће
се пре извршити?Одговор би био тај да
Табела 1. Вредности функција за
када би се упоредо нацртале функције Т1
променљиву n
и Т2 видело бисе да за разне вредности
аргумента n која функција има мање
вредности, односно који алгоритам је N 𝟐𝒏 𝟓𝒏𝟐 𝟏𝟎𝟎𝒏
бржи.Према томе, за време извршавања 1 2 5 100
неког алгоритма узимамо једноставну
10 1024 500 1000
функцију која за велике вредности
њеног аргумента најбоље апроксимира 100 2100 50000 10000
тачну функцију времена извршавања тог 1000 21000 5 ∙ 106 100000
алгоритма.То приближно време
извршавања се назива асимптотско

3
Табела 2. Време извршавања маљег број најмањи број долази на
алгоритама место првог члана.Следећи минимум од
преосталог дела низа се проналази као у
N A1 𝑨𝟐 𝑨𝟑 претходном случају a[n+1] и доводи до
последњег минимума и све тако док сви
1 1µ𝑠 5 µ𝑠 100 µ𝑠
чланови небуду порећани по растућем
10 1 𝑚𝑠 0.5 𝑚𝑠 1 𝑚𝑠 редоследу.На слици 1 приказан је
100 270 𝑔 0.05s 0.01s псеудо код „Selection-sort“ –a.
1000 2970 𝑔 5s 0.1s
SELECTION-SORT
Вредност времена извршавања
алгоритама А1, А2 и А3приказани су у for i = 1 to n - 1 do
табели 2.Из табеле 2 се може закључити min = a[i]
да за велики експонент 𝑛 > 100 pos = i
алгоритам А1 ради најнеефикасније док for j = i + 1 to n do
га следи А2 а затим најефикаснији if (a[j] < min) then
А3.Како би смо једноставније рачунали min = a[j]
да ли је неки алгоритам ефикасан или не pos = j
довољноје да видимо његов ред.Па је end_if
тако Т1 (𝑛) = 𝑛 је најефикаснији затим, end_for
Т2 (𝑛) = 𝑛2 , са повећањем n расте и a[pos] = a[i]
време извршавања Т2 (𝑛) = 2𝑛 . a[i] = min
end_for

4. Опис коришћених алгоритама Слика 1 псеудо код „Selection-sort“- a


у истраживању Да би се лакше схватио рад алгоритма
дат је поступни приказ замене места
За потребе истраживања перформанси једног низа.
алгоритама корижћени су алгоритми са
различитим сложеностима.Два
алгоритма са сложеножћу O(𝑛2 ) и два
чија је сложеност O(𝑛 𝑙𝑜𝑔𝑛).Како би смо
разумели боље проблем ефикасности
сортирања

4.1 Selection sort

Алгоритам selection sort је један од


основних алгоритама за
сортирање.Алгоритам ради по принципу
селекције.Прва петља узима минималну
вредност променљиве на почетку је то
а[0].Друга петља проверава за сваку
наредну вредност 𝑛 + 1.Уколико
постоји мања вредност од сачуване у Слика 2 визуелизација алгоритма
променљивој min онда та вредност „Selection-sort“
постаје минимум.Ако до краја низа нема Са слике се види начин на који

4 Никола Николић
алгоритам пролази кроз низ,бирајући
кроз сваки пролаз најмањи елемент а
потом га смешта на почетак низа.У
сваком пролазу дужина коју пролази се
смањује за један елемент и тако до краја
низа све док бројеви не буду порећани
по растућем редоследу.Алгоритам има
асимптотско време O(𝑛2 ).
Слика 4 Сортирање уметањем
На почетку је на левој страни само
један број док је остатак на десној.При
4.1 Алгоритам Insertion sort сваком пролазу први број са десне
стране се умеће на место са леве тако
Insertion Sort је још један алгоритам који да бројеви лево припадају урећеном
има споро време извршавања.Време низу од манмањег ка највећем.
извршавања је дуго због O(𝑛2 )
квадратног реда.На слици 3 приказан је 4.1 Алгоритам „Shell-sort“
псеудо код алгоритма
Insertion Sort
Shell алгоритам за сортирање
представља напреднију верзију
i←1 предходо описаног алоритма са
while i < length(A) уметањем (Insertion Sort).Упоређењем
елемената са варијабилним
j←i
инкрементом резултирао је сложеност
while j > 0 and A[j-1] > A[j] алгоритма O(𝑛 𝑙𝑜𝑔𝑛), што је свакако
swap A[j] and A[j-1] ефикасније за разлику од insertion Sort-а
и selection sort чија је сложеност
j←j-1 O(𝑛2 ).На слици 5 приказан је код
end while алгоритма.
i←i+1 Shell-Sort
end while
for i = 1 to t do
inc = h[i]
for j = inc + 1 to n do
Слика 3 Псеудо код алгоритма
y =a[j]
„Insertion Sort“
k = j – inc
Алгоритам сортира низ на тај начин while (k 1) and (y < a[k]) do
што је скуп података подељен на два a[k + inc] = a[k]
дела.Лево се налази сортиран низ, док k = k – inc
се на десној страни налази остатак end_while
низа. Да би био јаснији рад алгоритма a[k + inc] = y
сликом 4 је представљен начин рада end_for
алгоритма end_for
Слика 5 Псеудо код алгоритма „shell-
sort“

5
На слици 6 приказан је рад напредног
алгоритма са уметањем.

Слика 8 представља визуализовани


алгоритам сортирања Quick sort за
једнодимензиони низ.

Слика 6 сортирање елемената shell-sort


алгоритмом

4.4 Алгоритам „Quick-sort“


Quick sort је један од ефикаснијих
алгоритама за сортирање.Можемо га
поделити у две фазе : фаза дељења и
фаза сортирања.Овај алгоритам спада у
рекурзивне, зато што врши сортирање
над подељеним низом за сваку нову
поделу. Слика 8 сортирање niza (Quick sort)

QuickSort 5. Анализа дообијених резутата


if list.Count = 1 // niz je sortiran Анализирани су претходно описани
return list алгоритми за различито уређене
end if једнодимензионе низове.Урећивање и
pivot ← MedianValue(list) генерисање низова подељено је у три
for i ← 0 to list.Count-1 групе и то :
if list[i] = pivot
equal.Insert(list[i])  Насумично генерисани низ
end if  Обрнуто сортирани низ
if list[i] < pivot  Делимично сортирани низ
less.Insert(list[i])
Насумичан низ је генерисан на начин да
end if
се бројеви од 1 до 1000 појављују по
if list[i] > pivot
одреченом насумичном
greater.Insert(list[i])
редоследу.Обрнуто сортирани низ је низ
end if
сортиран од највећег до најмањег,
end for
супротно од потреба
return Concatenate(QuickSort(less),
истраживања.Делимично сортирани низ
equal,QuickSort(greater))
је сортиран процентуално око 99% где
end Quicksort
1% елемената се налази ван одређеног
Слика 7 Псеудо код алгоритма „quick- места. Програм за тестирање алгоритама
sort“ и генерисање низова је прављен у

6 Никола Николић
програмском језику пајтон (Python). алгоритма.Међутим фокус је био на
Дужина низа за прву групу тестних томе како различита структура података
података износила је 1000. Касније су утиче на алгоритам који има мању
тестирани низови који броје 10 000 сложеност даје слабије ефикасно
чланова. За сваки алгоритам поновљен сортирање.У табели 3 се налазе подаци
је тест пет пута. Време извршавања добијени тестирањем једнодимензионих
алгоритма мерено је функцијом која даје низова за случај насумично генерисаних
тренутно време. Када одузмемо време елемената.
сачувано у променљивој пре
извршавања сортирања од времена
након извршавања добићемо време
трајања сваког сортирања.Циљ је био
доказати како слошеност О(𝑐 𝑛 )
алгоритма утиче на ефикасност

Табела 3. Подаци о брзинама алгоритама коришћених за сортирање прве групе

Бр. Насумично генерисани низ


n Selection-sort Insertion-sort Quick-sort Shell-sort
време (s) време (s) време (s) време (s)
0,12 0,16 0,005 0,022
0,11 0,16 0,002 0,017
1000 0,11 0,17 0,001 0,001
0,12 0,18 0,019 0,022
0,12 0,17 0,001 0,009
11,56 17,84 0,082 0,24
11,84 18,52 0,081 0,2
10000 11,45 18,34 0,1 0,17
11,57 18,48 0,08 0,18
11,35 18,1 0,09 0,17

Анализом добијених резултата може се алгоритма О(𝑐 𝑛 ) и О(nlogn) утиче на


закључити да прва два алгоритма у ефикасност извршавања
табели 3 имају нешто спорије време за кода.замислимо да је било милион
низ до 1000 елемената.Човек не може елемената.Тада би разлика била још
разликовати 0.2 и 0.06 секунди, зато се уочљивија.Закључак би био да уколико
других пет мерења извршавања кода имамо непознати низ тј. низ који је
мерило над 10 000 елемената.За прва два потпуно насумичан (несортиран)
алгоритма (Selection-sort и Insertion- требамо користити алгоритме за
sort) било је потребно много више сортирање као што су Quick-sort и Shell-
времена него за 1000 sort или неки други алгоритам који има
елемената.Поређења ради Insertion-sort сличну слошеност О(nlogn).Ако се
је сортирао елементе веће групе за 18,52 уппореди бржи пар а то је препоручени
секунде док је Quick-sort обавио то за пар за сортирање видеђе се да је Quick-
0,081s.Дакле може се видети значајна sort за нијансу ефикаснији па је стога и
разлика у брзини извршавања.Доказали бољи избор када имамо проблем одлуке
смо да заиста сложеност тј. комплекснот измећу ова два алгоритма.

7
Табела 4. Подаци о брзинама алгоритама коришћених за сортирање друге групе

Бр. Обрнуто сортирани низ


n Selection-sort Insertion-sort Quick-sort Shell-sort
време (s) време (s) време (s) време (s)
0,11 0,32 0,015 0,014
0,14 0,34 0,014 0,0032
1000 0,12 0,35 0,019 0,007
0,13 0,34 0,013 0,007
0,13 0,34 0,014 0,007
11,69 35,73 0,19 0,11
11,46 36,32 0,19 0,1
10000 11,46 36,23 0,2 0,12
11,46 35,79 0,21 0,1
11,46 36,38 0,18 0,12

Анализом података из друге групе


уочава се да најлошије перформансе има
Insertion-sort.Ако се погледа рад
алгоритма објашњеног у одељку видеће
се зашто овај алгоритам даје лоше
перформансе за овакав тип уређености
елемената у низу.Константно уметање
елемената на почетну позицију
проверавајући дотле сваки наредни
прави много компарација које смањују
ефикасност извршавања алгоритма. Слика 9 упоредни приказ времена прве
Selection-sort се показао као бољи избор групе
ако знамо природу уређености низа тј.
уколико су елементи поређани тако да Сада је уочљивија предност друге групе
иду од већег ка мањем пожељно је алгоритама са мањом
користири овај алгоритам. комплексошћу.Следи слика 10 на којој
је приказан упоредни однос алгоритама
Quick-sort и Shell-sort предњаче наравно
из табеле за случај обрнуто урећених
над прва два алгоритма као и у случају
елемената.
насумично генерисаних низова.У овом
случају за нијансу се боње показао
напредни алгоритам са уметањем (Shell-
sort), мећутим било који избор од ова
два није погрешан.
Да би се јасније представили подаци
коришћени су дијаграми који приказују
средњу вредност мерења времена према
групама.На слици 9 приказани су
подаци из табеле 4 са упоредним
приказом датих алгоритама. Слика 10 упоредни приказ времена
друге групе

8 Никола Николић
Последња група података организована је алгоритам селективног одабира.Као
у једнодимензиони низ сачињавали су код алгоритма са уметањем код друге
елементи који су били готово групе где је имао велики број
сортирани.Међутим намерно је компарација због саме природе рада
неколико елемената измењено како би алгоритма тако и овде постоји велики
показали понашање алгоритма при овој број поређења па је зато и такав
појави.У табели 5 се налазе времена резултат.Насупрот томе најефикаснији
извршавања алгоритама за трећу групу је био Shell-sort, а затим Insertion-
(Сортирани низ за 98-99% елемената). sort.Поставња се питање како је могуће
да алгоритам сортирања са лошијим

Табела 5. Подаци о брзинама алгоритама коришћених за сортирање треће групе

Бр. Сортирани низ за 98-99% елемената


n Selection-sort Insertion-sort Quick-sort Shell-sort
време (s) време (s) време (s) време (s)
0,11 0,002 0,13 0,001
0,12 0,015 0,13 0,015
1000 0,11 0,015 0,15 0,002
0,13 0,017 0,14 0,003
0,13 0,001 0,13 0,005
11,47 0,037 0,19 0,007
11,5 0,021 0,18 0,015
1000 11,58 0,042 0,21 0,001
0 21490 0,028 0,19 0,005
11,47 0,029 0,2 0,007

Да би подаци били уочљивији и боље перформансама и комплекснијом


схваћенији, представњени су подаци сложеношћу О(𝑐 𝑛 ) изврши брже
графички и налазе се на слици 11. операцију сортирања него његов
конкорент у овој области.То се заправо
може десити.Уколико постоји мали о
број неурећених елемената у низу онда
је могуће да Insertion-sort након
неколико пролаза изврши сортирање реј
би брзо поставио елемент на место на
почетку тако да у следећем пролазу не
би имао нити једнну замену елемената у
низу.Shell-sort са својим принципом
смањења инкремента и допуштању
замени на већем растојању елемената
чини време извршавања сортирања
Слика 11 упоредни приказ времена краћем.
друге групе

Као што се моше видети са слике


најлошије перформансе према брзини
извршавања операције сортирања имао

9
6. Закључак усавршавају алгоритме тако да буду што
ефикаснији.Зато је важно истражити
Према добијеним резултатима који су
сваки алгоритам понаособ.Правити низ
били анализирани показало се да је
анализа различитих улазних вредности,
сложеност алгоритма битан фактор.Треба
једном речју тестирати што
тежити увек О(nlogn)
више.Подаци ће бити од користи
сложености.Анализа алгоритама за
људима који имплементирају алгоритме
сортирање је показала да брзина и
у софтвере који требају да извршавају
ефикасност зависе и он начина на који
сложене операције.
су елементи смештени у низове.Тема је
врло актуелна и има простора
напредку.Постоји велики број људи који

10 Никола Николић
Literatura:

Granville Barnett & Luca Del Tongo (2008). Data Structures and Algorithms:
Annotated Reference with Examples, University of Florence

Дејан Живковић. (2010). Увод у алгоритме и структуре података.Универзитет


Сингидунум, Београд.

Др Малбашки Т. Д., (2015). Алгоритми и структуре података, Факултет информационих


технологија, Сремска Каменица

Малбашки Д., Обрадовић Д.( 1994.). Основне структуре података, Технички факултет
„Михајло Пупин“, Зрењанин,

Хотомски P., Малбашки D.,( 2000.). Математичка логика и принципи програмирања,


Универзитет у Новом Саду

Мило Томашевић (2008.) Алгоритми и структуре података, Академска мисао, Beograd

Сарановац Т.,Рајковић ј., (2014). Анализа алгоритама за сортирање који се користе у


системима на бази бежичних сензорских мрежа, Електротехнички Факултет, Београд

Lorin H.: Sorting and Sort Systems, Addison-Wesley, 1972

Никола Николић
378/2018,
Крагујевац,
Србија
nikola.nikkolic@gmail.com

11

You might also like