Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu

Size: px
Start display at page:

Download "Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu"

Transcription

1 Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike Tibor Pejić Sortiranje u linearnom vremenu Diplomski rad Osijek, 2011.

2 Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike Tibor Pejić Sortiranje u linearnom vremenu Diplomski rad Mentor: doc. dr. sc. Domagoj Matijević Osijek, 2011.

3 Sadržaj Uvod 1 1 Algoritmi za sortiranje Optimalno sortiranje Counting sort Radix sort Bucket sort Flash sort Testiranje algoritama za sortiranje 18 Zaključak 28 Literatura 29 Sažetak 30 Životopis 31 i

4 Uvod I prije računala postojali su algoritmi. A, danas kada postoje računala, postoji još više algoritama i oni se nalaze u srcu računala. No, što su to zapravo algoritmi? Ukratko, algoritam je svaka dobro definirana procedura koja na ulazu prima neki skup vrijednosti te na temelju njih proizvodi neki drugi skup vrijednosti na izlazu. Također, s računalne strane, na algortitam možemo gledati kao na alat za rješavanje određenog računalnog problema. Na primjer, ako želimo pronaći rješenje sustava linearnih jednadžbi, možemo koristiti Gaussovu metodu (algoritam) eliminacije. Ako želimo šifrirati dani tekst koristeći određeni ključ, možemo koristiti AES ili neki drugi moderni algoritam za šifriranje. Jedan od fundamentalnih problema u konstrukciji algoritama i programiranju općenito jest problem sortiranja. Cilj svakog algoritma za sortiranje jest pronaći permutaciju p(1)p(2)... p(n) danog niza brojeva a 1, a 2,..., a n takvu da je a p(1) a p(2)... a p(n). Postoji više razloga zašto se sortiranje smatra tako važnim problemom u području informatičkih znanosti: Proučavajući različite algoritme za sortiranje možemo dobiti dobar uvid u mnoge elementarne pojmove, važne u analizi i dizajnu algoritama, kao što su asimptotska notacija, podijeli pa vladaj algoritmi, razilčite strukture podataka itd. Iz tog razloga sortiranje zauzima važno mjesto u mnogim informatičkim udžbenicima. Ponekad okolnosti u primjeni zahtijevaju sortiranje. Zamislimo samo rječnik u kojemu riječi nisu poredane leksikografski. Pretraživanje sortirane liste je znatno brže, nego pretaživanje nesortirane liste podataka. Mnogi složeniji algoritmi se koriste sortiranjem. Primjerice, program koji obrađuje grafičke objekte koji su postavljeni jedan iznad drugog prvo treba sortirati objekte prema relaciji iznad, a tek onda nacrtati sve objekte po redu. Također, o važnosti algoritama za sortiranje govori i činjenica da mnogi programi za ispitivanje performansi računalnog hardwarea koriste sortiranje kao jedan od testova koje provode. 1

5 Kao posljedica toga razvijen je velik broj različitih algoritama za sortiranje, od onih jednostavnijih kao što su bubble sort i insertion sort, čije vrijeme izvršenja odgovara Θ(n 2 ), do onih složenijih kao što su merge sort i heap sort, čije je vrijeme izvršenja jednako Θ(n lg n). Postoje čak i algoritmi koji su izmišljeni kao informatičke šale, primjerice bogo sort s prosječnim vremenom izvršenja O(n n!). No, tema ovog rada su algoritmi koji, uz određene, dodatne, pretpostavke, imaju linearno vrijeme izvršenja i koji, kako ćemo kasnije vidjeti, čine, asimptotski gledano, klasu najbržih algoritama za sortiranje. U poglavlju 1 je dat kratak opis najvažnijih metoda koje koriste algoritmi za sortiranje, a zatim je u prvom dijelu razmatrano pitanje optimalne složenosti algoritama za sortiranje. Ostatak poglavlja je posvećen teorijskom razmatranju algoritama counting sort, radix sort, bucket sort i flash sort koji pod određenim uvjetima imaju linearno vrijeme izvršenja. Poglavlje 2 je zapravo eksperimentalni dio rada, u kojemu su testirane C++ implementacije algoritama razmatranih u poglavlju 1 te su njihova vremena izvršenja uspoređena sa STL funkcijom sort(). 2

6 Poglavlje 1 Algoritmi za sortiranje Već smo prije vidjeli da postoje različiti algoritmi za sortiranje. Prema tehnici kojom se koriste svi algoritmi za sortiranje se ugrubo mogu podijeliti u sljedećih osam skupina: 1. Insertion. Elemente niza promatramo jedan po jedan te svaki novi element umećemo na odgovarajuće mjesto u odnosu na već sortirani dio niza. Ovo je način na koji većina igrača slaže karte. Prirodno, najvažnije predstavnik ove skupine algoritama je insertion sort. 2. Exchange. Ako pronađemo dva elementa koja nisu u odgovarajućem redosljedu (jedan u odnosu na drugi), onda ih zamjenimo i taj postupak ponavljamo sve dok ni jedna zamjena više nije potrebna. Najpoznatiji predstavnici ove metode sortiranja su bubble sort i quick sort. 3. Selection. Prvo pronađemo najmanji element te ga nekako odvojimo od ostalih, zatim sljedeći najmanji itd. Ovom tehnikom se koriste selection sort i heap sort. 4. Merging. Ideja ove tehnike leži u spajanju dvaju prethodno sortiranih podnizova u jedan novi sortirani niz. Najvažniji algoritam koji koristi ovu metodu jest merge sort. 5. Enumeration. Sekvencijalno prolazeći kroz niz za svaki element prebrojavamo koliko ima elemenata koji su manji te koristeći to znanje određujemo konačnu poziciju svakog od elemenata. Primjer algoritma koji koristi ovu tehniku jest counting sort. 6. Distribution. Ideja algoritama koji koriste ovu metodu je upravo suprotna onima iz skupine 4. Ovdje se početni niz dijeli u više manjih podnizova tako da su svi elementi podniza 1 manji od svakog od elemenata podniza 2. U ovu skupinu pripadaju bucket sort, flash sort i radix sort. 7. Luck. Nasumice mješamo elemente niza, sve dok ne dobijemo sortirani niz. Ovo je očito vrlo neučinkovita metoda, uzimajući u obzir građu današnjh računala. 3

7 S druge strane, ova metoda je vrlo zanimljiva za implementaciju na kvantnim računalima. Predstavnik ove metode je već spomenuti bogo sort. 8. Special. U ovu skupinu pripadaju svi algoritmi koji zahtijevaju vrlo specijalne ulazne podatke ili pak zahtijevaju poseban hardware. Primjeri takvih algoritama su pancake sort, spaghetti sort i mrežno sortiranje. Dakako, postoje i hibridni algoritmi, odnosno, oni koji koriste više od jedne od navedenih tehnika i upravo se takvi algoritmi najviše koriste u praksi. Osim navedenih tehnika sortiranja postoji još jedno svojstvo koje će nam biti zanimljivo u daljnjoj raspravi, a to je stabilnost. Definicija 1.1. Kažemo da je algoritam za sortiranje stabilan ako se brojevi s jednakom vrijednosti u izlaznom nizu pojavljuju u istom redosljedu kao i u ulaznom nizu A (5,1) (8,9) (3,2) (3,4) (8,7) A (5,1) (8,9) (3,2) (3,4) (8,7) B (3,2) (3,4) (5,1) (8,9) (8,7) B (3,4) (3,2) (5,1) (8,7) (8,9) (a) (b) Slika 1.1: Primjer stabilnog (a) i nestabilnog (b) sortiranja (po prvome elementu) niza dvodimenzionalnih vektora. U ulaznom nizu A element (3,2) se nalazi ispred elementa (3,4). Stabilno sortiranje pod (a) zadržava njihov relativni poredak, dok je u slučaju nestabilnog sortiranja pod (b) njihov poredak zamijenjen. Ovo svojstvo je važno kada uz elemente koje sortiramo postoje i satelitski podaci kako je to slučaj na slici 1.1. Prvi element dvodimenzionalnog vektora je vrijednost po kojoj sortiramo, a sve ostalo su satelitski podaci Optimalno sortiranje Pored same tehnike koju koristi neki algoritam ono što nas najviše zanima jest njegovo vrijeme izvršenja. Proučavajući tako različite algoritme za sortiranje nameće nam se pitanje: Koliko brzo uopće možemo sortirati? No, prije neko što odgovorimo na to pitanje, proučimo jedan poseban model sortiranja, sortiranje uspoređivanjem (comparison sort). Jedina operacija koja je dozvoljena u ovom modelu, osim, naravno, promjene redosljeda elemenata, jest njihovo uspoređivanje koristeći relaciju. Ovaj model izgleda prilično ograničavajuće, ali je veoma važan jer ga koriste, kako algoritmi iz prve četiri skupine iz prethodnog poglavlja, tako i najčešće korišteni algoritmi ugrađeni u 4

8 Slika 1.2: Primjer stabla odluke za niz 5, 9, 2. i : j označava uspoređivanje elemenata a i i a j. Listovi označeni pravokutnicima označavaju konačne permutacije p(1), p(2), p(3). Osjenčani put naznačuje tijek donesenih odluka prilikom sortiranja. Postoji 3! = 6 permutacija elemenata ulaznog niza pa stablo odluke mora imati najmanje 6 listova. našim računalima. Odgovorimo, onda, na pitanje: Koliko brzo možemo sortirati uspoređivanjem? Definicija 1.2. Puno binarno stablo je stablo kod kojeg svi čvorovi, osim listova, imaju točno dva djeteta. Da bismo odgovorili na to pitanje, promotrimo model stabla odluke (puno binarno stablo). Na slici 1.2 je dan primjer takvog stabla odluke, pomoću kojega možemo sortirati nizove od 3 elementa. Svaki unutarnji čvor označava jedno uspoređivanje a i a j. Lijevo podstablo označava slučaj kad je a i a j, a desno podstablo slučaj kada je a i > a j. Kada dođemo do lista u stablu odluke, došli smo do konačne permutacije koja nam daje sortirani niz. Promotrimo sada vezu između modela stabla odluke i sortiranja uspoređivanjem za ulazni niz od n elemenata. Primijetimo da svakome sortiranju uspoređivanjem odgovara jedno stablo odluke (ili više njih ako se radi o randomiziranome algoritmu), za svaku moguću vrijednost broja n. Svaki puta kad radimo uspoređivanje, algoritam može krenuti u jednom od dva smjera, koji, u slučaju stabla odluke, odgovaraju lijevom i desnom podstablu. Takvo stablo odluke koje odgovara sortiranju uspoređivanjem, sadrži redoslijed uspoređivanja za sve moguće permutacije ulaznog niza. Da bi takvo stablo odluke bilo u stanju sortirati svaki niz od n elemenata, mora biti u stanju doći do svake od n! permutacija toga niza, što znači da broj listova u tome stablu mora biti najmanje n!. Vrijeme izvršenja (broj uspoređivanja) je jednako duljini puta od korijena do lista što je u najgorem slučaju jednako visini stabla. Dakle, donja granica visine svih stabala odluke u kojima se sve permutacije pojavljuju kao listovi jest ujedno donja granica vremena izvršenja za sve algoritme temeljene na uspoređivanju. 5

