Professional Documents
Culture Documents
ELEKTROTEHNIKI FAKULTET
ODSJEK ZA RAUNARSTVO I INFORMATIKU
MULTIMEDIJALNI SISTEMI
2016/17
2
1. Uvod
3
2. E-learning i M-learning sistemi
4
3. Quick sort
3.1. Uvod
Algoritam sortiranja je takav algoritam koji postavlja elemente ulaznog niza u odreeni redoslijed.
Formalno, algoritam sortiranja rjeava tzv. problem sortiranja (eng. sorting problem) koji kao ulaz
ima sekvencu od n brojeva a1, a2,, an>, a kao izlaz daje permutaciju a1, a2,, an> ulazne
sekvence za koju vrijedi da je a1 a2 an. Gdje je ulazna sekvenca obino niz od n
elemenata, iako moe biti predstavljena i nekom drugom strukturom podataka, kao to je povezana
lista [1].
Intuitivno je i bez detaljnog poznavanja raunarstva jasno zato su algoritmi sortiranja bitni. Kako
navodi [2], postoje mnogi algoritmi koji zahteijvaju da su ulazni podaci sortirani ili su takvi
algoritmi mnogo efikasiji ukoliko su ulazni podaci sortirani. Kao primjer se navodi algoritam
binarnog pretraivanja, ali i openito moemo rei da algoritmi sortiranja slue kao
predprocesiranje za efikasne implementacije algoritama pretraivanja. Najveu distinkciju
izmeu razliitih algoritama sortianja definira efikasnost njihovog izvravanja, meutim, korektna
upotreba odreenog algoritma zavisi i od drugih faktora koji definiraju algoritam. Tako postoje
situacije u kojima je poeljno da se elementi koji se sortiraju mogu dodavati naknadno tj. da ulazni
niz nije fiksne veliine, memorijska ogranienja nekad efikasni algoritmi imaju prevelike
memorijske zahtjeva pa se koriste manje efikasni algoritmi koji zadovoljavaju manje memorije, dok
je nekad jednostavno mjera odabira algoritma ovisna o teini implementacije istog.
Quick sort algoritam predstavlja efikasan algoritam sortiranja razvijen od strane Tony Hoare-a
1959. godine. Algoritam koristi strategiju podijeli, pa vladaj (eng. divide-and-conquer) i moe se
izvravati u mjestu (eng. in place), to znai da osim ulaznog niza elemenata nad kojim se izvodi
sam algoritam, zahtjeva vrlo malo dodatnih memorijskih resursa. Prosjena vremenska
kompleksnost algoritma za n ulaznih elemenata je O(nlogn) , dok je za najgori sluaj O(n2 ) .
U ovom dijelu rada je detaljnije predstavljen algoritam koji se vizualizira u m-learning sistemu. U
nastavku je objanjen sam algoritam, prikazan pseudo kod i sekvenca izvravanja algoritma na
primjeru ulaznog niza te je data osnovna analiza kompleksnosti izvravanja algoritma. Cilj ovog
dijela rada nije prikazati sve to je trenutno poznato o quick sort algoritmu ili dati usporedbe sa
drugim algoritmima poput merge ili heap sorta, nego prikazati najznaajnije elemenate algoritma,
kako bi kasnije mogli implementirati mobilnu aplikaciju za vizualiaciju istog.
5
conquer) te na kraju kombiniranje (eng. combine) dobivenih rezultata kako bi se dobilo rjeenje
originalnog problema.
U nastavku su objanjeni koraci ove strategije kod quick sort algoritma na primjeru sortiranja
podniza A[p..r][1][3]:
Divide: Particioniranje niza A[p..r] na dva podniza A[p..q-1] i A[q+1..r] takva da je svaki
element niza A[p..q-1] manji ili jednak elementu A[q] koji je, s druge strane, manji ili jednak
od svakog elementa niza A[q+1..r]. Indeks q se rauna kao dio procedure za particioniranje.
Eelement A[q] se naziva pivot. U ovom koraku nam nije od interesa meusobni poredak
elemenata lijevo i desno od pivota, ve je jedino vano da su svi elementi niza u korektnom
poretku u odnosu na pivot (lijevo manji ili jednaki, desno vei ili jednaki).
Conquer: Sortiranje podnizova A[p..q-1] i A[q+1..r] rekurzivnim pozivanjem quick sort
algoritma na iste.
Combine: Kako su podnizovi ve sortirani, nema potrebe za njihovim dodatnim
kombiniranjem tj. cijeli niz A[p..r] je sada sortiran.
Navedeni koraci algoritma se mogu opisati procedurom QUICK-SORT koja je prikazana na slici
3.1. Algoritam se poziva sa poetnim argumentima prvi=0, zadnji=n-1.
6
Efektivno se proiruje dio niza koji je manji od pivota, a umanjuje dio niza koji je vei od pivota.
Element na indeksu p predstavlja prvi vei element od pivota, to znai da je po okonaju
poreenja elemenata pivot potrebno postaviti na poziciju p-1, a element koji se nalazi na toj poziciji
postaviti na poetak niza (prvobitnu poziciju pivota). Ovim postupkom je osigurano da su svi
elementi na indeksima manjim od p-1 manji (ili jednaki) od pivota, a svi elementi na indeksima
veim od p-1, vei (ili jednaki) od pivota tj. indeks p-1 predstavlja indeks pivot elementa kojeg
vraa procedura PARTICIJA. Kako je opisano procedurom na slici 3.1. dalje sortiranje niza se
obavlja na podnizovima podijeljenim pivot elementom sve dok podnizovi ne budu imali jedan
element (koji je sortiran).
7
0 1 2 3 4 5 6 7 8
10 7 4 9 11 22 3 1 12
p=1
10 7 4 9 11 22 3 1 12
p=2
10 7 4 9 11 22 3 1 12
p=3
10 7 4 9 11 22 3 1 12
p=4
10 7 4 9 11 22 3 1 12
p=4 i=5
10 7 4 9 11 22 3 1 12
p=4 i=6
10 7 4 9 3 22 11 1 12
p=5 i=6
10 7 4 9 3 22 11 1 12
p=5 i=7
10 7 4 9 3 1 11 22 12
p=6 i=7
10 7 4 9 3 1 11 22 12
p=6 i=8
1 7 4 9 3 10 11 22 12
j=5 p=6
Slika 3.3. Poetno odreivanje particija za ulazni niz
1. 1 7 4 9 3 10 11 22 12
2. 1 7 4 9 3 10 11 22 12
3. 1 3 4 7 9 10 11 22 12
4. 1 3 4 7 9 10 11 22 12
5. 1 3 4 7 9 10 11 22 12
6. 1 3 4 7 9 10 11 12 22
7. 1 3 4 7 9 10 11 12 22
8. 1 3 4 7 9 10 11 12 22
Slika 3.4. Primjer izvoenja algoritma
8
3.3. Analiza kompleksnosti izvravanja
U ovom dijelu rada je izvrena kratka i neformalna analiza vremenske kompleksnosti izvravanja
quick sort algoritma kroz razmatranje najgoreg, najboljeg i prosjenog sluaja. Detaljnija i
formalnija analiza bi zahtijevala znatno vie prostora, a kako je ranije naglaeno cilj ovog dijela
rada je prikazati osnovne elemente quick sorta, a ne detaljno analizirati pojedine dijelove istog.
Kako navodi [1], vrijeme izvravanja quick sort algoritma ovisi od toga da li su particije
balansirane, dok balanisranost ovisi od odabira pivota. Pod balansiranosti particija ovdje
podrazumijevamo da je broj elemenata jedne particije priblino jednak broj elemenata druge
particije. Ako su particije balansirane, algoritam se asimptotski izvrava jednako brzo kao i merge
sort. Meutim, ako particije nisu balansirane, algoritam se moe izvravati asimptotski jednako
sporo kao i insertion sort.
U najgorem sluaju niz se dijeli na dvije particije kod kojih jedna sadri 0 elemenata, a druga
preostalih n-1 elemenata. Pretpostavimo da se ovakva situacije desi na svakom rekurzivnom pozivu.
Originalni poziv funkcije zahtijeva cn vremena, sa nekom konstantom c, rekurzivni pozivi na nizu
veliine n-1 elemenata zahtjevaju c(n-1) vremena, na veliini niza n-2 elemenata c(n-2) vremena
itd. Kada saberemo sva vremena za particioniranje na svakom nivou dobijemo da je vrijeme
izvravanja c((n+1)(n/2)-1), to je u big-O notaciji O(n2 ) [4].
Najbolji sluaj izvravanja nastaje kada su particije na svakom nivou jednake duine ili se razlikuju
za jedan element. U oba sluaja maksimalni broj elemenata u particijama je n/2, pa particioniranje
problema dobija izgled slian onome kod merge sorta. U ovom sluaju vrijeme izvravanja je
proporcionalno O(nlogn) .
Prosjeno vrijeme izvravanja quick sort algoritma je mnogo blie najboljem sluaju nego
najgorem. Meutim, dokaz da je prosjeno vrijeme izvravanja algoritma proporcionalno
O(nlogn) vremenu zahtijeva ozbiljnu matematiku analizu. Za potrebe intuitivnog svhatanja
vremena izvravanja algoritma, [1] navodi kako procedura particioniranja moe proizvesti dobre i
loe podjele. U normalnim okolnostima dobre i loe podjele se pojavluju nasumino sa jednakom
vjerovatnoom. Ptretpostavimo da se dobre i loe podjele meusobno smjenjuju na uzastopnim
nivoima rekurzije. Na prvom nivou ulazni niz proizvodi podnizove sa 0 i n-1 elemenata (loa
podjela), dok u narednom nivou rekurzije podniz n-1 proizvodi dva podniza veliina (n-1)/2 -1 i (n-
1)/2 budui da se radi o najboljem sluaju particioniranja. Kombinacija dobrih i loih podjela daje
vrijeme particioniranja proporcionalno O(n) . Meutim, vrijeme izvravanja na dobroj podjeli je
znaajno vee u odnosu na vrijeme za lou podjelu, tako da asimptotski moemo rei da algoritam
najvie vremena provodi izvravajui operacije nad balansiranom podjelom particija. Ovakvim
rezonovanjem dolazimo do zakljuka da se algoritam asimptotski u prosjenom sluaju izvrava
jednako kao i u najboljem sluaju tj. u O(nlogn) vremenu (uz dodatne konstantne faktore koji se
zanemaruju u big-O notaciji).
9
4. Mobilna aplikacija za vizualizaciju quick sort
algoritma implementacija
Implementacija mobilne aplikacije za vizualizaciju quick sort algoritma je uraena za android
ureaje.
Mobilna aplikacija omoguava korisniku da proita na koji nain quick sort algoritam radi uz
tekstualni i vizuelni prikaz.
Pored toga, korisnik ima mogunost unosa brojeva i pokretanje izvrenja algoritma. Postoje dva
naina prikaza izvrenja. Jedan je da se algoritam izvri od poetka do kraja, uz mogunost pauze
izvrenja, a drugi je da se na korisniki zahtjev pokree svaka od iteracija.
Kada korisnik unese niz brojeva, taj niz se prikae kao niz krugova u kojima se nalaze unesene
vrijednosti. Nakon svake iteracije algoritma, desi se nekoliko zamjena tih krugova, tj. krugovi se
sortiraju. Broj sortiranja je razliit za svaku iteraciju, odnosno ovisi o trenutnom stanju algoritma i
trenutnog niza brojeva.
10
4.1. Struktura mobilne aplikacije
Kao to moemo vidjeti na slici 4.1. aplikacija se sastoji od 5 aktivnosti (eng. activity).
AboutActivity opisuje quick sort algoritam, njegovu kompleksnost i vizuelni prikaz njegovog
izvravanja.
AboutUs opisuje svrhu aplikacije i kreatore aplikacije.
BaseActivity je apstraktna klasa koja slui da sve aktivnosti koje nasljeuju ovu klasu imaju isti
meni.
MainActivity je poetna aktivnost koja omoguava korisniku unos brojeva koji e se sortirati.
QuickSortActivity je glavna aktivnost u kojoj se izvrava algoritam. Ova aktivnost e biti detaljnije
opisana u nastavku.
11
Kao to je prethodno opisano algoritam se sastoji od pivota. Pivot smo prikazali crvenim krugom,
dok smo ostale brojeve prikazali plavim krugom kao na slici 4.3.
12
5. Mobilna aplikacija za vizualizaciju quick sort
algoritma primjer koritenja
5.1. Uvod
U ovom dijelu rada prikazano je koritenje mobilne aplikacije za vizualizaciju quick sort algoritma
na primjeru ulaznog niza brojeva: 10, 7, 4, 9, 11, 22, 3, 1, 12. Pored samog sortiranja prikazane su i
druge mogunosti koje aplikacija prua. Prikaz aplikacije je raen na osnovu slika ekrana (eng.
screenshot) u odreenom trenutku izvravanja.
Kako je ranije spomenuto, aplikacija se sastoji od tri osnovna pogleda/stranice: Home page, About
page i Quick Sort page. Home page je pogled koji korisnik inicijalno dobija prilikom pokretanja
aplikacije, a sadri veliki dio mogunosti aplikacije kao to su: unos brojeva za sortiranje,
izvravanje algoritma korak-po-korak (eng. step-by-step), izvravanje svih iteracija algoritma i
pregled izvrenih zamjena mjesta. About i Quick Sort page su stranice informativnog karaktera koje
daju vie informacija o autorima aplikacije, odnosno o samom quick sort algoritmu.
13
Slika 5.2. Unos nepravilnog niza brojeva
14
Slika 5.4. Poetni izgled Home page nakon ispravnog unosa
15
Pored animacije sa kruiima, prilikom zamjene mjesta elementima u donjem lijevom uglu se
ispisuje opis zamjene. Na slici 5.6. prikazano je stanje niza nakon druge iteracije, gdje je zadnja
zamjena elemenata bila nad elementima 9 i 10.
16
Slika 5.9. Lista zamjena nakon izvravanja algoritma
Slika 5.10. Stanje algoritma nakon nekoliko iteracija u run-all nainu izvravanja
Dok traje izvravanje algoritma, dugme START je pretvoreno u dugme STOP pomou kojeg se
privremeno pauzira izvravanje. Kao i kod step-by-step metoda, u donjem lijevom uglu se ispisuju
poruke o aktualnoj zamjeni mjesta. Na slici 5.11. je prikazano stanje algoritma nakon to je korisnik
pritisnuo dugme STOP (sada ono postaje START, a u donjem lijevom uglu se ispisuje poruka koja
17
indicira da je algoritam zaustavljen). Ponaanje nakon sortiranja je identino ponaanju u step-by-
step nainu izvravanja.
18
Slika 5.13. Quick Sort stranica I
19
5.4. About page
About page sadri osnovne informacije o aplikaciji i njenim autorima. Ova stranica je prikazana na
slici 5.16.
20
6. Zakljuak
21
Reference
[1] T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to algorithms, 3rd ed.
Cambridge, MA: The MIT Press, 2009.
[2] H. upi, Algoritmi i strukture podataka. Sarajevo: Elektrotehniki fakultet Univerziteta u
Sarajevu, 2010.
[3] "Overview of quicksort," in www.khanacademy.org, Khan Academy. [Online]. Available:
https://www.khanacademy.org/computing/computer-science/algorithms/quick-
sort/a/overview-of-quicksort. Accessed: Feb. 3, 2017.
[4] "Analysis of quicksort," in www.khanacademy.org, Khan Academy. [Online]. Available:
https://www.khanacademy.org/computing/computer-science/algorithms/quick-
sort/a/analysis-of-quicksort. Accessed: Feb. 4, 2017.
22