9 Teorem 1.1. Svaki algoritam sortiranja uspoređivanjem zahtjeva Ω(n lg n) uspoređivanja u najgorem slučaju. Dokaz. Iz prethodne rasprave znamo da je dovoljno odrediti visinu stabla odluke. Promotrimo stablo odluke visine h s l listova. Da bi stablo odluke bilo u stanju dati korektan rezultat za svaku permutaciju ulaznog niza, svaka od n! permutacija se mora pojaviti na nekome od listova, što znači da je n! l. S druge strane znamo da binarno stablo visine h ima najviše 2 h listova. Slijedi da je odakle logaritmiranjem dobivamo n! l 2 h, h lg (n!). A, kako prema Stirlingovoj aproksimaciji vrijedi slijedi da je h = Ω(n lg n). lg (n!) = n lg n n ln lg n + O(1), 2 Dakle, sada smo odgovorili koliko brzo možemo sortirati uspoređivanjem. Na pitanje koliko brzo uopće možemo sortirati lako je dati odgovor. Da bismo znali na koje mjesto moramo staviti svaki od n elemenata niza, očito ih moramo sve pregledati pa je donja granica vremena izvršenja za bilo koji algoritam sortiranja jednaka Ω(n). U sljedećim poglavljima ćemo vidjeti nekoliko algoritama koji postižu tu granicu Counting sort Counting sort pretpostavlja da je svaki od n elemenata ulaznog niza cijeli broj iz skupa {0, 1, 2,..., k}, za neki cijeli broj k. Kada je k = O(n), izvršno vrijeme odgovara Θ(n). Counting sort za svaki element x određuje broj elemenata manjih od x te koristeći tu informaciju stavlja x na pravo mjesto u izlaznom nizu. Na primjer, ako je 11 elemenata manje od x, onda se x treba postaviti na 12. mjesto. Naravno, ovakva procedura funkcionira samo ako su svi elementi međusobno različiti. No, vidjet ćemo da se uz male modifikacije može prilagoditi tako da radi i u općem slučaju. U pseudokodu za counting sort pretpostavljamo da je ulazni niz A[1..n], te je length(a) = n. Osim toga koristimo dva dodatna niza: B[1..n], kao izlazni niz, i C[0..k], koji će sadržavati informacije o tome na koje mjesto treba staviti pojedini element. 6

10 Slika 1.3: Rad procedure Counting-Sort na ulaznom nizu A[1..8], gdje je svaki element od A nenegativni cijeli broj ne veći od k = 5. (a) Niz A i pomoćni niz C nakon linije 5. (b) Niz C nakon linije 8. (c)-(e) Izlazni niz B i niz C nakon jedne, dvije i tri iteracije petlje u linijama Tamno osjenčani dijelovi niza B nisu popunjeni. (f) Konačni izgled niza B nakon sortiranja. Counting-Sort(A, B, k) 1 neka je C[0..k] novi niz (polje) 2 for i = 0 to k 3 C[i] = 0 4 for j = 1 to length(a) 5 C[A[j]] = C[A[j]] //C[i] sad sadrži broj elemenata jedankih i. 7 for i = 1 to k 8 C[i] = C[i] + C[i 1] 9 //C[i] sad sadrži broj elemenata manjih ili jednakih i. 10 for j = length(a) downto 1 11 B[C[A[j]]] = A[j] 12 C[A[j]] = C[A[j]] 1 Slika 1.3 ilustrira rad counting sorta. Nakon što for petlja u linijama 2-3 postavi sve elemente niza C na 0, for petlja u linijama 4-5 prolazi kroz sve elemente ulaznog niza te ako je vrijednost elementa jednaka i, inkrementiramo C[i]. Dakle, nakon linije 5, C[i] sadrži broj elemenata jednakih i, za sve i = 0, 1,..., k. Linije 7-8 određuju koliko je elemenata manjih ili jednakih i, za svaki i = 0, 1,..., k. Konačno, for petlja u linijama stavlja svaki element A[j] na točno mjesto u izlaznom nizu B. Ako su svi od n elemenata različiti, tada za svaki A[j], vrijednost C[A[j]] sadrži točnu konačnu poziciju elementa A[j], jer postoji točno C[A[j]] elemenata manjih ili jednakih A[j]. Kako nisu svi elementi nužno različiti, vrijednost C[A[j]] smanjujemo za jedan svaki puta kad stavimo element A[j] u B. Dekrementacija C[A[j]] znači da će sljedeći element s vrijednosti jednakom onoj od A[j], ako postoji, biti postavljen točno 7

11 jedno mjesto prije A[j] u izlaznom nizu. Analizirajmo sada izvršno vrijeme counting sorta. For petlja u linijama 2-3 Θ(k) vremena, for petlja u linijama 4-5 zahtijeva Θ(n) vremena, for petlja u linijama 7-8 zahtijeva Θ(k), a petlja u linijama zahtijeva Θ(n) vremena. Stoga je ukupno vrijeme izvršenja Θ(k + n). U praksi, counting sort obično koristimo kad je k = O(n) te je tada vrijeme izvršenja zapravo Θ(n). No, pogledajmo sada koliko dodatne memorije koristi counting sort. Prvo imamo izlazni niz B koji će sadržavati sortirani niz te kao takav zahtijeva Θ(n) memorije. Zatim, već u prvoj liniji imamo niz C[1..k] koji očito koristi Θ(k) memorije. Osim nizova B i C imamo još brojače (cijele brojeve) i i j čija veličina ne ovisi o ulaznom nizu A te koriste Θ(1) memorije. Dakle, ukupna memorija koju koristi counting sort, osim one za samu pohranu ulaznog niza A, je jednaka Θ(n + k). Ako pretpostavimo da je k = O(n), onda dodatna memorija koju koristi counting sort odgovara Θ(n). Kako counting sort ne sortira uspoređivanjem, on može biti (i jest) brži od donje granice Ω(n lg n) dokazane u poglavlju 1.1. Štoviše, u cijelom kodu counting sorta ne postoji ni jedno uspoređivanje. Umjesto toga, counting sort koristi vrijednosti elemenata da bi odredio njihovo konačno mjesto u nizu. Odavde možemo vidjeti da donja granica od Ω(n lg n) ne vrijedi ako se udaljimo od modela sortiranja uspoređivanjem. S druge strane, valja primijetiti da counting sort koristi Θ(n + k) dodatne memorije, u odnosu na, primjerice, quick sort koji radi u mjestu. Iz posljednje for petlje u linijama lako se vidi da je counting sort stabilan. Osim što je ovo svojstvo važno kod sortiranja složenijih nizova (onih gdje elementi sadrže satelitske podatke), stabilnost counting sorta nam je važna iz još jednog razloga: counting sort se često koristi kao potprogram unutar radix sorta. A, kao što ćemo vidjeti u sljedećem poglavlju, da bi radix sort radio pravilno, counting sort mora biti stabilan Radix sort Radix sort je algoritam koji su koristili strojevi za sortiranje bušenih kartica, kakve danas možemo vidjeti samo u tehničkim muzejima. Kartice imaju 80 stupaca te 12 mjesta u svakom stupcu na kojemu može biti probušena rupa. Mašina za sortiranje je mehanički programirana da pregleda određeni stupac i rasporedi kartice u 12 odjeljaka, ovisno o tome na kojem mjestu je kartica probušena. Nakon toga bi operater prikupio kartice iz svih odjeljaka te ih redom složio tako da su na vrhu one kartice koje imaju probušeno prvo mjesto u datom stupcu, zatim one koje imaju probušeno drugo mjesto itd. Za decimalne brojeve, svaki stupac bi trebao sadržavati 10 mjesta, a broj s d znamenaka bi trebao d stupaca. Kako stroj za sortiranje može pregledati samo jedan stupac odjednom, da bismo sortirali n kartica koje sadrže d-znamenkaste brojeve, potreban 8

12 nam je algoritam za sortiranje. Intuitivno, mogli bismo početi sortirati po najznačajnijoj znamenci te svaki odjeljak sortirati rekurzivno, a zatim posložiti redom sve kartice počevši s odjeljkom 1, zatim odjeljkom 2 itd. Upravo opisana metoda se naziva MSD-radix sort (MSD = most significant digit). Problem koji se javlja kod te metode jest veliki broj potrebnih odjeljaka. Na primjer, da bismo sortirali naše kartice s početka priče, u najgorem slučaju bi nam bilo potrebno različitih odjeljaka. Metoda koja će nas više zanimati u ovome radu jest LSD-radix sort (LSD = least significant digit), koju ćemo nadalje zvati jednostavno radix sort. Prema [3], prva objavljena referenca na ovaj princip sortiranja se pojavljuje u raspravi L. J. Comriea o opremi za bušene kartice [Transactions of Office Machinery Users Assoc., Ltd. (1929), 25-37, esp. p. 28]. Ovaj algoritam je vrlo sličan prethodno opisanom MSD-radix sortu. Razlika je u tome što se prvo sortira po posljednjoj, najmanje značajnoj, znamenci, zatim po pretposljednjoj itd. No, umjesto da se svaki odjeljak sortira rekurzivno, nakon sortiranja po jednoj znamenci kartice se redom prikupljaju u jedan špil i sortiranje počinje ponovo po sljedećoj znamenci. Da bi ova metoda pravilno radila, algoritam koji sortira prema znamenkama mora biti stabilan i operater koji prikuplja kartice iz odjeljaka ne smije mjenjati njihov redosljed čak ni ako se sve nalaze u istom odjeljku. Slika 1.4: Primjer rada radix sorta na nizu od 7 troznamenkastih brojeva. Prvi stupac lijevo je ulazni niz. Ostali stupci prikazuju iteracije sortiranja po znamenkama sve veće značajnosti. Sjenčanje označava znamenku po kojoj se sortira. Pseudokod radix sorta je prilično jednostavan. Sljedeća procedura pretpostavlja da svaki od n elementa niza A ima d znamenaka, gdje je 1 najmanje značajna, a d, pak, najznačajnija znamenka. Radix-Sort(A, d) 1 for i = 1 to d 2 koristeći stabilan algoritam za sortiranje sortiraj niz A po znamenci i Da u liniji 2 nismo zahtijevali stabilnost algoritma koji sortira po i-toj znamenci, moglo bi se dogoditi da po završetku rada radix sorta niz A ne bude pravilno sortiran, što je ilustrirano na slici 1.5. Do toga dolazi jer nestabilan algoritam ne zadržava relativni poredak elemenata s jednakim vrijednostima te sortiranjem po znamenci veće 9

13 značajnosti može pokvariti redoslije dobiven sortiranjem po manje značajnoj znamenci. Slika 1.5: Primjer rada radix sorta koji koristi nestabilni algoritam za sortiranje po i-toj znamenci. Zbog nestabilnosti u drugom stupcu su zamjenjeni brojevi 720 i 329. Slično, u trećem stupcu je promjenjen redoslijed brojeva 355 i 329 te 457 i 436, što rezultira nepravilno sortiranim nizom. Propozicija 1.1. Neka je dano n d-znamenkastih brojeva i neka svaka znamenka može poprimiti jednu od najviše k mogućih vrijednosti. Tada Radix-Sort sortira te brojeve u Θ(d(n + k)) vremenu, ako stabilni algoritam koji koristi zahtijeva Θ(n + k) vremena. Dokaz. Točnost radix sorta se lako dokazuje indukcijom po broju znamenaka. Vrijeme izvršenja ovisi o stabilnom algoritmu za sortiranje koji se koristi. Kada je svaka znamenka iz skupa {0, 1, 2,..., k 1}, uz pretpostavku da k nije suviše velik, counting sort se nameće kao očiti izbor. Svaki prolaz kroz n d-znamenkastih brojeva onda zahtijeva Θ(n + k) vremena, a kako se taj postupak mora ponoviti d puta, ukupno vrijeme izvršenja radix sorta jest Θ(d(n + k)). Dakle, kad je d konstanta i k = O(n), radix sort radi u linearnom vremenu. Općenito, ovisno o računalnom zapisu, broj možemo razbiti na različite načine na znamenke. Propozicija 1.2. Neka je dano n b-bitnih brojeva te neki pozitivan cijeli broj r b. Radix-Sort sortira te brojeve u Θ((b/r)(n+2 r )) vremenu. Uz pretpostavku da stabilan algoritam za sortiranje koji se koristi zahtijeva Θ(n + k) vremena, za elemente iz skupa {0, 1, 2,..., k}. Dokaz. Za svaki r b, na broj gledamo kao da ima d = b/r znamenaka od r bitova. Svaka znamenka je cijeli broj iz skupa {0, 1,..., 2 r 1}, tako da možemo koristiti counting sort za k = 2 r 1. Na primjer, na 32-bitnu riječ možemo gledati kao da ima četiri 8-bitne znamenke, tako da je b = 32, r = 8, k = 2 r 1 = 255 i d = b/r = 4. Svaki prolaz counting sorta nas košta Θ(n+k) = Θ(n+2 r ), a kako imamo d prolaza, ukupno vrijeme izvršenja je Θ(d(n + 2 r )) = Θ((b/r)(n + 2 r )). Pokušajmo sada, za dane n i b, odrediti takav r b da je izraz (b/r)(n + 2 r ) minimalan. Ako je b lg n, tada je za bilo koji r b, n+2 r = Θ(n). Stoga, uzimajući r = b dobivamo da je vrijeme izvršenja (b/b)(n + 2 b ) = Θ(n), što je asimptotski optimalno. Ako je b lg n uzimajući r = lg n, dobivamo asimptotski gledano 10

14 najbolje vrijeme od Θ(bn/ lg n). Kada bismo povećali r iznad lg n, tada bi izraz 2 r u brojniku brže rastao nego izraz r u nazivniku te bismo tako dobili izvršno vrijeme iznad Ω(bn/ lg n). Kad bismo, s druge strane, smanjili r ispod lg n, tada bi izraz b/r rastao, dok bi izraz n + 2 r ostao jednak Θ(n). Je li radix sort zaista, u praksi, brži od algoritama za sortiranje baziranih na uspoređivanju, kao što je primjerice quick sort? Ako je b = O(lg n), što je često slučaj, i ako odaberemo r lg n, tada je izvršno vrijeme radix sorta Θ(n), što je bolje od očekivanog vremena izvršenja quick sorta od Θ(n lg n). No, konstantni faktori skriveni asimptotskom notacijom se razlikuju. U poglavlju 2 ćemo vidjeti da je za velike n radix sort zaista brži. Ono na što, također, treba obratiti pažnju jest činjenica da verzija radix sorta koja koristi counting sort za stabilno sortiranje, ne sortira u mjestu, već koristi Θ(n + 2 r ) dodatne memorije. Dakle, kada je opterećenje memorije na vrhuncu, možda bi bilo bolje koristiti algoritam koji radi u mjestu, kao što je quick sort. Osim toga, treba primijetiti da se LSD-radix sort ne može u potpunosti paralelizirati (jer se sortiranja po znamenkama, koja obavlja counting sort, moraju odvijati sekvencijalno) za razliku od, primjerice, quick sorta ili merge sorta Bucket sort Bucket sort pretpostavlja da su ulazni podaci iz uniformne distribucije i ima očekivano vrijeme izvršenja jednako Θ(n). Kao i counting, bucket sort je brz jer prtpostavlja nešto o ulaznom nizu. Dok counting sort pretpostavlja da su ulazni podaci cijeli brojevi iz skupa {0, 1, 2,..., k}, gdje je k relativno malen, bucket sort pretpostavlja da su ulazni podaci dobiveni slučajnim procesom koji distribuira elemente uniformno i nezavisno na intervalu [0, 1). Bucket sort dijeli interval [0, 1) na n podintervala (bucket) jednake duljine te raspoređuje n ulaznih brojeva u te podintervale. Kako su podaci uniformno raspoređeni na intervalu [0, 1), očekujemo da će se u svakom podintervalu nalaziti podjednako malen broj elemenata. Da bismo dobili izlazni niz, jednostavno sortiramo elemente u svakom od podintervala te redom spojimo sve podintervale. U pseudokodu za bucket sort pretpostavljamo da je A ulazni niz od n elemenata te da svaki element A[i] zadovoljava 0 A[i] < 1. Potreban nam je dodatni niz B[0,..., n 1] vezanih listi (bucket), uz pretpostavku da postoji mehanizam za održavanje takvih listi. 11

15 Slika 1.6: Procedura bucket sort za n = 10. (a) Ulazni niz A[1..10]. (b) Niz B[0..9] sortiranih listi (bucket) nakon izvršenja linije 8. Lista i vrijednosti iz intervala [1/10, (i + 1)/10). Sortirani izlazni niz je sastavljen od redom spojenih listi B[0], B[1],..., B[9]. Bucket-Sort(A) 1 n= length(a) 2 neka je B[0,..., n 1] novi niz (polje) 3 for i = 0 to n 1 4 neka je B[i] prazna lista 5 for i = 1 to n 6 umetni A[i] u listu B[ na[i] ] 7 for i = 0 to n 1 8 sortiraj listu B[i] insertion sortom 9 redom spoji liste B[0], B[1],..., B[n 1] Slika 1.6 prikazuje rad procedure bucket sort na nizu od 10 brojeva. Da bismo se uvjerili da algoritam zaista radi, promotrimo dva elementa A[i] i A[j]. Bez smanjenja općenitosti pretpostavimo da je A[i] A[j]. Kako je na[i] na[j], element A[i] ide ili u istu listu kao i A[j] ili u listu s manjim indeksom. Ako se A[i] i A[j] nalaze u istoj listi, onda ih for petlja u linijama 7-8 stavlja u pravilan redosljed. Ako se A[i] i A[j] nalaze u različitim listama, tada i linija 9 stavlja u pravilan redosljed. Dakle, bucket sort radi pravilno. Prijeđimo, sada, na analizu izvršnog vremena bucket sorta. Primijetimo da sve linije osim linije 8 zahtijevaju O(n) vremena u najgorem slučaju. Dakle, trebamo analizirati ukupno vrijeme potrebno za n poziva insertion sorta u liniji 8. U svrhu analize poziva insertion sorta, neka je n i slučajna varijabla kojom modeliramo broj elemenata u listi B[i]. Kako insertion sort ima kvadratno vrijeme izvršenja, vrijedi da je izvršno vrijeme bucket sorta jednako T (n) = Θ(n) + 12 n 1 i=0 O(n 2 i ).

16 Odredimo, sada, očekivano vrijeme izvršenja bucket sorta. Uzimajući očekivanje na obje strane te koristaći linearnost očekivanja, imamo Tvrdimo da je E[T (n)] = E [ Θ(n) + = Θ(n) + = Θ(n) + n 1 i=0 n 1 i=0 n 1 i=0 O(n 2 i ) E[O(n 2 i )] ] O(E[n 2 i ]). (1.1) E[n 2 i ] = 2 1, i = 0, 1,..., n 1. (1.2) n Svaka lista i ima istu vrijednost E[n 2 i ], jer svaki element ulaznog niza A s jednakom vjerojatnošću upada u bilo koju od listi. Da bismo dokazali jenadžbu (1.2), definirajmo indikator slučajnu varijablu Odakle slijedi da je X ij = I{A[j] upada u listu i}, i = 0, 1,..., n 1, j = 1, 2,..., n. Izračunajmo, sada, E[n 2 i ]. n n i = X ij. j=1 2 E[n 2 n i ] = E X ij j=0 n n = E X ij X ik j=1 k=1 n = E Xij 2 + j=1 1 j n = n E[Xij] 2 + j=1 1 j n 1 k n k j 1 k n k j X ij X ik E[X ij X ik ] (1.3) Promotrimo dvije sume posebno. Kako je indikator slučajna varijabla jednaka 1 s vjerojatnošću 1/n i 0 inače, slijedi da je E[Xij] 2 = ( n ) = 1 n n. Kada je k j, varijable X ij i X ik su nezavisne te je E[X ij X ik ] = E[X ij ]E[X ik ] = 1 n 1 n = 1 n 2. 13

17 Supstituirajući te vrijednosti nazad u jednadžbu (1.3), dobivamo E[n 2 i ] = n j=1 1 n + 1 j n 1 k n k j 1 n 2 = n 1 n + n(n 1) 1 n 2 = 1 + n 1 n = 2 1 n, čime je jednadžba (1.2) dokazana. Koristeći tu činjenicu u jednadžbi (1.1), možemo zaključiti da je očekivano vrijeme izvršenja bucket sorta jednako Θ(n) + n O(2 1/n) = Θ(n). Iz prethodne rasprave možemo zaključiti da pretpostavka o uniformnoj distribuciji nije nužna, da bi izvršno vrijeme bucket sorta bilo linearno. Dovoljno je da suma kvadrata broja elemenata u listama B[i] bude linearna u odnosu na ukupan broj elemenata ulaznog niza, a za to je dovoljno da vjerojatnosti da slučajno izabrani element upadne u bilo koju od listi budu međusobno jednake, tj. X ij = 1/n, i = 0, 1,..., n 1, j = 1, 2,..., n. Dakle, da bi očekivano vrijeme izvršenja bucket sorta bilo linearno, dovoljno je poznavati distribuciju (funkciju distribucije) iz koje dolaze ulazni podaci te prema tome odrediti granice podintervala tako da se u svakoj listi B[i] nalazi približno jednak broj elemenata ulaznog niza A. Primijetimo još da bucket sort koristi dodatni niz B, što znači da zahtijeva Θ(n) dodatne memorije. Najveća prednost bucket sorta, u odnosu na druge algoritme za sortiranje u linearnom vremenu, leži u činjenici da se bucket sort može lako i prirodno paralelizirati Flash sort Flash sort, kao i bucket sort, pretpostavlja da podaci dolaze iz uniformne distribucije te mu je očekivano vrijeme izvršenja jednako Θ(n). Ono što flash sort razlikuje od bucket sorta jest činjenica da flash sort obavlja sortiranje u mjestu. Umjesto da elemente početnog niza A stavlja u novi niz B, kako to radi bucket sort, flash sort koristi samo dodatni niz L[0,..., m 1] kako bi odredio koliko elemenata treba staviti u svaku od m klasa, a zatim premještajući elemente unutar niza A stavlja odgovarajuće elemente u pripadne klase. Niz L dobivamo slično kao niz C u counting sortu, samo što umjesto doslovnog prebrojavanja elemenata, prebrojavamo koliko elemenata pripada svakoj od m klasa, tako da na kraju L[i] sadrži ukupan broj elemenata u svim klasama od 0 do i. Nakon toga krećemo s permutacijama (premještanjima) elemenata unutar početnog niza A, 14

18 koje se odvijaju na sljedeći način. Uzmemo element A[i], odredimo klasu k kojoj taj element pripada te A[i] stavimo na mjesto L[k] (prvo nepopunjeno mjesto u klasi k), a element koji se prije nalazio na tom mjestu pamtimo, jer ćemo permutacije nastaviti upravo s tim elementom. Zatim L[k] smanjujemo za jedan jer smo popunili jedno mjesto u klasi k. Može se dogoditi da tako premještajući elemente završimo na onom mjestu s kojeg smo krenuli i prije nego što smo sve elemente stavili u pripadne klase. To znači da je završio jedan ciklus permutacija te je potrebno pronaći element s kojim možemo započeti sljedeći ciklus. Za početak ciklusa jednostavno odabiremo prvi element koji se ne nalazi u odgovarajućoj klasi. Sve pemutacije se završavaju nakon n 1 izvršenih premještanja elemenata, jer ako smo n 1 elemenata stavili u odgovarajuće klase, to znači da se i n-ti element nalazi u odgovarajućoj klasi. U pseudokodu za flash sort pretpostavljamo da je A ulazni niz od n elemenata te da svaki element A[i] zadovoljava 0 A[i] < 1. Također nam je potreban pomoćni niz L[0,..., m 1]. Flash-Sort(A) 1 n = length(a) 2 neka je L[0,..., m 1] novi niz (polje) 3 for i = 0 to m 1 4 L[i] = 0 5 for i = 1 to n 6 L[ ma[i] ] = L[ ma[i] ] //L[i] sad sadrži broj elemenata u klasi i 8 for i = 1 to m 1 9 L[i] = L[i] + L[i 1] 10 //L[i] sad sadrži broj elemenata u svim klasama i, odnosno gornju granicu klase i 11 hold =max(a), A[1] = hold, nmove = 0, i = 0, k = m 1 12 //nmove = broj izvršenih premutacija, k = klasa trenutno promatranog elementa 13 while nmove n 1 14 while i > L[k] 1 15 i = i k = ma[i] 17 flash = A[i] 18 while i L[k] 19 k = m flash 20 hold = A[L[k]] 21 A[L[k]] = flash 22 flash = hold 23 L[k] = L[k] 1 24 nmove = nmove sortiraj niz A insertion sortom Slika 1.7 prikazuje odvijanje zamjena u mjestu na nizu od 7 elemenata u slučaju kad se konačna permutacija sastoji od jednog (a) odnosno dva ciklusa (b). 15

19 Slika 1.7: Primjer rada flash sorta za n = 7 i m = 7. (a) Permutacije u mjestu se odvijaju u jednom ciklusu. (b) Permutacije se odvijaju u dva ciklusa. Petlja while u linijama osigurava da ukupni broj premještanja elemenata ne bude veći od n, jer je to dovoljno da bi se svi elementi posložili u odgovarajuće klase. Petlja while u linijama stavlja element f lash u odgovarajuću klasu u slučaju da postoje slobodna mjesta u toj klasi, u protivnom, znači da je trenutni ciklus je završio te while petlja u linijama pronalazi početak novog ciklusa. Da bismo provjerili ispravnost algoritma, promotrimo elemente A[i] i A[j]. Bez smanjenja općenitosti neka je A[i] A[j]. Promotrimo slučaj kad je i < j, slučaj kad je i > j se dokazuje analogno. Kako je A[i] A[j], element A[i] ide u istu klasu kao i A[j] ili u klasu s nižim indeksom. Ako elemente A[i] i A[j] treba staviti u istu klasu, treba pokazati da će ih algoritam postaviti na različita mjesta unutar te klase. A, tomu je tako jer element A[i] linija 21 stavlja na mjesto L[ m flash ] u nizu A, nakon čega se L[ m flash ] dekrementira u liniji 23 te tako više ni jedan element neće biti stavljen na to mjesto. Konačno, linija 25 elemente A[i] i A[j] stavlja u pravi poredak. Ako se A[i] i A[j] smještaju u različite klase, onda se samim time nalaze u odgovarajućem poretku. Analizirajmo sada izvršno vrijeme flash sorta. Petlja for u linijama 5-6 zahtijeva Θ(n) vremena. For petlje u linijama 3-4 te 8-9 zahtijevaju Θ(m) vremena. Kako je u praksi m = n/k za neku malu konstantu k, znači da sve tri for petlje zahtijevaju Θ(n) vremena. While petlja u linijama se očito odvija n puta jer se svaki element stavlja u odgavarajuću klasu samo jednom. Provjerimo još vremensku složenost while petlje u linijama Algoritam će ući u tu petlju c 1 puta, gdje je c broj ciklusa potrebnih da bismo došli do konačne permutacije. No, valja primijetiti da ukupan broj prolazaka kroz petlju, bez obzira na broj ciklusa, ne može biti veći od n 1, jer petlja svaki puta kreće od onog elementa i na kojemu je zadnji puta stala. Ostaje za provjeriti izvršno vrijeme linije 25. Kako izvršno vrijeme insertion sorta ovisi o sumi udaljenosti elmenata od njihovih pravih mjesta, pozivanje insertion sorta na cijeli niza 16

20 A je ekvivalentno pozivanju insertion sorta na svaku od m klasa posebno. A, kako smo vidjeli u prethodnom poglavlju, dovoljan uvijet da bi izvršno vrijeme m poziva insertion sorta bilo linearno jest da svaka klasa sadrži približno jednak broj (n/m) elemenata. Lako je vidjeti da su bucket sort i flash sort vrlo slični. Ono što ih razlikuje jest činjenica da bucket sort koristi dodatni niz da bi premjestio elemente u odgovarajuće klase, dok flash sort radi u mjestu te na taj način koristi manje memorije. No, štedeći memoriju flash sort postaje nešto (konstantno puta) sporiji, u odnosu na bucket sort, u što ćemo se i uvjeriti u sljedećem poglavlju. 17

21 Poglavlje 2 Testiranje algoritama za sortiranje U prethodnom poglavlju smo proučili četiri algoritma za sortiranje, koji pod određenim pretpostavkama imaju linearno vrijeme izvršenja, što znači da bi ti algoritmi trebali biti brži od bilo kojeg algoritma koji sortira uspoređivanjem, pod uvjetom da je niz koji se sortira dovoljno velik. U ovom poglavlju ćemo provjeriti koliko su ti algoritmi zaista brzi u praksi te kako promjene određenih parametara, kao što su veličina niza, raspon i tip podataka, utječu na njihove preformanse. Svi algoritmi su implementirani u programskom jeziku C++. Implementacija radix sorta je rad A. Reinalda, P. Harrisa, R. Rohera i D. Jagdmanna [2]. Naime, riječ je o veoma dobro optimiziranoj implementaciji koja dobro radi na veoma različitim tipovima podataka, u što ćemo se i uvjeriti u ostatku ovog poglavlja. Ostale algoritme (counting sort, bucket sort i flash sort) sam implementirao samostalno. Vrijeme izvršenja je mjereno funkcijom clock() iz ctime biblioteke te uspoređeno s STL (Standard Template Libary) funkcijom sort(). Funkcija sort() jest zapravo implementacija intro sorta standardno ugrađena u Microsoft Visual Studio C++ te kao takva pretstavlja optimalnu klasu algoritama za sortiranje uspoređivanjem, tj. njeno vrijeme izvršenja je jednako Θ(n lg n). Ova implementacija intro sorta, ukratko, radi na sljedeći način: Za sortiranje se koristi median od 3 quick sort ("median od 3" znači da se za pivotni element odabire medinan od prvog, srednjeg i posljednjeg elementa, tj. p = med {A[1], A[n/2], A[n]}.) sve dok je broj particija, početnog niza od n elemenata, manji od 1.5 lg n. Ako se ta granica pređe, koristi se heap sort. Također, za n 32 se koristi insertion sort. Kako funkcija sort() radi u Θ(n lg n) vremenu, dok preostala četiri algoritma rade u linearnom vremenu. Kada kažemo da ti algoritmi rade u linearnom vremenu, na umu trebamo imati da za takvo što moraju biti ispunjene određene pretpostavke, tj. raspon podataka mora biti relativno malen za counting sort, dok za bucket sort i flash sort moramo poznavati distribuciju iz koje dolaze podaci. Pod uvjetom da su te pretpostavke ispunjene, za očekivati je da će za dovoljno velike n ti algoritmi biti brži od funkcije sort(). Za koje n ti algoritmi zaista postaju brži možemo vidjeti u tablici 2.1 te na slici

22 n counting sort radix sort bucket sort flash sort sort() Tablica 2.1: Vremena izvršenja, mjerena u mikrosekundama, za različite n (duljine niza) koji se sortira. Mjerenja su vršena na nizovima od n uniformno distribuiranih cijelih brojeva iz segmenta [0, 32767]. Za razliku od ostalih mjerenja, vremena izvršenja iz tablice 2.1 su, radi veće preciznosti, mjerena pomoću funkcija QueryPerformanceCounter i QueryPerformanceFrequency iz Windows.h biblioteke. Slika 2.1 zorno prikazuje kako izvršno vrijeme funkcije sort() raste znatno brže nego što je to slučaj kod preostala četiri algoritma, što je, poznavajući složenost testiranih algoritama, i bilo za očekivati. Također, valja napomenuti da se testirane implementacije algoritama za sortiranje u linearnom vremenu mogu dodatno ubrzati, za male n, koristeći insertion sort, kako to radi i sama funkcija sort(). n counting sort radix sort bucket sort flash sort sort() Tablica 2.2: Vremena izvršenja, mjerena u milisekundama, za različite n (duljine niza) koji se sortira. Mjerenja su vršena na nizovima od n uniformno distribuiranih cijelih brojeva iz segmenta [0, 32767]. Na slici 2.2 vidimo da su sva četiri algoritma za sortiranje u linearnom vremenu brži 19

23 Slika 2.1: Grafički prikaz vremena izvršenja iz tablice 2.1. Slika 2.2: Grafički prikaz vremena izvršenja iz tablice

24 od funkcije sort(), što je u skladu s našom pretpostavkom s početka ovog poglavlja. Primijetimo da se bucket sort i flash sort ponašaju vrlo slično, samo što je flash sort malo sporiji. To usporenje flash sort duguje činjenici da obavlja permutacije elemenata u mjestu, no iz istog razloga koristi nešto manje memorije. Također, zanimljivo je da podaci iz tablice 2.2 pokazuju da je radix sort koji koristi counting sort za stabilno sortiranje sporiji od samog counting sorta. Zašto bismo onda uopće željeli koristiti radix sort koji ima složeniji kod, a sporiji je od counting sorta? k counting sort radix sort bucket sort flash sort sort() Tablica 2.3: Vremena izvršenja za različite k (raspone podataka). Mjerenja su vršena na nizovima od n = uniformno distribuiranih cijelih brojeva iz segmenta [0, k 1]. Kao što vidimo u tablici 2.3, odnosno na slici 2.3, što je raspon podataka k veći, to je counting sort sporiji, što je očekivano, uzmemo li u obzir da je vrijeme izvršenja counting sorta Θ(n + k). S druge strane, ni jedan od preostala četiri algoritma, pa tako ni radix sort, očito ne ovisi o k. To smo mogli i očekivati jer testirana implementacija radix sorta radi na znamenkama od 8 bitova pa je k = = 255, bez obzira na ukupni raspon podataka. Također, očekivana vremena izvršenja bucket sorta i flash sorta ovise isključivo o tome jesu li elementi ulaznog niza u jednakom broju raspoređeni među klasama koje se kasnije sortiraju insertion sortom. Znači, za malene k counting sort je brz, no ako je k velik, radix sort se nameće kao bolji izbor. Promotrimo sada što se događa promijenimo li duljinu bitnog zapisa. Kao što vidimo na slici 2.4, vrijeme izvršenja svih algoritama, osim funcije sort(), raste s porastom duljine bitnog zapisa. To je zato što operacije pridruživanja (=), koje čine velik dio izvršnog vremena kod tih algoritama, "koštaju" nešto više, za dulji bitni zapis. 21

25 Slika 2.3: Grafički prikaz vremena izvršenja iz tablice 2.3. Slika 2.4: Grafički prikaz vremena izvršenja iz tablice

26 b counting sort radix sort bucket sort flash sort sort() Tablica 2.4: Vremena izvršenja za različite b (duljine bitnog zapisa). Mjerenja su vršena na nizovima veličine n = uniformno distribuiranih cijelih brojeva iz segmenta [0, 255]. Tip podataka korišten u testiranju je b-bitni unsigned integer. No, od svih algoritama, posebno se ističe radix sort, čije vrijeme izvršenja rasta znatno brže nego kod ostalih. To je u skladu s propozicijom 1.2, prema kojoj je složenost algoritma radix sorta jednaka Θ((b/r)(n+2 r )), što znači da izvršno vrijeme radix sorta linearno ovisi o duljini bitnog zapisa b. Dosad smo se isključivo bavili nizovima čiji su elementi uniformno distribuirani cijeli brojevi, na kojima bucket sort i flash sort imaju linearno očekivano vrijeme izvršenja. Promotrimo sada što se događa kada ako brojevi nisu iz uniformne distribucije. radix sort bucket sort flash sort sort() n unif Cauchy unif Cauchy unif Cauchy unif Cauchy Tablica 2.5: Usporedba vremena izvršenja. U neparnim stupcima su vremena izvršenja za uniformno distribuirane cijele brojeve iz segmenta [0, 32767], a u parnim, vremena izvršenja za slučajno generirane brojeve iz Cauchijeve distribucije. U tablici 2.5 su navedena vremena izvršenja, u milisekundama, za pojedine algoritme, mjerena na slučajno generiranim brojevima iz uniformne, odnosno Cauchyjeve distribucije pri čemu je F (x) = arctg x + 1 funkcija distribucije Cauchyjeve slučajne π 2 varijable. Kao što možemo vidjeti na slici 2.6 bucket sort i flash sort su znatno sporiji na podacima iz Cauchijeve distribucije nego na podacima iz uniformne distribucije, dok 23

27 Slika 2.5: Funkcija gustoće Cauchyjeve slučajne varijable s crveno označenim podintervalima. (a) vjerojatnost da se slučajno odabrani element iz Cauchijeve distribucije nalazi u bilo kojem od 10 podintervala je jedna 1/10, (b) ekvidistantna podjela podintervala. Cauchijeva distribucija generira najviše brojeva bliskih nuli te su podintervali blizu nule najkraći. vremena izvršenja radix sort i STL funkcije sort() ne ovise o distribuciji iz koje dolaze dani podaci. Bucket sort i flash sort su tako spori jer u neke klase smještaju malo, a u neke veoma mnogo elemenata te tako ne uspijevaju iskoristiti brzinu insertion sorta koja se očituje samo na nizovima s malim brojem elemenata. Tomu je tako jer, pretpostavljajući uniformnu distribuciju podataka, bucket sort i flash sort cijeli interval, iz kojeg dolaze podaci, dijele na podintervale jednake veličine (kao na slici 2.5 (b)), a kako Cauchyjeva slučajna varijabla generira najviše brojeva bliskih nuli i vrlo malo svih ostalih brojeva, to znači da će u podintervale blizu nule biti smješteno daleko najviše elemenata ulaznog niza. Primijetimo da radix sort ovdje radi na brojevima koji dolaze iz Cauchyjeve distribucije i koji su kao takvi racionalni, iako smo u poglavlju 1.3. zahtijevali da podaci nad kojima radi radix sort budu cijeli brojevi. U testiranoj implementaciji radix sorta to je postignuto korištenjem operatora reinterpret_cast, koji se koristi za prevođenje racionalnog tipa podataka u odgovarajući cjelobrojni tip. Naime, kada unutar radix sorta koristimo counting sort za sortiranje po i-toj znamenci (u testiranoj implementaciji i-tu znamenku čini i-ti bayte), problem se pojavljuje u petoj liniji našeg 24

28 Slika 2.6: Grafički prikaz vremena izvršenja iz tablice 2.5. pseudokoda counting sorta. 4 for j = 1 to length(a) 5 C[A[j]] = C[A[j]] + 1 Kao što vidimo kao indeks niza C se koristi element ulaznog niza A[j] koji je racionalan broj, a indeks niza može biti samo nenegativan cijeli broj. Zato se u testiranoj implementaciji u liniji 5 umjesto A[j] koristi reinterpret_cast<int8 >(&A[j]), (2.1) gdje je int8 8-bitni cijeli broj. int8 se koristi jer se sortiranje odvija po i-toj znamenci koja se također sastoji od 8 bitova. Rezultat izraza 2.1 je 8-bitni cijeli broj dobiven jednostavnim kopiranjem binarnog zapisa od A[j] koji se zatim interpretira kao cjelobrojni tip podataka int8. Valja napomenuti da duljina bitnog zapisa znamenke po kojoj se sortira mora biti jednaka duljini bitnog zapisa cjelobrojnog tipa podataka u koji se ta znamenka prevodi. U protivnom, kada bismo primjerice 16-bitnu znamenku (racionalnog broja) pretvarali u 8-bitni cijeli broj, moglo bi se dogoditi da se dvije različite znamenke preslikaju u isti cijeli broj. Kao što smo vidjeli u poglavljima 1.4. i 1.5., da bi bucket sort i flash sort imali linearno očekivano vrijeme izvršenja, nije neophodno da podaci dolaze iz uniformne distribucije. Dovoljno je da se u svakom od podinetrvala nalazi približno jednak broj elemenata niza. Za uniformnu distribuciju U(0, 1), klasu koju ćemo staviti element x se određuje formulom k = nx, gdje je k redni broj klase, a n broj elemenata niza koji se sortira. Za uniformnu distribuciju s parametrima a i b, U(a, b), odgovarajuća 25

29 formula glasi n(x a) k =. b a Ta formula je korištena u našim implementacijama bucket sorta i flash sorta. Primijetimo da su x te (x a)/(b a) zapravo karakteristični dijelovi funkcija distribucije slučajnih varijabli U(0, 1) i U(a, b), jer su odgovarajuće funkcije distribucije 0, za x 0 F 0,1 (x) = x, za x (0, 1] 1, inače za standardnu uniformnu slučajnu varijablu te 0, za x a x a F a,b (x) =, za x (a, b] b a 1, inače za uniformnu slučajnu varijablu s parametrima a i b. Lako se provjeri da se u općem slučaju redni broj klase u koju treba staviti broj x može odrediti formulom k = nf (x), (2.2) gdje je F (x) funkcija distribucije odgovarajuće slučajne varijable. bucket sort flash sort n unif Cauchy Cauchy[mod] unif Cauchy Cauchy[mod] Tablica 2.6: Usporedba vremena izvršenja. U prva tri stupca se nalaze vremena izvršenja za bucket sort, za podatke iz uniformne distribucije, Cauchyjeve distribucije i Cauchyjeve distribucije s modificiranom formulom za određivanje klase u koju treba staviti određeni element te analogno za flash sort u sljedeća tri stupca. U tablici 2.6 vidimo vremena izvršenja za bucket sort i flash sort mjerena n podacima iz, redom, uniformne distribucije, Cauchyjeve distribucije (podintervali kao na 26

30 slici 2.5 (b)) te iz Cauchyjeve distribucije s prilagođenom formulom za određivanje klase (podintervali kao na slici 2.5 (a)). Preciznije, u ovom slučaju formula glasi k = ( arctg x n + 1 ), π 2 jer je funkcija distribucije Cauchyjeve slučajne varijable F (x) = arctg x π Slika 2.7: Grafički prikaz vremena izvršenja iz tablice 2.6. Na slici 2.7 možemo vidjeti da su algoritmi s modificiranom formulom za izračun klase znatno brži od onog s uobičajenom formulom. Ipak, tako prilagođeni algoritmi nisu jednako brzi kao oni sa standardnom formulom na podacima iz uniformne distribucije. Tomu je tako, jer je izračun same formule za određivanje klase za Cauchyjevu distribuciju, koja se mora računati barem jednom za svaki od n elemenata niza, znatno složeniji nego što je to u slučaju uniformne distribucije. U ovom poglavlju smo vidjeli kako naši algoritmi za sortiranje u linearnom vremenu funkcioniraju u praksi te njihove performanse usporedili sa STL funkcijom sort() koja radi u Θ(n lg n) vremenu. Uspoređujući međusobno vremena izvršenja C++ implementacija tih algoritama na različitim podacima, uočili smo njihove najveće prednosti i mane. Counting sort je brz u slučaju kad je raspon podataka k malen. Brzina radix sorta ovisi o duljini bitnog zapisa koji se koristi za podatke. Ako pogrešno procijenimo distribuciju iz koje dolaze podaci, bucket sort i flash sort postaju veoma spori. Flash sort je na jednakim podacima uvijek sporiji od bucket sorta, ali koristi manje memorije. 27

31 Zaključak Još od početaka razvoja računalne znanosti pa sve do danas problem pronalaženja što efikasnijeg algoritma za sortiranje predstavlja jedno od najistraživanijih područja u informatici. Razlozi za to su mnogostruki, od onih čisto praktičnih kao što su ušteda vremena, novca i energije pa sve do dobro nam poznate akademske znatiželje. U ovom radu smo proučili četiri algoritma koji, pod uvjetom da zadovoljavaju određene pretpostavke, imaju linearno vrijeme izvršenja. Prva dva među njima, counting sort i radix sort, se bave problemom sortiranja cijelih brojeva. No, kao što smo vidjeli u prethodnom poglavlju, takvi algoritmi se lako mogu prilagoditi za rješavanje općeg problema sortiranja, što je i očekivano uzmemo li u obzir način na koji se podaci zapisuju u današnjim računalima. Ni za jedan od algoritama promatranih u ovom radu ne možemo reći da je općenito najbolji, ili pak najbrži, ali možemo reći da su svi uglavnom brži od STL funkcije sort(), osim u nekim posebnim situacijama. Još jedno zanimljivo svojstvo koje smo mogli primijetiti jest proporcionalni odnos između brzine algoritma i potrošnje memorije. O tome koji algoritam za sortiranje je najbolje koristiti u datoj situaciji, ovisi o strukturi ulaznih podataka koje treba sortirati te hardwareu kojim raspolažemo. 28

Projektovanje paralelnih algoritama II

Projektovanje paralelnih algoritama II Projektovanje paralelnih algoritama II Primeri paralelnih algoritama, I deo Paralelni algoritmi za množenje matrica 1 Algoritmi za množenje matrica Ovde su data tri paralelna algoritma: Direktan algoritam

More information

Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek

Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek Algoritam za množenje ulančanih matrica Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek O problemu (1) Neka je A 1, A 2,, A n niz ulančanih matrica duljine n N, gdje su dimenzije matrice

More information

TEORIJA SKUPOVA Zadaci

TEORIJA SKUPOVA Zadaci TEORIJA SKUPOVA Zadai LOGIKA 1 I. godina 1. Zapišite simbolima: ( x nije element skupa S (b) d je član skupa S () F je podskup slupa S (d) Skup S sadrži skup R 2. Neka je S { x;2x 6} = = i neka je b =

More information

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će Permutacije Zadatak. U vreći se nalazi n loptica različitih boja. Iz vreće izvlačimo redom jednu po jednu lopticu i stavljamo jednu pored druge. Koliko različitih redosleda boja možemo da dobijemo? Primer

More information

Mathcad sa algoritmima

Mathcad sa algoritmima P R I M J E R I P R I M J E R I Mathcad sa algoritmima NAREDBE - elementarne obrade - sekvence Primjer 1 Napraviti algoritam za sabiranje dva broja. NAREDBE - elementarne obrade - sekvence Primjer 1 POČETAK

More information

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH MAT-KOL (Banja Luka) XXIII ()(7), -7 http://wwwimviblorg/dmbl/dmblhtm DOI: 75/МК7A ISSN 5-6969 (o) ISSN 986-588 (o) ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA Šefket Arslanagić,

More information

Fajl koji je korišćen može se naći na

Fajl koji je korišćen može se naći na Machine learning Tumačenje matrice konfuzije i podataka Fajl koji je korišćen može se naći na http://www.technologyforge.net/datasets/. Fajl se odnosi na pečurke (Edible mushrooms). Svaka instanca je definisana

More information

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE Linearni model Promatramo jednodimenzionalni linearni model. Y = β 0 + p β k x k + ε k=1 x 1, x 2,..., x p - varijable poticaja (kontrolirane) ε - sl.

More information

Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting

Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting Osječki matematički list 5(2005), 21 28 21 STUDENTSKA RUBRIKA Sortiranje podataka Alfonzo Baumgartner Stjepan Poljak Sažetak. Ovaj rad prikazuje jedno od rješenja problema sortiranja podataka u jednodimenzionalnom

More information

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU MAT KOL Banja Luka) ISSN 0354 6969 p) ISSN 1986 58 o) Vol. XXI )015) 105 115 http://www.imvibl.org/dmbl/dmbl.htm PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU Bernadin Ibrahimpašić 1 Senka Ibrahimpašić

More information

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1 MAT KOL (Banja Luka) ISSN 0354 6969 (p), ISSN 1986 5228 (o) Vol. XXII (1)(2016), 5 19 http://www.imvibl.org/dmbl/dmbl.htm KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU

More information

Red veze za benzen. Slika 1.

Red veze za benzen. Slika 1. Red veze za benzen Benzen C 6 H 6 je aromatično ciklično jedinjenje. Njegove dve rezonantne forme (ili Kekuléove structure), prema teoriji valentne veze (VB) prikazuju se uobičajeno kao na slici 1 a),

More information

Metode praćenja planova

Metode praćenja planova Metode praćenja planova Klasična metoda praćenja Suvremene metode praćenja gantogram mrežni dijagram Metoda vrednovanja funkcionalnosti sustava Gantogram VREMENSKO TRAJANJE AKTIVNOSTI A K T I V N O S T

More information

pretraživanje teksta Knuth-Morris-Pratt algoritam

pretraživanje teksta Knuth-Morris-Pratt algoritam pretraživanje teksta Knuth-Morris-Pratt algoritam Jelena Držaić Oblikovanje i analiza algoritama Mentor: Prof.dr.sc Saša Singer 18. siječnja 2016. 18. siječnja 2016. 1 / 48 Sadržaj 1 Uvod 2 Pretraživanje

More information

ALGORITMI PODIJELI PA VLADAJ

ALGORITMI PODIJELI PA VLADAJ SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Petra Penzer ALGORITMI PODIJELI PA VLADAJ Diplomski rad Voditelj rada: izv.prof.dr.sc. Saša Singer Zagreb, rujan 2016. Ovaj diplomski

More information

Šime Šuljić. Funkcije. Zadavanje funkcije i područje definicije. š2004š 1

Šime Šuljić. Funkcije. Zadavanje funkcije i područje definicije. š2004š 1 Šime Šuljić Funkcije Zadavanje funkcije i područje definicije š2004š 1 Iz povijesti Dvojica Francuza, Pierre de Fermat i Rene Descartes, posebno su zadužila matematiku unijevši ideju koordinatne metode

More information

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama POGLAVLJE 8 Rekurzivni algoritmi U prošlom dijelu upoznali smo kako rekurzije možemo implementirati preko stogova, u ovom dijelu promotriti ćemo probleme koje se mogu izraziti na rekurzivan način Vremenska

More information

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele.

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele. Bubble sort Razmotrimo još jedan vrlo popularan algoritam sortiranja podataka, vrlo sličan prethodnom algoritmu. Algoritam je poznat pod nazivom Bubble sort algoritam (algoritam mehurastog sortiranja),

More information

Metode izračunavanja determinanti matrica n-tog reda

Metode izračunavanja determinanti matrica n-tog reda Osječki matematički list 10(2010), 31 42 31 STUDENTSKA RUBRIKA Metode izračunavanja determinanti matrica n-tog reda Damira Keček Sažetak U članku su opisane metode izračunavanja determinanti matrica n-tog

More information

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ   URL: KLASIFIKACIJA NAIVNI BAJES NIKOLA MILIKIĆ EMAIL: nikola.milikic@fon.bg.ac.rs URL: http://nikola.milikic.info ŠTA JE KLASIFIKACIJA? Zadatak određivanja klase kojoj neka instanca pripada instanca je opisana

More information

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Stela Šeperić KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM Diplomski rad Voditelj rada: doc.dr.sc. Pavle Goldstein Zagreb, Srpanj

More information

Sorting algorithms. Sorting algorithms

Sorting algorithms. Sorting algorithms Properties of sorting algorithms A sorting algorithm is Comparison based If it works by pairwise key comparisons. In place If only a constant number of elements of the input array are ever stored outside

More information

Ariana Trstenjak Kvadratne forme

Ariana Trstenjak Kvadratne forme Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Ariana Trstenjak Kvadratne forme Završni rad Osijek, 014. Sveučilište Josipa Jurja Strossmayera

More information

NIZOVI I REDOVI FUNKCIJA

NIZOVI I REDOVI FUNKCIJA SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Danijela Piškor NIZOVI I REDOVI FUNKCIJA Diplomski rad Voditelj rada: izv. prof. dr. sc. Ljiljana Arambašić Zagreb, rujan 206.

More information

Maja Antolović Algoritmi u teoriji brojeva

Maja Antolović Algoritmi u teoriji brojeva Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku Preddiplomski studij matematike Maja Antolović Algoritmi u teoriji brojeva Završni rad Osijek, 2017. Sveučilište J.J.Strossmayera u Osijeku Odjel

More information

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku DIOFANTSKE JEDNADŽBE

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku DIOFANTSKE JEDNADŽBE Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Violeta Ivšić DIOFANTSKE JEDNADŽBE Završni rad Osijek, 2016. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Violeta Ivšić DIOFANTSKE

More information

Fibonaccijev brojevni sustav

Fibonaccijev brojevni sustav Fibonaccijev brojevni sustav Ljerka Jukić asistentica Odjela za matematiku Sveučilišta u Osijeku, ljukic@mathos.hr Helena Velić studentica Odjela za matematiku Sveučilišta u Osijeku, hvelic@mathos.hr Sažetak

More information

Quasi-Newtonove metode

Quasi-Newtonove metode Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Milan Milinčević Quasi-Newtonove metode Završni rad Osijek, 2016. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Milan Milinčević

More information

Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice

Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice Osječki matematički list 6(2006), 79 84 79 Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice Zlatko Udovičić Sažetak. Geometrijski smisao rješenja sustava od dvije linearne

More information

Metoda parcijalnih najmanjih kvadrata: Regresijski model

Metoda parcijalnih najmanjih kvadrata: Regresijski model Sveučilište u Zagrebu Prirodoslovno-matematički fakultet Matematički odsjek Tamara Sente Metoda parcijalnih najmanjih kvadrata: Regresijski model Diplomski rad Voditelj rada: Izv.prof.dr.sc. Miljenko Huzak

More information

Karakteri konačnih Abelovih grupa

Karakteri konačnih Abelovih grupa Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Matija Klarić Karakteri konačnih Abelovih grupa Završni rad Osijek, 2015. Sveučilište J. J. Strossmayera

More information

Hornerov algoritam i primjene

Hornerov algoritam i primjene Osječki matematički list 7(2007), 99 106 99 STUDENTSKA RUBRIKA Hornerov algoritam i primjene Zoran Tomljanović Sažetak. U ovom članku obrad uje se Hornerov algoritam za efikasno računanje vrijednosti polinoma

More information

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28.

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28. 1 math.e Hrvatski matematički elektronički časopis Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti Banachovi prostori Funkcija udaljenosti obrada podataka optimizacija Aleksandra

More information

GENERALIZIRANI LINEARNI MODELI. PROPENSITY SCORE MATCHING.

GENERALIZIRANI LINEARNI MODELI. PROPENSITY SCORE MATCHING. GENERALIZIRANI LINEARNI MODELI. PROPENSITY SCORE MATCHING. STATISTIƒKI PRAKTIKUM 2 11. VJEšBE GLM ine ²iroku klasu linearnih modela koja obuhva a modele s specijalnim strukturama gre²aka kategorijskim

More information

BROJEVNE KONGRUENCIJE

BROJEVNE KONGRUENCIJE UNIVERZITET U NOVOM SADU PRIRODNO-MATEMATIČKI FAKULTET DEPARTMAN ZA MATEMATIKU I INFORMATIKU Vojko Nestorović BROJEVNE KONGRUENCIJE - MASTER RAD - Mentor, dr Siniša Crvenković Novi Sad, 2011. Sadržaj Predgovor...............................

More information

UNIVERZITET U BEOGRADU MATEMATIČKI FAKULTET

UNIVERZITET U BEOGRADU MATEMATIČKI FAKULTET UNIVERZITET U BEOGRADU MATEMATIČKI FAKULTET MASTER RAD SUFIKSNI NIZ Mentor: Student: Prof. dr Miodrag Živković Slaviša Božović 1014/2011. Beograd, 2015. UVOD... 1 1. OSNOVNI POJMOVI I DEFINICIJE... 2 1.1.

More information

ALGORITAM FAKTORIZACIJE GNFS

ALGORITAM FAKTORIZACIJE GNFS SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ALGORITAM FAKTORIZACIJE GNFS Ivan Fratrić Seminar iz predmeta Sigurnost računalnih sustava ZAGREB, Sažetak Faktorizacija brojeva jedan je od

More information

BROWNOV MOST I KOLMOGOROV-SMIRNOVLJEVA STATISTIKA

BROWNOV MOST I KOLMOGOROV-SMIRNOVLJEVA STATISTIKA SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Nikolina Blažević BROWNOV MOST I KOLMOGOROV-SMIRNOVLJEVA STATISTIKA Diplomski rad Zagreb, veljača 2016. Voditelj rada: doc. dr.

More information

Uvod u relacione baze podataka

Uvod u relacione baze podataka Uvod u relacione baze podataka Ana Spasić 2. čas 1 Mala studentska baza dosije (indeks, ime, prezime, datum rodjenja, mesto rodjenja, datum upisa) predmet (id predmeta, sifra, naziv, bodovi) ispitni rok

More information

Ivan Soldo. Sažetak. U članku se analiziraju različiti načini množenja matrica. Svaki od njih ilustriran je primjerom.

Ivan Soldo. Sažetak. U članku se analiziraju različiti načini množenja matrica. Svaki od njih ilustriran je primjerom. Osječki matematički list 5(005), 8 Različiti načini množenja matrica Ivan Soldo Sažetak U članku se analiziraju različiti načini množenja matrica Svaki od njih ilustriran je primjerom Ključne riječi: linearni

More information

Prsten cijelih brojeva

Prsten cijelih brojeva SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ODJEL ZA MATEMATIKU Marijana Pravdić Prsten cijelih brojeva Diplomski rad Osijek, 2017. SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ODJEL ZA MATEMATIKU

More information

Pitagorine trojke. Uvod

Pitagorine trojke. Uvod Pitagorine trojke Uvod Ivan Soldo 1, Ivana Vuksanović 2 Pitagora, grčki filozof i znanstvenik, često se prikazuje kao prvi pravi matematičar. Ro - den je na grčkom otoku Samosu, kao sin bogatog i zaslužnog

More information

Matrice u Maple-u. Upisivanje matrica

Matrice u Maple-u. Upisivanje matrica Matrice u Maple-u Tvrtko Tadić U prošlom broju upoznali ste se s matricama, a u ovom broju vidjeli ste neke njihove primjene. Mnoge je vjerojatno prepalo računanje s matricama. Pa tko će raditi svo to

More information

Funkcijske jednadºbe

Funkcijske jednadºbe MEMO pripreme 2015. Marin Petkovi, 9. 6. 2015. Funkcijske jednadºbe Uvod i osnovne ideje U ovom predavanju obradit emo neke poznate funkcijske jednadºbe i osnovne ideje rje²avanja takvih jednadºbi. Uobi

More information

O aksiomu izbora, cipelama i čarapama

O aksiomu izbora, cipelama i čarapama O aksiomu izbora, cipelama i čarapama Aksiom izbora može se izreći u raznim ekvivalentnim formama. Dokazi ekvivalencije aksioma izbora npr. sa Zornovom lemom, ili pak sa Zermelovim teoremom o dobrom uredaju,

More information

Asocijativna polja POGLAVLJE Ključevi kao cijeli brojevi

Asocijativna polja POGLAVLJE Ključevi kao cijeli brojevi POGLAVLJE 7 Asocijativna polja U ovom poglavlju promotrit ćemo poopćenje strukture podataka polja. Upoznali smo se s činjenicom da se elementima polja efikasno pristupa poznavajući cjelobrojni indeks određenog

More information

Optimizacija Niza Čerenkovljevih teleskopa (CTA) pomoću Monte Carlo simulacija

Optimizacija Niza Čerenkovljevih teleskopa (CTA) pomoću Monte Carlo simulacija 1 / 21 Optimizacija Niza Čerenkovljevih teleskopa (CTA) pomoću Monte Carlo simulacija Mario Petričević Fizički odsjek, PMF Sveučilište u Zagrebu 30. siječnja 2016. 2 / 21 Izvori Spektar Detekcija Gama-astronomija

More information

Nilpotentni operatori i matrice

Nilpotentni operatori i matrice Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Nikolina Romić Nilpotentni operatori i matrice Završni rad Osijek, 2016. Sveučilište J. J. Strossmayera

More information

Linearno programiranje i primjene

Linearno programiranje i primjene Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku Rebeka Čordaš Linearno programiranje i primjene Diplomski rad Osijek, 2014. Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku Rebeka

More information

HRVATSKA MATEMATIČKA OLIMPIJADA

HRVATSKA MATEMATIČKA OLIMPIJADA HRVATSKA MATEMATIČKA OLIMPIJADA prvi dan 5. svibnja 01. Zadatak 1. Dani su pozitivni realni brojevi x, y i z takvi da je x + y + z = 18xyz. nejednakost x x + yz + 1 + y y + xz + 1 + z z + xy + 1 1. Dokaži

More information

MATHEMATICAL ANALYSIS OF PERFORMANCE OF A VIBRATORY BOWL FEEDER FOR FEEDING BOTTLE CAPS

MATHEMATICAL ANALYSIS OF PERFORMANCE OF A VIBRATORY BOWL FEEDER FOR FEEDING BOTTLE CAPS http://doi.org/10.24867/jpe-2018-02-055 JPE (2018) Vol.21 (2) Choudhary, M., Narang, R., Khanna, P. Original Scientific Paper MATHEMATICAL ANALYSIS OF PERFORMANCE OF A VIBRATORY BOWL FEEDER FOR FEEDING

More information

DISTRIBUIRANI ALGORITMI I SISTEMI

DISTRIBUIRANI ALGORITMI I SISTEMI Postavka 7: međusobno isključivanje sa read/write promenljivama 1 DISTRIBUIRANI ALGORITMI I SISTEMI Iz kursa CSCE 668 Proleće 2014 Autor izvorne prezentacije: Prof. Jennifer Welch Read/Write deljene promenljive

More information

Mirela Nogolica Norme Završni rad

Mirela Nogolica Norme Završni rad Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Mirela Nogolica Norme Završni rad Osijek, 2014. Sveučilište J.J. Strossmayera u Osijeku Odjel za

More information

Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku. Sveučilišni preddiplomski studij matematike

Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku. Sveučilišni preddiplomski studij matematike Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Lorena Škalac Fermatova metoda beskonačnog spusta Završni rad Osijek, 014. Sveučilište J.J.Strossmayera

More information

SITO POLJA BROJEVA. Dario Maltarski PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: Doc. dr. sc.

SITO POLJA BROJEVA. Dario Maltarski PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: Doc. dr. sc. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Dario Maltarski SITO POLJA BROJEVA Diplomski rad Voditelj rada: Doc. dr. sc. Filip Najman Zagreb, rujan 2014. Ovaj diplomski

More information

Neprekidan slučajan vektor

Neprekidan slučajan vektor Sveučilište J.J.Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Ana Leko Neprekidan slučajan vektor Završni rad Osijek, 3 Sveučilište J.J.Strossmayera u Osijeku Odjel

More information

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Mateja Dumić Cjelobrojno linearno programiranje i primjene Diplomski rad Osijek, 2014. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku

More information

Simetrične matrice, kvadratne forme i matrične norme

Simetrične matrice, kvadratne forme i matrične norme Sveučilište JJStrossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Martina Dorić Simetrične matrice, kvadratne forme i matrične norme Završni rad Osijek, 2014 Sveučilište

More information

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin Matematika (PITUP) FOI, Varaždin Dio II Bez obzira kako nam se neki teorem činio korektnim, ne možemo biti sigurni da ne krije neku nesavršenost sve dok se nam ne čini prekrasnim G. Boole The moving power

More information

Mersenneovi i savršeni brojevi

Mersenneovi i savršeni brojevi Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Diplomski studij matematike Ana Maslać Mersenneovi i savršeni brojevi Diplomski rad Osijek, 2012. Sveučilište J.J. Strossmayera u Osijeku Odjel

More information

Turingovi strojevi Opis Turingovog stroja Odluµcivost logike prvog reda. Lipanj Odluµcivost i izraµcunljivost

Turingovi strojevi Opis Turingovog stroja Odluµcivost logike prvog reda. Lipanj Odluµcivost i izraµcunljivost Odluµcivost logike prvog reda B. µ Zarnić Lipanj 2008. Uvod Turingovi strojevi Logika prvoga reda je pouzdana. Logika prvog reda je potpuna. Γ `LPR K ) Γ j= SPR K Γ j= SPR K ) Γ `LPR K Prema tome, ako

More information

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku Valentina Volmut Ortogonalni polinomi Diplomski rad Osijek, 2016. Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

More information

Teorem o reziduumima i primjene. Završni rad

Teorem o reziduumima i primjene. Završni rad Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Matej Petrinović Teorem o reziduumima i primjene Završni rad Osijek, 207. Sveučilište J. J. Strossmayera

More information

Osobine metode rezolucije: zaustavlja se, pouzdanost i kompletnost. Iskazna logika 4

Osobine metode rezolucije: zaustavlja se, pouzdanost i kompletnost. Iskazna logika 4 Matematička logika u računarstvu Department of Mathematics and Informatics, Faculty of Science,, Serbia novembar 2012 Rezolucija 1 Metod rezolucije je postupak za dokazivanje da li je neka iskazna (ili

More information

Pellova jednadžba. Pell s equation

Pellova jednadžba. Pell s equation Osječki matematički list 8(2008), 29 36 29 STUDENTSKA RUBRIKA Pellova jednadžba Ivona Mandić Ivan Soldo Sažetak. Članak sadrži riješene primjere i probleme koji se svode na analizu skupa rješenja Pellove

More information

Uvod u numericku matematiku

Uvod u numericku matematiku Uvod u numericku matematiku M. Klaricić Bakula Oujak, 2009. Uvod u numericku matematiku 2 1 Uvod Jedan od osnovnih problema numericke matematike je rješavanje linearnih sustava jednadbi. U ovom poglavlju

More information

Nelder Meadova metoda: lokalna metoda direktne bezuvjetne optimizacije

Nelder Meadova metoda: lokalna metoda direktne bezuvjetne optimizacije Osječki matematički list (2), 131-143 Nelder Meadova metoda: lokalna metoda direktne bezuvjetne optimizacije Lucijana Grgić, Kristian Sabo Sažetak U radu je opisana poznata Nelder Meadova metoda, koja

More information

Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja

Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 000 Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja Mislav Bradač Zagreb, lipanj 2017.

More information

Položaj nultočaka polinoma

Položaj nultočaka polinoma Osječki matematički list 4 (204), 05-6 Položaj nultočaka polinoma Mandalena Pranjić Rajna Rajić Sažetak Prema Rolleovom teoremu, bilo koji segment čiji su krajevi međusobno različite realne nultočke polinoma

More information

Procjena funkcije gustoće

Procjena funkcije gustoće Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Jelena Milanović Procjena funkcije gustoće Diplomski rad Osijek, 2012. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Jelena Milanović

More information

Oracle Spatial Koordinatni sustavi, projekcije i transformacije. Dalibor Kušić, mag. ing. listopad 2010.

Oracle Spatial Koordinatni sustavi, projekcije i transformacije. Dalibor Kušić, mag. ing. listopad 2010. Oracle Spatial Koordinatni sustavi, projekcije i transformacije Dalibor Kušić, mag. ing. listopad 2010. Pregled Uvod Koordinatni sustavi Transformacije Projekcije Modeliranje 00:25 Oracle Spatial 2 Uvod

More information

ANALYSIS OF THE RELIABILITY OF THE "ALTERNATOR- ALTERNATOR BELT" SYSTEM

ANALYSIS OF THE RELIABILITY OF THE ALTERNATOR- ALTERNATOR BELT SYSTEM I. Mavrin, D. Kovacevic, B. Makovic: Analysis of the Reliability of the "Alternator- Alternator Belt" System IVAN MAVRIN, D.Sc. DRAZEN KOVACEVIC, B.Eng. BRANKO MAKOVIC, B.Eng. Fakultet prometnih znanosti,

More information

FIZIKALNA KOZMOLOGIJA VII. VRLO RANI SVEMIR & INFLACIJA

FIZIKALNA KOZMOLOGIJA VII. VRLO RANI SVEMIR & INFLACIJA FIZIKALNA KOZMOLOGIJA VII. VRLO RANI SVEMIR & INFLACIJA KOZMIČKI SAT ranog svemira Ekstra zračenje u mjerenju CMB Usporedba s rezultatima LEP-a Usporedba CMB i neutrina Vj.: Pozadinsko zračenje neutrina

More information

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku. Velibor Gojić. Blok dizajni. Diplomski rad. Osijek, 2014.

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku. Velibor Gojić. Blok dizajni. Diplomski rad. Osijek, 2014. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Velibor Gojić Blok dizajni Diplomski rad Osijek, 2014. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Velibor Gojić Blok dizajni

More information

Vedska matematika. Marija Miloloža

Vedska matematika. Marija Miloloža Osječki matematički list 8(2008), 19 28 19 Vedska matematika Marija Miloloža Sažetak. Ovimčlankom, koji je gradivom i pristupom prilagod en prvim razredima srednjih škola prikazuju se drugačiji načini

More information

Iskazna logika 1. Matematička logika u računarstvu. oktobar 2012

Iskazna logika 1. Matematička logika u računarstvu. oktobar 2012 Matematička logika u računarstvu Department of Mathematics and Informatics, Faculty of Science,, Serbia oktobar 2012 Iskazi, istinitost, veznici Intuitivno, iskaz je rečenica koja je ima tačno jednu jednu

More information

Harmonijski brojevi. Uvod

Harmonijski brojevi. Uvod MATEMATIKA Harmonijski brojevi Darko Žubrinić, Zagreb Beskonačno! Niti koje drugo pitanje nije nikada toliko duboko dirnulo duh čovjeka. David Hilbert (862. 943.) Uvod U ovom članku opisat ćemo jedan pomalo

More information

Numeričke metode u ekonomiji Dr. sc. Josip Matejaš, EFZG

Numeričke metode u ekonomiji Dr. sc. Josip Matejaš, EFZG Numeričke metode u ekonomiji Dr. sc. Josip Matejaš, EFZG http://web.math.hr/~rogina/001096/num_anal.pdf Numerička analiza G R E Š K E Prvi uvodni primjer 50 50 1/ 5 33554 43 1.414 1356... 50 1.414 1356

More information

U ovom dijelu upoznat ćemo strukturu podataka stablo, uvesti osnovnu terminologiju, implementaciju i algoritme nad tom strukturom.

U ovom dijelu upoznat ćemo strukturu podataka stablo, uvesti osnovnu terminologiju, implementaciju i algoritme nad tom strukturom. POGLAVLJE Stabla U ovom dijelu upoznat ćemo strukturu podataka stablo, uvesti osnovnu terminologiju, implementaciju i algoritme nad tom strukturom..1 Stabla Stabla su vrlo fleksibilna nelinearna struktura

More information

PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA

PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Anto Čabraja PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA Diplomski rad Voditelj rada: doc. dr. sc. Goranka Nogo Zagreb,

More information

Uvod u analizu (M3-02) 05., 07. i 12. XI dr Nenad Teofanov. principle) ili Dirihleov princip (engl. Dirichlet box principle).

Uvod u analizu (M3-02) 05., 07. i 12. XI dr Nenad Teofanov. principle) ili Dirihleov princip (engl. Dirichlet box principle). Uvod u analizu (M-0) 0., 07. i. XI 0. dr Nenad Teofanov. Kardinalni broj skupa R U ovom predavanju se razmatra veličina skupa realnih brojeva. Jasno, taj skup ima beskonačno mnogo elemenata. Pokazaće se,

More information

Sveučilište J.J. Strossmayera u Osijeku. Odjel za matematiku. David Komesarović. Mooreovi grafovi. Diplomski rad. Osijek, 2017.

Sveučilište J.J. Strossmayera u Osijeku. Odjel za matematiku. David Komesarović. Mooreovi grafovi. Diplomski rad. Osijek, 2017. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku David Komesarović Mooreovi grafovi Diplomski rad Osijek, 2017. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički

More information

Iterativne metode za rješavanje linearnih sustava

Iterativne metode za rješavanje linearnih sustava Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike Marija Mecanović Iterativne metode za rješavanje linearnih sustava Završni rad Osijek, 2017. Sveučilište

More information

Matrične dekompozicije i primjene

Matrične dekompozicije i primjene Sveučilište JJ Strossmayera u Osijeku Odjel za matematiku Goran Pavić Matrične dekompozicije i primjene Diplomski rad Osijek, 2012 Sveučilište JJ Strossmayera u Osijeku Odjel za matematiku Goran Pavić

More information

Sveučilište u Zagrebu Fakultet prometnih znanosti Diplomski studij. Umjetna inteligencija - Genetski algoritmi 47895/47816 UMINTELI HG/

Sveučilište u Zagrebu Fakultet prometnih znanosti Diplomski studij. Umjetna inteligencija - Genetski algoritmi 47895/47816 UMINTELI HG/ Sveučilište u Zagrebu Fakultet prometnih znanosti Diplomski studij Umjetna inteligencija - Genetski algoritmi 47895/47816 UMINTELI HG/2008-2009 Genetski algoritam Postupak stohastičkog pretraživanja prostora

More information

DISKRETNI LOGARITAM. 1 Uvod. MAT-KOL (Banja Luka) ISSN (p), ISSN (o) Vol. XVII (2)(2011), 43-52

DISKRETNI LOGARITAM. 1 Uvod. MAT-KOL (Banja Luka) ISSN (p), ISSN (o) Vol. XVII (2)(2011), 43-52 MAT-KOL (Banja Luka) ISSN 0354-6969 (p), ISSN 1986-5228 (o) Vol. XVII (2)(2011), 43-52 DISKRETNI LOGARITAM Bernadin Ibrahimpašić 1, Dragana Kovačević 2 Abstract U ovom članku se opisuje pojam diskretnog

More information

AKSIOM IZBORA I EKVIVALENCIJE

AKSIOM IZBORA I EKVIVALENCIJE Sveučilište J.J. Strossmayera Odjel za matematiku Preddiplomski sveučilišni studij matematike Igor Sušić AKSIOM IZBORA I EKVIVALENCIJE Završni rad Osijek, 2013. Sveučilište J.J. Strossmayera Odjel za matematiku

More information

Matrice traga nula math.e Vol. 26. math.e. Hrvatski matematički elektronički časopis. Matrice traga nula. komutator linearna algebra. Sažetak.

Matrice traga nula math.e Vol. 26. math.e. Hrvatski matematički elektronički časopis. Matrice traga nula. komutator linearna algebra. Sažetak. 1 math.e Hrvatski matematički elektronički časopis komutator linearna algebra Marijana Kožul i Rajna Rajić Matrice traga nula marijana55@gmail.com, rajna.rajic@rgn.hr Rudarsko-geološko-naftni fakultet,

More information

Konstrukcija i analiza algoritama

Konstrukcija i analiza algoritama Konstrukcija i analiza algoritama 27. februar 207 Matematička indukcija Princip matematičke indukcije: Da bi za svako n N važilo tvrdjenje T (n) dovoljno je pokazati: bazu indukcije: tvrdjenje T () induktivni

More information

Matea Ugrica. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva

Matea Ugrica. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva Sveučilište J J Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva Matea Ugrica Upravljivost linearnih vremenski neovisnih sustava Diplomski rad Osijek, 215

More information

Fraktalno Brownovo gibanje

Fraktalno Brownovo gibanje Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Ivana Brkić Fraktalno Brownovo gibanje Diplomski rad Osijek, 2018. Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Ivana Brkić Fraktalno

More information

Shear Modulus and Shear Strength Evaluation of Solid Wood by a Modified ISO Square-Plate Twist Method

Shear Modulus and Shear Strength Evaluation of Solid Wood by a Modified ISO Square-Plate Twist Method Hiroshi Yoshihara 1 Shear Modulus and Shear Strength Evaluation of Solid Wood by a Modified ISO 1531 Square-late Twist Method rocjena smicajnog modula i smicajne čvrstoće cjelovitog drva modificiranom

More information

DES I AES. Ivan Nad PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: doc.dr.sc.

DES I AES. Ivan Nad PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: doc.dr.sc. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivan Nad DES I AES Diplomski rad Voditelj rada: doc.dr.sc. Zrinka Franušić Zagreb, srpanj, 2014. Ovaj diplomski rad obranjen

More information

POOPĆENJE KLASIČNIH TEOREMA ZATVARANJA PONCELETOVOG TIPA

POOPĆENJE KLASIČNIH TEOREMA ZATVARANJA PONCELETOVOG TIPA SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Petra Zubak POOPĆENJE KLASIČNIH TEOREMA ZATVARANJA PONCELETOVOG TIPA Diplomski rad Voditelj rada: prof. dr. sc. Juraj Šiftar

More information

VIŠESTRUKO USPOREĐIVANJE

VIŠESTRUKO USPOREĐIVANJE SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO-MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Almeida Hasić VIŠESTRUKO USPOREĐIVANJE Diplomski rad Zagreb, 2014. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO-MATEMATIČKI FAKULTET MATEMATIČKI

More information

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Marina Zrno KOMUTATIVNI PRSTENI. Diplomski rad. Voditelj rada: prof.dr.sc.

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Marina Zrno KOMUTATIVNI PRSTENI. Diplomski rad. Voditelj rada: prof.dr.sc. SVEUČ ILIŠ TE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Marina Zrno KOMUTATIVNI PRSTENI Diplomski rad Voditelj rada: prof.dr.sc. Ozren Perše Zagreb, 2014 Ovaj diplomski rad obranjen

More information

Zadatci sa ciklusima. Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva.

Zadatci sa ciklusima. Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva. Zadatci sa ciklusima Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva. StrToIntDef(tekst,broj) - funkcija kojom se tekst pretvara u ceo broj s tim da je uvedena automatska kontrola

More information

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK BINARNI POLINOMI. Diplomski rad. Voditelj rada: doc. dr. sc. Goranka Nogo. Zagreb, 2017.

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK BINARNI POLINOMI. Diplomski rad. Voditelj rada: doc. dr. sc. Goranka Nogo. Zagreb, 2017. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Jure Šiljeg BINARNI POLINOMI Diplomski rad Voditelj rada: doc. dr. sc. Goranka Nogo Zagreb, 2017. Ovaj diplomski rad obranjen

More information

Formalni postupci u oblikovanju računalnih sustava

Formalni postupci u oblikovanju računalnih sustava Formalni postupci u oblikovanju računalnih sustava Auditorne vježbe BDD - Dijagrami binarnog odlučivanja III Edgar Pek Zavod za elektroniku, mikroelektroniku, računalne i inteligentne sustave Fakultet

More information

Krivulja središta i krivulja fokusa u pramenu konika. konika zadanom pomoću dviju dvostrukih točaka u izotropnoj ravnini

Krivulja središta i krivulja fokusa u pramenu konika. konika zadanom pomoću dviju dvostrukih točaka u izotropnoj ravnini Stručni rad Prihvaćeno 18.02.2002. MILJENKO LAPAINE Krivulja središta i krivulja fokusa u pramenu konika zadanom pomoću dviju dvostrukih točaka u izotropnoj ravnini Krivulja središta i krivulja fokusa

More information