Primerjava algoritmov porazdeljevanja pri hitrem urejanju
|
|
- Βαυκις Ανδρεάδης
- 5 χρόνια πριν
- Προβολές:
Transcript
1 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Uroš Hekić Primerjava algoritmov porazdeljevanja pri hitrem urejanju DIPLOMSKO DELO INTERDISCIPLINARNI UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN MATEMATIKA Mentor: doc. dr. Jurij Mihelič Ljubljana, 2018
2 Copyright. Rezultati diplomske naloge so intelektualna lastnina avtorja in Fakultete za računalništvo in informatiko Univerze v Ljubljani. Za objavo in koriščenje rezultatov diplomske naloge je potrebno pisno privoljenje avtorja, Fakultete za računalništvo in informatiko ter mentorja. Besedilo je oblikovano z urejevalnikom besedil L A TEX.
3 Fakulteta za računalništvo in informatiko izdaja naslednjo nalogo: Tematika naloge: Hitro urejanje je eden izmed najbolj znanih in raziskovanih algoritmov urejanja in posledično daje vtis, kot da o njem že skoraj vse vemo. Kljub temu se je v zadnjih letih pojavilo kar nekaj novih odkritij, povezanih predvsem z večpivotnim porazdeljevanjem, ki se je v teoriji dolgo smatralo za neučinkovito, praktično testiranje pa je pokazalo, da se še kako splača. V okviru diplomske naloge preštudirajte in opišite različne načine porazdeljevanja tako klasične enopivotne kot večpivotne različice. Preštudirajte tudi različne načine tvorjenja testnih primerov in implementirajte program za njihovo generiranje. Na koncu algoritme porazdeljevanja še eksperimentalno ovrednotite in primerjajte.
4
5 Zahvaljujem se mentorju doc. dr. Juriju Miheliču za ideje, znanje in pomoč pri izdelavi diplomske naloge. Zahvalil bi se tudi Lenki in družini za podporo ter vzpodbudne besede.
6
7 Kazalo Povzetek Abstract 1 Uvod Problem urejanja Zgodovina Hitro urejanje Izboljšave Porazdeljevanje Hoarejevo porazdeljevanje Lomutojevo porazdeljevanje Sedgewickovo porazdeljevanje Wirthovo porazdeljevanje Aho-Hopcroft-Ullman porazdeljevanje Sedgewickovo dvopivotno porazdeljevanje Trosmerno porazdeljevanje Porazdeljevanje Jaroslavskega Tropivotno porazdeljevanje Eksperimentalna primerjava Implementacija algoritmov Generator testnih primerov
8 3.3 Testni primeri Rezultati Sklepne ugotovitve 43 Literatura 45
9 Povzetek Naslov: Primerjava algoritmov porazdeljevanja pri hitrem urejanju Avtor: Uroš Hekić Diplomska naloga obravnava problem urejanja in opisuje različne načine porazdeljevanja pri hitrem urejanju ter morebitne izboljšave le-teh. Opravljena je bila eksperimentalna primerjava algoritmov, ki implementacije različnih algoritmov primerja na podlagi časa izvajanja, števila primerjav, števila premikov in števila rekurzivnih klicev v odvisnosti od velikosti vhodnih podatkov. Predstavljen in implementiran je nov model generiranja testnih primerov, ki pokrije obstoječe testne scenarije iz analiz drugih avtorjev ter doda nove. Ker je hitrost urejanja spremenljiv problem, na katerega močno vpliva arhitektura strojne opreme, je ponovljivo in primerljivo testiranje algoritmov na enakih ali večjih testnih scenarijih ključnega pomena. Ključne besede: urejanje, hitro urejanje, porazdeljevanje.
10
11 Abstract Title: Comparison of quicksort partitioning algorithms Author: Uroš Hekić The thesis deals with the sorting problem, various ways of quicksort partitioning, and possible optimizations thereof. We carried out an experimental analysis comparing different algorithms based on the execution time, number of comparisons, number of moves and number of recursive calls with respect to the length of input data. The thesis also presents and implements a new model for generating test cases that covers existing test scenarios from previous analyses, as well as adds new ones. The sorting speed is an ever-changing problem influenced by hardware architecture, which is why it is important to have a repeatable and comparable way of testing algorithms on the same or larger test scenarios. Keywords: sorting, quicksort, partitioning.
12
13 Poglavje 1 Uvod Med programiranjem velikokrat naletimo na problem, ki zahteva, da so podatki urejeni v določenem vrstnem redu. Urejanje se pojavlja na vseh nivojih razvoja, npr. v uporabniških aplikacijah, podatkovnih bazah, pri upravljanju s procesi itd. Zelo zanimiv je algoritem hitrega urejanja, saj se algoritmi, ki gradijo na tej ideji, v praksi uporabljajo še danes po več kot 50 letih od odkritja. Večina člankov, ki opisujejo na novo odkrite algoritme, kvečjemu primerja svojo implementacijo z osnovno verzijo hitrega urejanja ali pa z verzijo, ki so jo nadgradili. Avtorji posameznih člankov prav tako uporabljajo različne testne primere za ovrednotenje hitrosti, zato je primerjava različnih algoritmov skoraj nemogoča. Prav tako se pri primerjavi uporabi zadnja implementacijo algoritma, ki že vsebuje optimizacije na procesorskem nivoju. Majhne spremembe v algoritmu lahko pohitrijo čas izvajanja ali pa ga upočasnijo, saj se določene optimizacije med seboj izključujejo. Nas pa je zanimalo, kako različni načini porazdeljevanja vplivajo na hitrost, št. primerjav, št. zamenjav in št. rekurzivnih klicev. Cilj naloge je bil tako zbrati različne algoritme hitrega urejanja, jih implementirati in na jih na enotnih testnih podatkih ovrednotiti. 1
14 2 Uroš Hekić 1.1 Problem urejanja Za definiranje problema urejanja potrebujemo definicijo delne urejenosti, ki jo najdemo v [4]. Problem urejanja je problem, kjer za poljuben vhodni seznam dolžine n, tj. a = (a 1, a 2,..., a n ), in dano delno urejenost iščemo njegovo permutacijo a = (a 1,..., a n), da velja a 1 a 2... a n. Seznam bomo predstavili s podatkovno strukturo tabele (angl. array), ki je indeksirana od 0 do n 1. Tabelo bomo označevali z a, njene elemente pa z a[i], kjer velja 0 i n Zgodovina Charles Antony Richard Hoare je algoritem hitrega urejanja razvil leta 1959 [13] med služenjem obveznega vojaškega roka v britanski kraljevi mornarici. V tem času je bil gostujoč študent na moskovski univerzi in je delal na projektu za avtomatsko strojno prevajanje ruščine v angleščino v sklopu nacionalnega fizikalnega laboratorija (National Physical Laboratory, UK). V tistih časih so bili prevodi besed shranjeni v abecednem vrstnem redu na magnetnem traku. Zato se je splačalo, preden so vsako besedo poiskali v slovarju, besede v stavku najprej urediti po abecedi. S tem so lahko poiskali vse besede v slovarju z enim sprehodom po magnetnem traku. Njegova prva ideja je bil algoritem, ki ga danes imenujemo urejanje z mehurčki (angl. bubble sort), ampak je zaradi počasnosti algoritma razmišljal dalje. Njegova naslednja ideja je bilo hitro urejanje. Napisal je algoritem za porazdeljevanje, ni pa znal napisati programa, ki bi poskrbel za neurejeni podtabeli. Kasneje je odkril članek o rekurziji v programskem jeziku ALGOL, in tako leta 1961 objavil članek ter izvorno kodo v reviji Communications of the Association for Computing Machinery. Avtor je v intervjuju leta 2009 [13] dejal, da meni, da je hitro urejanje edini zanimiv algoritem, ki ga je kadarkoli razvil.
15 Diplomska naloga Hitro urejanje Algoritem hitrega urejanja (angl. quicksort) oz. urejanje s porazdeljevanjem je algoritem za urejanje podatkov, ki ga je leta 1959 razvil in leta 1961 objavil Sir Charles Richard Antony Hoare. Algoritem temelji na metodi načrtovanja algoritmov deli in vladaj, kjer večji problem rešimo tako, da ga razdelimo na več manjših podproblemov, ki jih rekurzivno rešimo, iz njihovih rešitev pa sestavimo rešitev prvotnega problema. Algoritem je tako sestavljen iz treh faz deli, vladaj in združi, ki jih predstavimo v nadaljevanju. Deli Quicksort razdeli vhodno tabelo na dva dela, glede na predhodno izbrano vrednost pivota (ki je lahko ena izmed vrednosti iz tabele), na spodnjo in zgornjo tabelo. V spodnji tabeli so vsi elementi, ki so manjši od pivota, v zgornji pa vsi, ki so večji od pivota. Elementi, enaki pivotu so ponavadi lahko v poljubnem delu. Vladaj Obe podtabeli rekurzivno uredimo po enakem postopku, dokler ne pridemo do prazne tabele ali enega elementa (ali dovolj majhne tabele). Te so trivialno urejene, njihovo reševanje oz. obvladovanje pa je preprosto, zato tej fazi pravimo vladaj. Združi Ker sta podtabeli vsaka zase urejeni, elementi pa so pravilno porazdeljeni glede na pivot, je celotna tabela že urejena. Algoritem hitrega urejanja tabele a dolžine n, ki uredi elemente na mestih left,..., right, opisuje algoritem 1.1. Če je indeks left večji ali enak indeksu right, ustavimo urejanje (kar vidimo v vrsticah 2 in 3). V vrstici 4 tabelo s funkcijo Partition porazdelimo na 2 dela (kot je opisano zgoraj v koraku deli) in s tem dobimo indeks pivotnega elementa, tj. pivotindex, vrednost pivota pa je a[pivotindex]. Nato v vrsticah 5 in 6 rekurzivno uredimo podtabeli levo in desno od pivotnega elementa. V splošnem lahko algoritmi uporabljajo s 1 pivotov in s tem tabelo porazdelijo na s podtabel, ki jih na koncu rekurzivno uredimo.
16 4 Uroš Hekić 1 fun Quicksort ( a, l e f t, r i g h t ) 2 i f l e f t r i g h t then 3 return 4 pivotindex = P a r t i t i o n ( a, l e f t, r i g h t ) 5 Quicksort ( a, l e f t, pivotindex 1) 6 Quicksort ( a, pivotindex + 1, r i g h t ) Algoritem 1.1: Algoritem hitrega urejanja Po vsakem porazdeljevanju ostaneta dve tabeli, ki ju je treba urediti. Če je katera izmed tabel prazna ali sestavljena iz enega samega elementa, jo ignoriramo in proces nadaljujemo na drugi tabeli. Tudi če v tabeli ostane dovolj majhno število elementov (odvisno od lastnosti računalnika), lahko za njihovo urejanje uporabimo program, prilagojen za urejanje manjšega števila elementov (npr. urejanje z vstavljanjem). V primeru, ko sta obe tabeli dovolj veliki, bo potrebno odložiti urejanje ene, dokler popolnoma ne uredimo druge. Med tem pa moramo (na skladu rekurzije) hraniti indekse prvega in zadnjega elementa podtabele. Časovna zahtevnost hitrega urejanja v povprečnem primeru je Θ(n log n), kjer n predstavlja število elementov v vhodni tabeli. Časovna zahtevnost v najslabšem primeru je Θ(n 2 ). Kljub temu da obstajajo algoritmi za urejanje s časovno zahtevnostjo Θ(n log n) v najslabšem primeru (npr. urejanje z zlivanjem in urejanje s kopico), pa je v praksi hitro urejanje še vedno hitrejše, saj ima manjšo konstanto, ki v asimptotični notaciji časovne zahtevnosti ni vidna. Pri implementaciji algoritmov bomo elemente urejali v nepadajočem vrstnem redu. Omejili se bomo na urejanje celih števil. 1.4 Izboljšave Implementacije hitrega urejanja se razlikujejo glede na izbiro pivota, glede na število pivotov, glede na porazdeljevanja, glede na število podtabel in druge
17 Diplomska naloga 5 optimizacije, ki jih bomo predstavili v tem razdelku Majhne tabele Quicksort ni primeren za majhne vhodne podatke, še posebej zaradi rekurzije. Že Hoare je zato predlagal uporabo bolj učinkovite metode za manjše število elementov v tabeli. Ena izmed metod, ki so učinkovite pri manjših vhodnih podatkih, je urejanje z vstavljanjem (angl. insertion sort) [12]. Skozi čas se je meja, pri kateri preidemo na urejanje z vstavljanjem, zaradi povečevanja hitrosti procesorjev spreminjala Rekurzija Pri rekurzivni implementaciji porazdeljevanja največjo težavo predstavlja velika količina potrebnega pomnilnika (prostora) za (implicitni) sklad rekurzije. Če je del tabele a[0],..., a[n 1], se bo program rekurzivno izvedel do globine n in s tem porabil dodatni prostor v odvisnosti od n. Že Hoare je izpostavil, da se temu lahko izognemo tako, da najprej rekurzivno kličemo krajšega izmed dveh tabel. Globina rekurzije je s tem omejena na log 2 n, z ročno implementacijo sklada pa lahko prihranimo še več časa Robni primeri Izvirna implementacija je neučinkovita v nekaterih primerih, ki se pogosto pojavijo v praksi. Predpostavimo, da so števila a[0], a[1],..., a[n 1] že urejena. Potem bo a[0] prvi pivotni element, leva podtabela bo prazna, desna podtabela pa bo sestavljena iz elementov a[1],..., a[n 1]. Enako se bo zgodilo v naslednji iteraciji desna podtabela bo vedno manjša samo za en element. Algoritem se bo izvajal nad tabelami z velikostjo: n, n 1, n 2,... in časovna zahtevnost izvajanja bo O(n 2 ). Enako velja za tabelo, ki je urejena v nasprotnem vrstnem redu.
18 6 Uroš Hekić Obstaja veliko načinov, kako zmanjšati verjetnost, da se znajdemo v robnem primeru. Namesto da uporabimo prvi element polja kot pivotni element, lahko poskusimo uporabiti kakšen drug fiksni element, npr. sredinski. Hoare je predlagal izbiro naključnega elementa, kar bi nam zagotovilo, da do robnega primera (z zelo veliko verjetnostjo) v praksi ne bo prišlo, vendar je za generiranje naključnih števil po drugi strani potrebno veliko časa. S to metodo se sicer izognemo nekaj robnim primerom, vendar po nepotrebnem podaljšujemo čas izvajanja Mediana treh vrednosti Naslednja metoda pospeši povprečni čas izvajanja algoritma, hkrati pa poskrbi za to, da se algoritem ne bo izrodil v najslabši robni primer. Hitro urejanje se najbolje obnaša, ko je pivotni element čim bližje sredini tabele oz. leva in desna podtabela vsebujeta čim bolj izenačeno število elementov. Dober pivotni element lahko zato približno ocenimo z mediano tabele. Približek mediane lahko dobimo z izbiro manjšega vzorca iz polja. Idejo je predlagal že Hoare, ampak je ni razvijal naprej, saj je težko ocenil časovni prihranek. Največ časa prihranimo z uporabo vzorca treh elementov pri vsaki fazi porazdeljevanja. Večji vzorci sicer dajo boljši približek, vendar bistveno ne zmanjšajo časa izvajanja. Z uporabo vzorčenja se zavarujemo pred izbiro pivotnega elementa, ki bi bil na robu polja. Povprečni čas izvajanja se zmanjša, če izberemo katere koli tri elemente. Singleton je leta 1969 predlagal uporabo prvega, sredinskega in zadnjega Porazdeljevanje Razlike v času izvajanja prinesejo tudi različni načini porazdeljevanja, ki si jih bomo ogledali v naslednjem poglavju.
19 j i Poglavje 2 Porazdeljevanje 2.1 Hoarejevo porazdeljevanje Imamo izbran pivot p. Hoare je vzel skrajni levi element tabele oz. dela tabele, ki ga trenutno obdelujemo. Dela tabele omejujeta levi indeks lef t in desni indeks right, ki sta na začetku left = 0, right = n 1, kjer n predstavlja število vseh elementov v tabeli. Med porazdeljevanjem je tabela ločena na tri dele, kot je prikazano na sliki 2.1: spodnji del, ki vsebuje elemente, manjše ali enake pivotu, neobdelani del ter zgornji del, ki vsebuje elemente, večje ali enake pivotu. Hoare p p? p i j Slika 2.1: Splošno stanje tabele pri Hoarejevem porazdeljevanju p p p p Potek porazdeljevanja je opisan v algoritmu i = j 2.1. S pomočjo dveh indeksov pregledujemo elemente tabele, to sta spodnji indeks i in zgornji indeks j. Kot vidimo p v vrsticah 5 in p 6, na začetku spodnji indeks i inicializiramo p na začetek podtabele, ki jo trenutno urejamo (indeks left), zgornji indeks j pa na konec j i tabele (indeks right). Na začetku sta tako zgornji kot spodnji del prazna. Spodnji indeks se pomakne navzgor, če je vrednost v tabeli na indeksu i, a[i], p p p 7 Lomuto p p > p?
20 8 Uroš Hekić manjša ali enaka pivotu 1, tj. a[i] p, in se pomika navzgor, dokler ne najde elementa, ki je večji od pivota. V tem primeru se spodnji indeks ustavi, kar lahko vidimo v vrstici 8. Z iteriranjem nadaljuje (kot je opisano v 9. vrstici) zgornji indeks, ki se pomakne navzdol, če je vrednost v tabeli večja ali enaka pivotu, tj. a[j] p, in se pomika navzdol, dokler ne najde elementa, ki je manjši od pivota. Na tej točki smo prepričani, da sta elementa na indeksih i in j na napačnih straneh tabele, zato ju zamenjamo. Po zamenjavi oba indeksa premaknemo za ena v pripadajočo smer, spodnji indeks pa nadaljuje iteriranje. Postopek ponavljamo, Hoare dokler se indeksa ne prekrižata, tj., ko spodnji indeks kaže na višje 2 mesto v tabeli od zgornjega indeksa, i > j. To je razlog, da Hoarejevo porazdelitev p imenujemo p tudi tehnika križanja? kazalcev. p Algoritem se konča v enem izmed dveh možnih stanj (sliki 2.2 in 2.3). i j Pri prvem možnem stanju se meji spodnjega in zgornjega dela prekrijeta, tj. spodnji indeks kaže na višje mesto kot zgornji, i > j. V tem primeru p p p p je potrebno pivot (ki se nahaja na začetku tabele a[left]) zamenjati z j-tim elementom [8]. i = j p p p j i Slika 2.2: Prvo izmed dveh končnih stanj tabele pri Hoarejevem porazdeljevanju p p p Pri drugem možnem stanju se meji zgornjega in spodnjega dela dotakneta, Lomuto tj. spodnji indeks je enak zgornjemu, i = j. Element na tem mestu je manjši alip enak pivotu p in hkrati > p večji ali enak pivotu, torej je enak? pivotu. V tem 1 V originalnem članku Hoare pivot imenuje meja (angl. bound), indeksi so kazalci (angl. j i pointers), indeks, kjer pivot na koncu particioniranja loči spodnje in zgornje elemente, je ločnica (angl. dividing line), namesto o tabeli pa govori o datotekah (angl. files) in poddatotekah p p (angl. subfiles) ali > segmentih. p? 2 Spodnji indeks lahko kaže na višje ali enako mesto v tabeli od zgornjega indeksa, torej i j. j i p p > p j i p p > p
21 Hoare p p? p Diplomska naloga i j 9 p p p p i = j Slika 2.3: Drugo izmed dveh končnih stanj tabele pri Hoarejevem porazdeljevanju p p p j i primeru zamenjava p elementov na i-tem p in j-tem mestu ni p potrebna, saj je pivot že na pravem mestu [8]. V spodnji del vključimo še pivot na prvem mestu, da dobimo enako stanje na sliki 2.4. Lomuto Porazdeljevanje je s tem sicer končano, urejanje tabele pa še ne. Zato rekurzivno p p pokličemo hitro > p urejanje nad zgornjim in spodnjim? delom tabele, kar vidimo v vrsticah 13 in 14. j i 1 fun p QuicksortHoare p ( a, > lp e f t, r i g h t )? 2 i f l e f t r i g h t then j 3 return i 4 p = a [ l e f t ] 5 p i = l e f t p > p 6 j = r i g h t + 1 j 7 while true do 8 do i = i + 1 while i < r i g h t and a [ i ] p p p > p 9 do j = j 1 while j > l e f t and a [ j ] p 10 i f i j break 11 swap ( a, i, j ) 12 swap ( a, l e f t, j ) 13 QuicksortHoare ( a, l e f t, j 1) 14 QuicksortHoare ( a, j + 1, r i g h t ) i Algoritem 2.1: Hoarejevo hitro urejanje
22 p p p p i = j p p p 10 j i Uroš Hekić p p p Slika 2.4: Končno stanje tabele s pivotom na pravilnem mestu Lomuto Hoare 2.2 Lomutojevo porazdeljevanje p p > p? p p? p Spodaj opisano j particioniranje pripisujejo i Nicu Lomutu, populariziral pa ga je Jon Bentley v knjigi i Programming Pearls [5] in kasneje j Cormen et al. v knjigi Introduction to Algorithms [7, 2]. p p > p? p Ideja algoritma je, p da se v vsaki fazi p porazdeljevanja sprehodi p po vseh j i elementih tabele z eno zanko, zato ga imenujemo tudi enozančno porazdeljevanje. Prvotna implementacija algoritma za pivotni element vedno izbere i = j skrajni p desni element, mi p pa bomo zaradi konsistentnosti > p z ostalimi algoritmi p p p izbrali skrajni levi element. Tekomj porazdeljevanja je tabela razdeljena i na štiri dele, podobno kot pri Hoarejevemj hitrem i urejanju, različen je le vrstni red. Splošna shema p tabele je prikazana p na sliki 2.5. Na začetku > p so od indeksa q do (vključno) ip elementi, manjši (ali p enaki) od pivota p p (na indeksu r), od i + 1 do j 1 so elementi, večji od pivota, med j in r 1 sledijo neurejeni elementi, na zadnjem, r-tem mestu pa je pivot [7]. Lomuto p p > p? j i Slika 2.5: Splošno stanje tabele pri Lomutojevem porazdeljevanju p p > p? Lomutojevo porazdeljevanje j je i opisano v algoritmu 2.2. Algoritem inicializira vrednosti tako, da sta spodnji in zgornji del prazna, neurejeni del pa vsebuje celotno tabelo razen pivotnega elementa. Iteracijski indeks i se p p > p sprehodi čez tabelo in v vsakem koraku primerja vrednost v tabeli na i-tem mestu, a[i], s pivotom, ugotovi, ali j element pade v spodnji ali zgornji i del, in izvede ustrezne zamenjave. Če je element manjši od pivota, a[i] < p, potem pade v spodnji p del. Zato, kot jep opisano v vrstici> 8, p inkrementiramo
23 p p p p p p p i = j j i p p p p p p Diplomska naloga j i 11 Lomuto j (povečamo spodnji p del), zamenjamo p i-ti in j-ti element p (začasno ga uvrstimo v zgornji del), nato pa povečamo še i (i-ti element se iz zgornjega dela p p > p? prestavi v spodnji del). Sedaj je i-ti element na pravem mestu. Če pa je Lomuto element večji alij enak pivotu, a[i] i p, pa samo povečamo i (s tem povečamo zgornji p del) p in nadaljujemo > p z naslednjim elementom. Po? končani zanki je neobdelani p del p prazen, pivot > p pa je še vedno na prvem oz.? napačnem mestu, j i kot je prikazano na sliki 2.6. Zamenjamo ga z zadnjim elementom spodnjega j i dela, tj. a[j], kar vidimo v vrstici 9. p p > p? p p > p j i j i p p > p Slika 2.6: Končno p stanje tabelep s pivotom na prvotnem > p j mestu i p p > p Slika 2.7: Končno stanje tabele s pivotom na pravilnem mestu 1 fun QuicksortLomuto 2 i f l e f t r i g h t then 3 return 4 p = a [ l e f t ] 5 j = l e f t 1 6 for i = l e f t + 1 to r i g h t do 7 i f a [ i ] < p i vot then 8 swap ( a, ++j, i ) 9 swap ( a, l e f t, j ) 10 QuicksortLomuto ( a, l e f t, j 1) 11 QuicksortLomuto ( a, j + 1, r i g h t ) Algoritem 2.2: Lomutojevo hitro urejanje
24 12 Uroš Hekić Porazdeljevanje je končano, algoritem mora pa še rekurzivno urediti spodnji in zgornji del, kar se zgodi v vrsticah 10 in 11. Končno stanje je predstavljeno na sliki Sedgewickovo porazdeljevanje Sedgewick je leta 1975 v svoji doktorski tezi predstavil naslednji algoritem, ki prav tako temelji na tehniki križanja kazalcev [12]. V bistvu gre za spremenjeno različico Hoarejevega hitrega urejanja z nekaterimi razlikami. Splošna shema je enaka kot shema 2.1 pri Hoarejevem porazdeljevanju. V primerjavi s Hoarejevo različico se notranja zanka pri primerjavi s pivotom ustavi pri elementu, ki je enak pivotu oz. se pivot in trenutni element primerjata s strogim enačajem (namesto z neenačajem ali enako). Sedgewickovo porazdeljevanje je opisano v algoritmu 2.3. Avtor se znebi dodatne primerjave trenutnega elementa s spodnjim čuvajem (angl. sentinel) v vrstici 8. Zaradi primerjave pivota s strogim neenačajem funkcijo čuvaja prevzame pivotni element. Zunanja zanka je zapisana v obliki do-while, namesto while-do. Avtor je v originalnem algoritmu za pivotni element vedno izbral skrajni desni element (Hoare je izbral skrajni levi element). 1 fun QuicksortSedgewick ( a, l e f t, r i g h t ) 2 i f l e f t r i g h t then 3 return 4 p = a [ r i g h t ] 5 i = l e f t 1 6 j = r i g h t 7 do 8 do i = i + 1 while i < r i g h t and a [ i ] < p 9 do j = j 1 while a [ j ] > p 10 i f j > i then 11 swap ( a, i, j )
25 Diplomska naloga while j i 13 swap ( a, i, r i g h t ) 14 QuicksortSedgewick ( a, l e f t, i 1) 15 QuicksortSedgewick ( a, i + 1, r i g h t ) Algoritem 2.3: Sedgewickovo hitro urejanje Naša implementacija zaradi konsistentnosti z ostalimi algoritmi kot pivotni element izbere skrajni levi element. 2.4 Wirthovo porazdeljevanje Niklaus Wirth je v svojem učbeniku o algoritmih in podatkovnih strukturah iz leta 1985 opisal svojo različico hitrega urejanja. Wirthov algoritem [15] prav tako temelji na tehniki porazdeljevanja s križanjem. Splošna shema je enaka kot shema 2.1 pri Hoarejevem porazdeljevanju. Ena izmed razlik je, da se notranja zanka pri elementu, ki je enak pivotu (oziroma zamenja pivot s trenutnim elementom), ne pomakne naprej in algoritem s tem opravi več zamenjav. V primeru, ko urejamo n enakih elementov, zato opravimo n/2 zamenjav. Nepotrebnim zamenjavam se lahko izognemo tako, da v notranjih zankah (v vrsticah 6 in 7 sheme 2.4) trenutni element v tabeli s pivotom primerjamo z neenačajem ali enako: a[i] p in p a[j]. Vendar v tem primeru pivot p ne bi služil več kot čuvaj in zanka bi se lahko pomaknila izven tabele. Wirth je ugotovil, da preprostost ustavitvenih pogojev odtehta nepotrebne zamenjave, saj se le te redko pojavijo v povprečnem naključnem vhodnem primeru. Algoritem inicializira l = lef t, r = right in inkrementira/dekrementira i ter j v do-while zanki v vrsticah Prav tako ne izvede zadnje zamenjave pred rekurzivnim klicem. Algoritem se razlikuje tudi po tem, da za pivot izbere naključni element. V naši implementaciji bomo vzeli skrajni levi element, saj nas zanimajo samo izboljšave v porazdeljevanju. 1 fun QuicksortWirth ( a, l e f t, r i g h t )
26 14 Uroš Hekić 2 i f l e f t r i g h t then return 3 p = a [ l e f t ] 4 i = l e f t, j = r i g h t 5 do 6 while a [ i ] < p do i = i while p < a [ j ] do j = j 1 8 i f i <= j then 9 swap ( a, i, j ) 10 i = i j = j 1 12 while i > j 13 QuicksortWirth ( a, l e f t, j ) 14 QuicksortWirth ( a, i, r i g h t ) Algoritem 2.4: Wirthovo hitro urejanje 2.5 Aho-Hopcroft-Ullman porazdeljevanje Aho, Hopcroft in Ullman v knjigi The Design and Analysis of Computer Algorithms, ki je bila izdana leta 1974 [4], opišejo različico hitrega urejanja, ki temelji na tehniki križanja kazalcev. Tudi različica hitrega urejanja, ki so jo opisali zgoraj omenjeni avtorji, temelji na tehniki križnega porazdeljevanja. Splošna shema je enaka kot shema 2.1 pri Hoarejevem porazdeljevanju. Porazdeljevanje je opisano v algoritmu 2.5. V vrsticah 8 in 9 lahko vidimo, da algoritem začne z zgornjim kazalcem pri zadnjem elementu in se pomika navzdol, dokler ne najde elementa, manjšega od pivotnega elementa (ali pride do začetka tabele). Potem pa skeniranje začne spodnji kazalec, ki se pomika navzgor, dokler ne najde elementa, ki je večji ali enak pivotnemu elementu (ali pa pride do konca tabele). Če je indeks spodnjega kazalca strogo manjši od indeksa zgornjega kazalca, ju zamenja, kar pomeni, da se zgornji kazalec ne ustavlja pri elementih, ki so enaki pivotu, spodnji kazalec pa se ustavlja. To lahko vidimo v pogojih zanke v vrsticah 8 in 9. Algoritem nima čuvajev,
27 Diplomska naloga 15 notranji zanki v vsaki iteraciji preverjata, ali se indeks že nahaja izven tabele. Prav tako algoritem ne potrebuje zamenjave elementov po koncu zunanje zanke. 1 fun QuicksortAHU ( a, l e f t, r i g h t ) 2 i f l e f t r i g h t then 3 return 4 p = a [ l e f t ] 5 i = l e f t 6 j = r i g h t 7 while i j do 8 while a [ j ] p and j l e f t do j = j 1 9 while a [ i ] < p and i r i g h t do i = i i f i < j then 11 swap ( i, j ) 12 i = i j = j i f i == l e f t then j = j QuicksortAHU ( a, l e f t, i 1) 16 QuicksortAHU ( a, j + 1, r i g h t ) Algoritem 2.5: Aho-Hopcroft-Ullman hitro urejanje 2.6 Sedgewickovo dvopivotno porazdeljevanje Namesto da tabelo porazdelimo na dve particiji z enim pivotom, jo lahko razdelimo na s particij s s 1 pivoti. Sedgewick je v svojem doktoratu obravnaval primer s tremi particijami s = 3 in predlagal sledeči algoritem. Izkazalo pa se je, da je le-ta veliko slabši od klasičnega Hoarejevega porazdeljevanja [14]. Algoritem izbere dva pivotna elementa p in q, pri čemer velja p q. Za spodnji pivot p izberemo skrajni levi element, za zgornji pivot q pa izberemo skrajni desni element. Kot lahko vidimo na shemi 2.8, algoritem razdeli tabelo z elementi med indeksi left,..., right na 5 delov. Spodnji del na
28 16 Uroš Hekić indeksih left,..., i 1 1 vsebuje elemente, ki so manjši od spodnjega pivota p. Spodnji srednji del, na indeksih i 1,..., i 1, vsebuje elemente, ki so večji ali enaki od spodnjega pivota p ali manjši ali enaki zgornjemu pivotu q. Neobdelani del, i,..., j, vsebuje vse neobdelane elemente. Zgornji srednji del, j + 1,..., j 1, prav tako vsebuje elemente, ki so večji ali enaki p ali manjši ali enaki q. Zgornji del, j 1 + 1,..., right, pa vsebuje elemente, ki so večji od zgornjega pivota q. Algoritem poženemo z vhodnima parametroma left = 0 in right = n 1, kjer n predstavlja število elementov v tabeli. Algoritem inicializira i = i 1 = left in j = j 1 = right. Za levi pivot p izbere skrajni levi element p = a[left], za desni pivot q pa skrajni desni element q = a[right]. Če je levi pivot večji od desnega, ju zamenjamo, tako da je p q. Najprej iteriramo po indeksu i, ki se pomika navzgor po tabeli, dokler ne najde elementa, večjega od zgornjega pivota, a[i] > q. Če je i j, sta se kazalca prekrižala in prekinemo zunanjo zanko. Če je trenutni element manjši od pivota, potem i-ti element shranimo na mesto i 1 -tega elementa, povečamo i 1 ter na i-to mesto shranimo a[i 1 ] (elementov ne zamenjujemo, ampak jih zapišemo na prejšnje mesto od njihovega partnerja za zamenjavo, tako ne rabimo začasno shranjevati elementa). Sicer se samo premaknemo za ena navzgor. Iteriranje (v vrstici 12, shema 2.6) nadaljuje zgornji indeks j, ki se pomika navzdol po tabeli in se obnaša simetrično kot zgoraj. Če nismo izstopili iz zunanje zanke, nato v vrsticah postavimo j-ti element v spodnji del, i-ti element pa v zgornji del. Ko izstopimo iz zunanje zanke, pa potem v vrstici 26 popravimo vrednosti i 1 in j 1, ki ju uporabimo za razdelitev tabele med pivoti. Končno stanje tabele vidimo na sliki 2.9 Na koncu samo še rekurzivno pokličemo funkcijo nad spodnjim delom (left,..., i 1 1), združenima srednjima deloma (i 1,..., j 1 ) in zgornjim delom (j 1 + 1,..., right).
29 Diplomska naloga 17 Sedgewick dual-pivot < p p q? p q > q Sedgewick dual-pivot i 1 i j j 1 Slika< 2.8: p Splošnop stanje q tabele pri Sedgewickovem? p dvopivotnem q porazdeljevanju > q < p p q p q > q i 1 i j j 1 i 1 i = j j 1 < p p q p q > q i 1 i = j j 1 Slika 2.9: Končno stanje tabele pri Sedgewickovem dvopivotnem porazdeljevanju 1 fun DualPivotQuicksortSedgewick ( a, l e f t, r i g h t ) 2 i f l e f t r i g h t then return 3 i = l e f t ; i 1 = l e f t ; j = r i g h t ; j 1 = r i g h t 4 p = a [ l e f t ] ; q = a [ r i g h t ] 5 i f p > q then 6 swap ( a, p, q ) 7 while true do 8 i = i while a [ i ] <= q do 10 i f i >= j then break outer while 11 i f a [ i ] < p then 12 a [ i 1 ] = a [ i ] ; i 1 = i ; a [ i ] = a [ i 1 ] 13 i = i j = j 1 16 while a [ j ] >= p do 17 i f a [ j ] > q then 18 a [ j 1 ] = a [ j ] ; j 1 = j 1 1 ; a [ j ] = a [ j 1 ] 19 i f i >= j then break outer while
30 18 Uroš Hekić 20 j = j a [ i 1 ] = a [ j ] ; a [ j 1 ] = a [ i ] 23 i 1 = i ; j 1 = j a [ i ] = a [ i 1 ] ; a [ j ] = a [ j 1 ] a [ i 1 ] = p ; a [ j 1 ] = q DualPivotQuicksortSedgewick ( a, l e f t, i 1 1) 29 DualPivotQuicksortSedgewick ( a, i 1 + 1, j 1 1) 30 DualPivotQuicksortSedgewick ( a, j 1 + 1, r i g h t ) Algoritem 2.6: Sedgewickovo dvopivotno hitro urejanje 2.7 Trosmerno porazdeljevanje Jon Louis Bentley in Malcolm Douglas McIlroy nista bila zadovoljna z obstoječo implementacijo algoritma qsort v standardni C knjižnici, zato sta se odločila napisati svojo. Objavila sta jo leta 1993 v članku Engineering a sort function. Njuna sodelavca sta dve leti pred tem našla primer, ki bi ga algoritem moral urediti v nekaj minutah, izvajal pa se je več ur. Če ga ne bi ustavila, bi se izvajal še več tednov [6]. Njun pristop temelji na problemu nizozemske zastave (Dutch National Flag), kjer urejamo tabelo poljubne dolžine, ki je sestavljena samo iz 3 različnih elementov: 0, 1, 2. Prejšnje verzije hitrega urejanja predpostavljajo, da so vsi elementi različni oz. ne uporabijo informacije o elementih, ki so enaki pivotu. V primeru, da imamo elemente, ki so enaki pivotu, jih večkrat po nepotrebnem primerjamo. Trosmerno hitro urejanje upošteva elemente, enake pivotu več kot jih je, bolje bo deloval. Porazdelitev s pivotom tabelo razdeli na tri dele: elemente, manjše od pivota, enake pivotu in strogo večje od pivota.
31 Diplomska naloga Poenostavljena različica Tabela je sestavljena iz štirih delov, kot je prikazano na sliki 2.10: - spodnji del: vsebuje elemente, manjše od pivota - srednji del: vsebuje elemente, enake pivotu - neobdelani del: po njem se sprehodi iteracijski element - zgornji del: elementi, večji od pivota Tro-smerno < p == p? > p l k r Slika 2.10: Splošno stanje tabele pri trosmernem porazdeljevanju p == p > p Spodnji in zgornji del omejujeta indeksa l in r, indeks k (sprehajalni Bentley-McIlroy element) označuje položaj trenutnega elementa in mejo med srednjim ter neobdelanim delom. Na začetku izvajanja sta spodnji in zgornji del prazna, = p < p? > p = p srednji del vsebuje pivot, neobdelani del pa vsebuje vse preostale elemente. Psevdokoda l algoritma [11] je i predstavljena vj algoritmu 2.7. r 1 fun = Quicksort3Way p ( a <, p l e f t, r i g h t ) > p = p 2 i f r i g h t l e f t then return l 3 p = a [ l e f t ] r 4 l = l e f t ; k = l e f t + 1 ; r = r i g h t Yaroslavsky 5 while k r do 6 i f a [ k ] < p then swap ( a, l ++, k++) p < p p q? 7 else i f a [ k ] > p then swap ( a, k, r ) > q q 8 else k++ l k r 9 Quicksort3Way ( a, l e f t, l 1) 10 Quicksort3Way < p p ( a, r + 1 p, r i g hq t ) q > q Algoriteml 2.7: Trosmerno hitro urejanje, osnovna r različica Tri-pivotno < p p < < q? q < < r > r a b c d
32 < p p < < q? q < < r > r 20 Uroš Hekić Z indeksom k iteriramo po neobdelanem delu do zgornjega dela in v vsaki iteraciji primerjamo k-ti element s pivotom. Če je k-ti element: - manjši od pivota (vrstica 6): sodi v spodnji del, zamenjamo elementa na indeksih l in k ter indeksa inkrementiramo (prestavimo spodnji del in neobdelani del za 1 v desno), - enak pivotu (vrstica 7): sodi v srednji del, zato je že na pravem mestu in inkrementiramo samo k (zmanjšamo neobdelani del), - večji od pivota (vrstica 8): sodi v zgornji del, zamenjamo k in r, in r Tro-smerno dekrementiramo (prestavimo začetek zgornjega dela za 1 v levo). Na koncu zanke so vsi elementi v spodnjem delu manjši od pivota, v < p == p? > p srednjem delu so enaki pivotu in v zgornjem delu večji od pivota, kar vidimo na sliki Sedaj l samo še rekurzivno k uredimo spodnjir in zgornji del. p == p > p Bentley-McIlroy Slika 2.11: Končno stanje tabele pri trosmernem porazdeljevanju Implementacija = p se< dobro p obnaša na? zaporedjih z več > p enakimi elementi. = p Algoritem je zelo l hiter, kadar se vi zaporedju nahaja j čim manjše število r različnih elementov oz. posledično veliko število pivotu enakih elementov. = p < p > p = p Bentley-McIlroy porazdeljevanje l r V praksi je ponavadi manj elementov, podobnih pivotu, kot tistih, ki so različni Yaroslavsky od pivota. V tem primeru je bolj smiselno, da je srednji del iz poenostavljene verzije na robu tabele, saj pri tem naredimo manj zamenjav. Šep bolj učinkovita < p je simetrična p različica, q kjer imamo? elemente, > q enake pivotu, q na obeh koncih tabele l (prikazano na sliki k 2.12). r Bentley-McIlroy porazdeljevanje [11, 6] je opisano v algoritmu 2.8. < p p p q q > q l r Tri-pivotno
33 < p == p? > p l k r p == p > p Diplomska naloga 21 Bentley-McIlroy Tro-smerno = p < p? > p = p l i j r < p == p? > p Slika 2.12: Splošno stanje tabele pri porazdeljevanju Bentley-McIlroy = p l < p k > p r = p Spodnji del l s pivotu enakimi elementi (navzgor) omejuje l, r zgornji del pa p == p > p (navzdol) omejuje r. Podobno kot pri Hoareu oz. porazdelitvi s križanjem kazalcev Yaroslavsky se iteracijski indeks i pomika navzgor, j pa navzdol. To najdemo v Bentley-McIlroy vrsticah 6 do 8 algoritma 2.8. p Ko obdelamo < p vse neobdelane p elemente, q sta? zgornji in spodnji > q del pravilno q = p < p? > p = p porazdeljena, srednjal dela pa se nahajata k na robovih r tabele. To prikazuje slika l i j r < p p p q q > q = p < p > p = p l r l r Tri-pivotno Slika Yaroslavsky 2.13: Končno stanje tabele pri porazdeljevanju Bentley-McIlroy s pivoti na < prvotnih p p mestih < < q? q < < r > r Tro-smerno p < p p q? > q q a b c d Zato ju moramo l z zamenjavami prenesti k na sredino r (vrstici 13 in 14). < p == p? > p Končno stanje je prikazano na sliki Nato algoritem rekurzivno pokličemo< p nad spodnjim p < p p < < q q < < r > r l in zgornjimp delom. k q q r > q a d p l == p r > p Tri-pivotno Bentley-McIlroy Slika 2.14: Končno stanje tabele pri porazdeljevanju Bentley-McIlroy < p p < < q? q < < r > r = p < p? > p = p 1 fun QuicksortBentleyMcIlroy ( a, l e f t, r i g h t ) a b c d 2 i f r i gl h t <= l e f t then i return ; j r 3 p = a [ l e f t ] ; 4 = = r i g h r = j = p < p > p = p < p l = l e f t ; i p < < q l e f t ; j q < < r t + 1 ; > r a d l r Yaroslavsky p < p p q? > q q
34 22 Uroš Hekić 5 while true do 6 while a[++ i ] < p and i < r i g h t 7 while a[ j ] > p 8 i f ( i >= j ) then break 9 swap ( a, i, j ) 10 i f a [ i ] == p then swap ( a, ++l, i ) 11 i f a [ j ] == p then swap ( a, r, j ) 12 i = j for k = l e f t to l do swap ( a, k, j ) 14 for k = r i g h t downto r do swap ( a, k, i++) 15 QuicksortBentleyMcIlroy ( a, l e f t, j ) 16 QuicksortBentleyMcIlroy ( a, i, r i g h t ) Algoritem 2.8: Bentley-McIlroy hitro urejanje 2.8 Porazdeljevanje Jaroslavskega Osnovna različica Shema razdeli tabelo na šest delov oz. na dva pivota in še štiri dele [16], kot je prikazano na sliki 2.15: - levi pivot p - spodnji del: elementi, manjši od p - srednji del: elementi, med p in q - neobdelani elementi - zgornji del: elementi, večji od q - desni pivot q Algoritem predpostavlja, da je levi pivot manjši od desnega, p < q. Trenutni (še neobdelani) element označuje indeks k:
35 l i j r = p < p > p = p l r Diplomska naloga 23 Yaroslavsky Tro-smerno p < p < p p == p q?? > q > p q l l k k r r Slika 2.15: Splošno stanje tabele < p p p p == p q q > p > q če je trenutni l element manjši od levega pivota (vrstica r 7), a[k] < p, Bentley-McIlroy ga zamenjamo z l-tim elementom ter povečamo indeksa l in k (s tem Tri-pivotno srednji del prestavimo za 1 v desno), = p < p? > p = p < p če je trenutni p l < < q element večji i od? desnegaj pivota (vrstica q < < r 8), r a[k] > > r q, ga zamenjamo z r-tim elementom in zmanjšamo r (zgornji del se razširi a b c d = za p 1 v levo), < p > p = p sicer < p povečamo l k p (vrstica < < q 9). q < < r r > r a d k-ti Yaroslavsky element želimo s čim manj potezami spraviti na pravo mesto. Na koncu zanke je potrebno levi in desni pivot premakniti na ustrezno mesto, p kot< jep opisano v vrsticah p q 10 in 11. Končno? stanje osnovne > q različice q prikazuje slika l k r < p p p q q > q l r Tri-pivotno Slika 2.16: Končno stanje tabele Nato s 3 rekurzivnimi klici funkcije uredimo spodnji, srednji in zgornji < p p < < q? q < < r > r del. a b c d Implementacija osnovne različice iz prejšnjega odstavka [10] je opisana v algoritmu 2.9. < p p < < q q < < r > r 1 fun QuicksortYaroSimple ( a, l e f t, r i g h t ) 2 i f r i g h t <= a l e f t then return d 3 i f a [ l e f t ] > a [ r i g h t ] then swap ( a, l e f t, r i g h t )
36 24 Uroš Hekić 4 p = a [ l e f t ], q = a [ r i g h t ] 5 l = l e f t + 1, k = l, r = r i g h t 1 6 while k <= r do 7 i f a [ k ] < p then swap ( a, l ++, k++) 8 else i f a [ k ] > q then swap ( a, k, r ) 9 else k++ 10 swap ( a, l e f t, l ) 11 swap ( a, ++r, r i g h t ) 12 QuicksortYaroSimple ( a, l e f t, l 1) 13 QuicksortYaroSimple ( a, l + 1, r 1) 14 QuicksortYaroSimple ( a, r + 1, r i g h t ) Algoritem 2.9: Hitro urejanje Jaroslavskega, osnovna različica Izboljšana različica Prva pohitritev izhaja iz primera, ko je k-ti element večji od desnega pivota q in bi hoteli k-ti element premakniti v zgornji del oz. zamenjati k-ti in r-ti element. V primeru, da je hkrati r-ti element večji od k-tega, lahko v zanki zmanjšujemo r in k-ti element zamenjamo s tistim, ki bo manjši od r-tega (vrstica 9): while a[r] > q and k < r do r-- Po koncu te zanke je r-ti element res manjši od q, zato ga zamenjamo s k-tim (vrstica 10): swap(a, k, r--) Druga pohitritev pa temelji na želji, da bi indeks k inkrementirali na vsaki iteraciji zunanje while zanke. Tega trenutno ne moremo, ko ne velja, da a[k] < p in a[k] > q oz. v else if znotraj zanke. Po zamenjavi je sicer k-ti element res manjši od q, a[k] < q, vendar ne vemo, ali je večji ali manjši od p. Zato z dodatno zanko preverimo še ta pogoj: if a[k] < p then swap(a, l++, k)
37 Diplomska naloga 25 Po tem lahko na koncu zanke brezpogojno povečamo k. Algoritem z obema pohitritvama [10] je opisan v algoritmu fun QuicksortYaro ( a, l e f t, r i g h t ) 2 i f ( r i g h t <= l e f t ) then return 3 i f a [ l e f t ] > a [ r i g h t ] then swap ( a, l e f t, r i g h t ) 4 p = a [ l e f t ], q = a [ r i g h t ] 5 l = l e f t + 1, k = l, r = r i g h t 1 6 while ( k <= r ) do 7 i f a [ k ] < p then swap ( a, l ++, k ) 8 else i f a [ k ] > q ) then 9 while a [ r ] > q and k < r do r 10 swap ( a, k, r ) 11 i f a [ k ] < p then swap ( a, l ++, k ) 12 k++ 13 swap ( a, l, l e f t ) 14 swap ( a, ++r, r i g h t ) 15 QuicksortYaro ( a, l e f t, l 1) 16 QuicksortYaro ( a, l + 1, r 1) 17 QuicksortYaro ( a, r + 1, r i g h t ) ; Algoritem 2.10: Hitro urejanje Jaroslavskega Dvopivotni Quicksort ima 2n ln(n) primerjav, povprečno št. zamenjav pa 0, 8n ln(n), medtem ko ima klasični Quicksort 2n ln(n) primerjav in n ln(n) zamenjav [16]. 2.9 Tropivotno porazdeljevanje Shrinu Kushagra, Alejandro López-Ortiz, J. Ian Munro in Aurick Qiao so leta 2013 objavili članek, ki opisuje nov tropivotni Quicksort. Algoritem, kot že ime pove, uporablja tri pivote: p, q in r, za katere velja p < q < r. V vsaki iteraciji algoritem particionira tabelo v štiri podtabele
38 p == p > p Bentley-McIlroy = p < p? > p = p 26 l i j r Uroš Hekić (kot prikazano na sliki 2.17) in vsako izmed njih rekurzivno uredi. Na prvi = p < p > p = p pogled izgleda, kot da algoritem izvaja dva nivoja običajnega enopivotnega l r hitrega urejanja v enem koraku porazdeljevanja. Toda sredinski pivot q vsebuje več informacij, saj predstavlja mediano med tremi pivoti. To je enako Yaroslavsky običajnemu algoritmu hitrega urejanja, ki na alternirajočih nivojih kot pivot izbere mediano treh. S tega vidika bi lahko pričakovali, da bo algoritem po p < p p q? > q q hitrosti med klasičnim algoritmom hitrega urejanja in hitrim urejanjem, ki kot pivot uporablja mediano l treh števil. k V praksi pa r se izkaže, da je ta algoritem veliko hitrejši [9]. V psevdokodi < p tropivotnegap porazdeljevanja p q bomo tabelo q označili > q z A, saj a označuje indeks. l Predpostavimo, da so vsi elementi r različni. Algoritem za particioniranje uporablja štiri indekse: a, b, c in d, ki ohranjajo zančno invarianto Tri-pivotno prikazano na spodnji shemi: < p p < < q? q < < r > r a b c d Slika 2.17: Splošno stanje tabele pri tropivotnem porazdeljevanju < p p < < q q < < r > r Indeksa a in b inicializiramo a tako, da kažeta na prvi d element tabele, c in d pa na zadnji element. Algoritem premika b in c enega proti drugemu in premika elemente na a[b] in a[c] v pravilno podtabelo, zanka pa se konča, ko se b in c križata (b > c). V primeru, da je a[b] < q, če velja a[b] < p, zamenjamo a[b] in a[a] ter inkrementiramo a in b, sicer pa ne naredimo ničesar in samo inkrementiramo b (saj je a[b] na pravem indeksu). Simetrično velja za primer a[c] > q. Če je a[b] > q in a[c] < q, potem oba elementa zamenjamo po enem izmed štirih primerov in po potrebi povečamo oz. zmanjšamo a, b, c in d: Če je a[b] > r: (a) če je a[c] < p, potem zamenjamo a[b] in a[a] ter a[a] in a[c] ter inkrementiramo a, (b) sicer zamenjamo a[b] in a[c].
39 = p < p? > p = p l i j r = p < p > p = p Diplomska l naloga r 27 Yaroslavsky V obeh primerih na koncu zamenjamo a[c] in a[d], inkrementiramo b in dekrementiramo c in d. p < p p q? > q q sicer (a[b] < r): l k r (a) če je a[c] < p, potem zamenjamo a[b] in a[a] ter a[a] in a[c] ter < p inkrementiramo p a, p q q > q (b) sicer zamenjamo l a[b] in a[c]. r Tri-pivotno V obeh primerih na koncu inkrementiramo b in dekrementiramo c. < p p < < q? q < < r > r Končno stanje tabele po porazdeljevanju je prikazano na sliki a b c d < p p < < q q < < r > r a d Slika 2.18: Končno stanje tabele pri tropivotnem porazdeljevanju Psevdokoda algoritma za particioniranje [9] je opisana v algoritmu fun P a r t i t i o n 3 P i v o t (A, l e f t, r i g h t ) 2 a = l e f t + 2, b = l e f t c = r i g h t 1, d = r i g h t 1 4 p = A[ l e f t ], q = A[ l e f t + 1 ], r = A[ r i g h t ] 5 while b <= c do 6 while A[ b ] < q and b <= c do 7 i f A[ b ] < p then 8 swap (A, a, b ) 9 a = a b = b while A[ c ] > q and b <= c do 12 i f A[ c ] > r then
40 28 Uroš Hekić 13 swap (A, c, d ) 14 d = d 1 15 c = c 1 16 i f b <= c then 17 i f A[ b ] > r then 18 i f A[ c ] < p then 19 swap (A, b, a ), swap (A, a, c ) 20 a = a else 22 swap (A, b, c ) 23 swap (A, c, d ) 24 b = b + 1, c = c 1, d = d 1 25 else 26 i f A[ c ] < p then 27 swap (A, b, a ), swap (A, a, c ) 28 a = a else 30 swap (A, b, c ) 31 b = b + 1, c = c 1 32 a = a 1, b = b 1, c = c + 1, d = d swap (A, l e f t + 1, a ), swap (A, a, b ) 34 a = a 1 35 swap (A, l e f t, a ), swap (A, r i g h t, d ) Algoritem 2.11: Tropivotno hitro urejanje
41 Poglavje 3 Eksperimentalna primerjava Algoritme smo implementirali v programskem jeziku C. Poganjali smo jih na računalniku s procesorjem Intel(R) Core(TM) i7-7700hq, s frekvenco 2.80 GHz, ki ima 4 jedra (8 niti), 6 MB predpomnilnika in 16 GB DDR4 pomnilnika s frekvenco 1200 MHz. Za prevajanje kode smo uporabili gcc z argumentom za optimizacijo -O Implementacija algoritmov Pri izvajanju algoritmov smo zraven velikosti (in drugih parametrov) vhodnih podatkov beležili: - število primerjav s pivotnim elementom - število premikov - število rekurzivnih klicev - št. ponovitev pri merjenju števila primerjav, premikov in rekurzivnih klicev - čas izvajanja - št. ponovitev pri merjenju časa izvajanja 29
42 30 Uroš Hekić Vse testne primere smo izvedli dvakrat, saj štetje premikov, primerjav in rekurzivnih klicev poveča čas izvajanja. Prvič smo beležili število premikov, število primerjav s pivotnim elementom, število rekurzivnih klicev ter število ponovitev (različnih testnih primerov), ki nam jih je uspelo izvesti znotraj določenega časovnega intervala. Drugič pa smo beležili čas ter prav tako število ponovitev, ki nam jih je uspelo izvesti. Implementirane algoritme in generator testnih primerov najdemo na mojem Github repozitoriju [3]. 3.2 Generator testnih primerov Algoritme smo poganjali nad testnimi primeri različnih družin in velikostnih razredov. Po pregledu področja smo se odločili, da bomo razširili Bentley- McIlroy zbirko testnih primerov [6], ki jo je med drugimi uporabil tudi Jaroslavski. Generatorje smo parametrizirali z naslednjimi parametri: - n: dolžina tabele - m: modul - p 1 : dodatni parameter za prvi korak - p 21, p 22 : dodatna parametra za drugi korak - p 31, p 32 : dodatna parametra za tretji korak Testne primere smo generirali v treh korakih. Prvi korak zgenerira tabelo n števil. Izbiramo lahko med tremi načini generiranja: - Rand(n, m): zgenerira n naključnih števil med 0 in m 1, - Saw(n, m, p 1 ): zgenerira n števil po formuli a[i] = (i p 1 ) mod m
43 Diplomska naloga 31 - Shuffle(n, m) 1 : Na začetku inicializiramo j = 0, k = 1. Z iteracijsko spremenljivko i iteriramo od 0 do n 1 in računamo naključna števila med 0 in m 1, kot je opisano v algoritmu 3.1. Če je število enako 0, povečamo k za 2 in vrednost k shranimo v a[i]. Če pa je število večje od 0, pa povečamo j za 2 in vrednost j shranimo v a[i]. 1 fun s h u f f l e ( a, n, m) 2 for ( i = 0, j = 0, k = 1 ; i < n ; i++) 3 a [ i ] = rand ( ) % m? ( j += 2) : ( k += 2) Algoritem 3.1: Shuffle, eden izmed algoritmov prvega koraka V drugem koraku lahko vnesemo dodaten šum ali pa postavimo spodnjo ali zgornjo mejo za števila v tabeli. - Id: ohrani tabelo nespremenjeno - Plateau(p 21, p 22 ): vsa števila, večja od zgornje meje p 22, zmanjša na p 22, vsa števila, večja od spodnje meje p 21, poveča na p 21 - Dither(p 21 ): prišteje i mod p 21 k a[i]: a[i] = a[i] + (i mod p 21 ) V tretjem koraku lahko dodatno permutiramo obstoječo tabelo z izbiro enega izmed naslednjih algoritmov: - Id: ohrani tabelo nespremenjeno - Sort: uredi tabelo - Reverse(p 31, p 32 ): elemente med indeksoma p 31 n in (vključno) p 32 n postavi v obratni vrstni red - RandPerm: naredi naključno permutacijo tabele 1 Kljub imenu ne gre za permutacijo, tak način generiranja sta uporabila Bentley in McIlroy v članku [6] in ga poimenovala shuffle.
44 32 Uroš Hekić - Swap(p 31 ): naredi p 31 n permutacij dveh naključnih elementov Parametra p 31 in p 32 sta elementa množice [0, 1]. S tem lahko predstavimo indekse od 0 do n. V primeru Reverse ni smiselno imeti večje domene, saj drugi indeksi ne obstajajo. V primeru Swap pa ni smiselno, da naredimo več kot n zamenjav Naključna permutacija Fisher-Yates prerazporeditev Fisher-Yates prerazporeditev (angl. Fisher Yates shuffle), včasih tudi Knuthova prerazporeditev (angl. Knuth s shuffle), je algoritem za generiranje naključne permutacije končnega zaporedja. Algoritem sta prva opisala Ronald Fisher in Frank Yates leta 1938 v svoji knjigi Statistical tables for biological, agricultural and medical research[1]. Pomemben je zato, ker vrne nepristransko permutacijo, kjer je vsaka permutacija enako verjetna. Za generiranje naključne permutacije števil od 1 do n sledimo naslednjim korakom: 1. Zapišemo števila od 1 do n. 2. Izberemo naključno število k med 1 in (vključno) številom številk, ki jih še nismo obdelali. 3. Štejemo od spodaj navzgor in k-to število, ki še ga nismo obdelali, prečrtamo in ga zapišemo na ločen seznam. 4. Ponavljamo 2. korak, dokler vsa števila niso obdelana (prečrtana). 5. Zaporedje na ločenem seznamu iz 3. koraka je naša naključna permutacija. Ob predpostavki, da so števila izbrana v 2. koraku resnično naključna in nepristranska, bo nepristranska tudi permutacija.
45 Diplomska naloga 33 Sodobna različica algoritma Sodobno različico algoritma je predstavil Richard Durstenfeld, leta 1964, populariziral pa jo je Donald E. Knuth v svoji knjigi The Art of Computer Programming kot Algorithm P (Shuffling ) [1]. Medtem ko Fisher-Yates algoritem porabi veliko časa za štetje neobdelanih števil v 3. koraku, Durstenfeld predlaga rešitev, kjer obdelan element premaknemo na konec seznama tako, da ga zamenjamo z zadnjim neobdelanim elementom. Ta izboljšava zmanjša časovno zahtevnost iz kvadratne časovne zahtevnosti O(n 2 ) na linearno O(n). 1 fun D u r s t e n f e l d S h u f f l e ( a, n ) 2 for i from n 1 downto 1 3 j = random ( 0, i ) // 0 j i 4 swap ( a, i, j ) Algoritem 3.2: Durstenfeldov algoritem za generiranje naključne permutacije zaporedja 3.3 Testni primeri Algoritme smo pognali nad testnimi scenariji naključno, duplikati in skoraj urejeno, ki smo jih generirali z našim generatorjem testnih primerov na naslednji način: Naključno Testni scenarij vključuje naključne permutacije tabele z elementi od 0 do (vključno) n 1. Generiramo ga s parametri (Saw(n, n, 1), Id, RandPerm). Duplikati Vključuje naključno permutacijo števil, ki jih sestavlja 85 % enakih števil. Najprej zgeneriramo n števil od 0 do n 1, jih omejimo z zgornjo mejo (1 0, 85) n ter tabelo naključno permutiramo. Generiramo ga s parametri (Saw(n, n, 1), Plateau(0, 0, 15 n), RandPerm).
Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 22. oktober Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 22. oktober 2013 Kdaj je zaporedje {a n } konvergentno, smo definirali s pomočjo limite zaporedja. Večkrat pa je dobro vedeti,
Διαβάστε περισσότεραDiferencialna enačba, v kateri nastopata neznana funkcija in njen odvod v prvi potenci
Linearna diferencialna enačba reda Diferencialna enačba v kateri nastopata neznana funkcija in njen odvod v prvi potenci d f + p= se imenuje linearna diferencialna enačba V primeru ko je f 0 se zgornja
Διαβάστε περισσότεραFunkcijske vrste. Matematika 2. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 2. april Gregor Dolinar Matematika 2
Matematika 2 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 2. april 2014 Funkcijske vrste Spomnimo se, kaj je to številska vrsta. Dano imamo neko zaporedje realnih števil a 1, a 2, a
Διαβάστε περισσότεραTretja vaja iz matematike 1
Tretja vaja iz matematike Andrej Perne Ljubljana, 00/07 kompleksna števila Polarni zapis kompleksnega števila z = x + iy): z = rcos ϕ + i sin ϕ) = re iϕ Opomba: Velja Eulerjeva formula: e iϕ = cos ϕ +
Διαβάστε περισσότεραOdvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 5. december Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 5. december 2013 Primer Odvajajmo funkcijo f(x) = x x. Diferencial funkcije Spomnimo se, da je funkcija f odvedljiva v točki
Διαβάστε περισσότεραOdvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 10. december Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 10. december 2013 Izrek (Rolleov izrek) Naj bo f : [a,b] R odvedljiva funkcija in naj bo f(a) = f(b). Potem obstaja vsaj ena
Διαβάστε περισσότεραFunkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 21. november Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 21. november 2013 Hiperbolične funkcije Hiperbolični sinus sinhx = ex e x 2 20 10 3 2 1 1 2 3 10 20 hiperbolični kosinus coshx
Διαβάστε περισσότεραKODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK
1 / 24 KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK Štefko Miklavič Univerza na Primorskem MARS, Avgust 2008 Phoenix 2 / 24 Phoenix 3 / 24 Phoenix 4 / 24 Črtna koda 5 / 24 Črtna koda - kontrolni bit 6 / 24
Διαβάστε περισσότεραBooleova algebra. Izjave in Booleove spremenljivke
Izjave in Booleove spremenljivke vsako izjavo obravnavamo kot spremenljivko če je izjava resnična (pravilna), ima ta spremenljivka vrednost 1, če je neresnična (nepravilna), pa vrednost 0 pravimo, da gre
Διαβάστε περισσότεραZaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 15. oktober Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 15. oktober 2013 Oglejmo si, kako množimo dve kompleksni števili, dani v polarni obliki. Naj bo z 1 = r 1 (cosϕ 1 +isinϕ 1 )
Διαβάστε περισσότεραNEPARAMETRIČNI TESTI. pregledovanje tabel hi-kvadrat test. as. dr. Nino RODE
NEPARAMETRIČNI TESTI pregledovanje tabel hi-kvadrat test as. dr. Nino RODE Parametrični in neparametrični testi S pomočjo z-testa in t-testa preizkušamo domneve o parametrih na vzorcih izračunamo statistike,
Διαβάστε περισσότεραmatrike A = [a ij ] m,n αa 11 αa 12 αa 1n αa 21 αa 22 αa 2n αa m1 αa m2 αa mn se števanje po komponentah (matriki morata biti enakih dimenzij):
4 vaja iz Matematike 2 (VSŠ) avtorica: Melita Hajdinjak datum: Ljubljana, 2009 matrike Matrika dimenzije m n je pravokotna tabela m n števil, ki ima m vrstic in n stolpcev: a 11 a 12 a 1n a 21 a 22 a 2n
Διαβάστε περισσότεραMATEMATIČNI IZRAZI V MAFIRA WIKIJU
I FAKULTETA ZA MATEMATIKO IN FIZIKO Jadranska cesta 19 1000 Ljubljan Ljubljana, 25. marec 2011 MATEMATIČNI IZRAZI V MAFIRA WIKIJU KOMUNICIRANJE V MATEMATIKI Darja Celcer II KAZALO: 1 VSTAVLJANJE MATEMATIČNIH
Διαβάστε περισσότεραKotne in krožne funkcije
Kotne in krožne funkcije Kotne funkcije v pravokotnem trikotniku Avtor: Rok Kralj, 4.a Gimnazija Vič, 009/10 β a c γ b α sin = a c cos= b c tan = a b cot = b a Sinus kota je razmerje kotu nasprotne katete
Διαβάστε περισσότεραFunkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 12. november Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 12. november 2013 Graf funkcije f : D R, D R, je množica Γ(f) = {(x,f(x)) : x D} R R, torej podmnožica ravnine R 2. Grafi funkcij,
Διαβάστε περισσότεραFunkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 14. november Gregor Dolinar Matematika 1
Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 14. november 2013 Kvadratni koren polinoma Funkcijo oblike f(x) = p(x), kjer je p polinom, imenujemo kvadratni koren polinoma
Διαβάστε περισσότερα13. Jacobijeva metoda za računanje singularnega razcepa
13. Jacobijeva metoda za računanje singularnega razcepa Bor Plestenjak NLA 25. maj 2010 Bor Plestenjak (NLA) 13. Jacobijeva metoda za računanje singularnega razcepa 25. maj 2010 1 / 12 Enostranska Jacobijeva
Διαβάστε περισσότεραNumerično reševanje. diferencialnih enačb II
Numerčno reševanje dferencaln enačb I Dferencalne enačbe al ssteme dferencaln enačb rešujemo numerčno z več razlogov:. Ne znamo j rešt analtčno.. Posamezn del dferencalne enačbe podan tabelarčno. 3. Podatke
Διαβάστε περισσότεραDelovna točka in napajalna vezja bipolarnih tranzistorjev
KOM L: - Komnikacijska elektronika Delovna točka in napajalna vezja bipolarnih tranzistorjev. Določite izraz za kolektorski tok in napetost napajalnega vezja z enim virom in napetostnim delilnikom na vhod.
Διαβάστε περισσότεραKontrolne karte uporabljamo za sprotno spremljanje kakovosti izdelka, ki ga izdelujemo v proizvodnem procesu.
Kontrolne karte KONTROLNE KARTE Kontrolne karte uporablamo za sprotno spremlane kakovosti izdelka, ki ga izdeluemo v proizvodnem procesu. Izvaamo stalno vzorčene izdelkov, npr. vsako uro, vsake 4 ure.
Διαβάστε περισσότερα1. Trikotniki hitrosti
. Trikotniki hitrosti. Z radialno črpalko želimo črpati vodo pri pogojih okolice z nazivnim pretokom 0 m 3 /h. Notranji premer rotorja je 4 cm, zunanji premer 8 cm, širina rotorja pa je,5 cm. Frekvenca
Διαβάστε περισσότερα1 Fibonaccijeva stevila
1 Fibonaccijeva stevila Fibonaccijevo število F n, kjer je n N, lahko definiramo kot število načinov zapisa števila n kot vsoto sumandov, enakih 1 ali Na primer, število 4 lahko zapišemo v obliki naslednjih
Διαβάστε περισσότεραSplošno o interpolaciji
Splošno o interpolaciji J.Kozak Numerične metode II (FM) 2011-2012 1 / 18 O funkciji f poznamo ali hočemo uporabiti le posamezne podatke, na primer vrednosti r i = f (x i ) v danih točkah x i Izberemo
Διαβάστε περισσότεραPONOVITEV SNOVI ZA 4. TEST
PONOVITEV SNOVI ZA 4. TEST 1. * 2. *Galvanski člen z napetostjo 1,5 V požene naboj 40 As. Koliko električnega dela opravi? 3. ** Na uporniku je padec napetosti 25 V. Upornik prejme 750 J dela v 5 minutah.
Διαβάστε περισσότεραOsnove elektrotehnike uvod
Osnove elektrotehnike uvod Uvod V nadaljevanju navedena vprašanja so prevod testnih vprašanj, ki sem jih našel na omenjeni spletni strani. Vprašanja zajemajo temeljna znanja opredeljenega strokovnega področja.
Διαβάστε περισσότεραV tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant.
Poglavje IV Determinanta matrike V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant 1 Definicija Preden definiramo determinanto,
Διαβάστε περισσότεραSKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK
SKUPNE PORAZDELITVE SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK Kovaec vržemo trikrat. Z ozačimo število grbov ri rvem metu ( ali ), z Y a skuo število grbov (,, ali 3). Kako sta sremelivki i Y odvisi
Διαβάστε περισσότεραIZPIT IZ ANALIZE II Maribor,
Maribor, 05. 02. 200. (a) Naj bo f : [0, 2] R odvedljiva funkcija z lastnostjo f() = f(2). Dokaži, da obstaja tak c (0, ), da je f (c) = 2f (2c). (b) Naj bo f(x) = 3x 3 4x 2 + 2x +. Poišči tak c (0, ),
Διαβάστε περισσότεραReševanje sistema linearnih
Poglavje III Reševanje sistema linearnih enačb V tem kratkem poglavju bomo obravnavali zelo uporabno in zato pomembno temo linearne algebre eševanje sistemov linearnih enačb. Spoznali bomo Gaussovo (natančneje
Διαβάστε περισσότεραMatrike. Poglavje II. Matrika je pravokotna tabela realnih števil. Na primer: , , , 0 1
Poglavje II Matrike Matrika je pravokotna tabela realnih števil Na primer: [ ] 1 1 1, 2 3 1 1 0 1 3 2 1, 0 1 4 [ ] 2 7, Matrika je sestavljena iz vrstic in stolpcev Vrstici matrike [ ] 1 1 1 2 3 1 [ ]
Διαβάστε περισσότεραDeli in vladaj. J.Kozak: PSA II, / 75
Deli in vladaj J.Kozak: PSA II, 2010-2011 1 / 75 Metoda deli in vladaj je ena od pomembnih splošnih metod načrtovanja algoritmov. Če je problem, ki ga rešujemo, preveč zapleten, si lahko pomagamo tako,
Διαβάστε περισσότερα8. Diskretni LTI sistemi
8. Diskreti LI sistemi. Naloga Določite odziv diskretega LI sistema s podaim odzivom a eoti impulz, a podai vhodi sigal. h[] x[] - - 5 6 7 - - 5 6 7 LI sistem se a vsak eoti impulz δ[] a vhodu odzove z
Διαβάστε περισσότεραDISKRETNA FOURIERJEVA TRANSFORMACIJA
29.03.2004 Definicija DFT Outline DFT je linearna transformacija nekega vektorskega prostora dimenzije n nad obsegom K, ki ga označujemo z V K, pri čemer ima slednji lastnost, da vsebuje nek poseben element,
Διαβάστε περισσότεραTransformator. Delovanje transformatorja I. Delovanje transformatorja II
Transformator Transformator je naprava, ki v osnovi pretvarja napetost iz enega nivoja v drugega. Poznamo vrsto različnih izvedb transformatorjev, glede na njihovo specifičnost uporabe:. Energetski transformator.
Διαβάστε περισσότεραFazni diagram binarne tekočine
Fazni diagram binarne tekočine Žiga Kos 5. junij 203 Binarno tekočino predstavljajo delci A in B. Ti se med seboj lahko mešajo v različnih razmerjih. V nalogi želimo izračunati fazni diagram take tekočine,
Διαβάστε περισσότεραTabele termodinamskih lastnosti vode in vodne pare
Univerza v Ljubljani Fakulteta za strojništvo Laboratorij za termoenergetiko Tabele termodinamskih lastnosti vode in vodne pare po modelu IAPWS IF-97 izračunano z XSteam Excel v2.6 Magnus Holmgren, xsteam.sourceforge.net
Διαβάστε περισσότερα1. Έντυπα αιτήσεων αποζημίωσης... 2 1.1. Αξίωση αποζημίωσης... 2 1.1.1. Έντυπο... 2 1.1.2. Πίνακας μεταφράσεων των όρων του εντύπου...
ΑΠΟΖΗΜΙΩΣΗ ΘΥΜΑΤΩΝ ΕΓΚΛΗΜΑΤΙΚΩΝ ΠΡΑΞΕΩΝ ΣΛΟΒΕΝΙΑ 1. Έντυπα αιτήσεων αποζημίωσης... 2 1.1. Αξίωση αποζημίωσης... 2 1.1.1. Έντυπο... 2 1.1.2. Πίνακας μεταφράσεων των όρων του εντύπου... 3 1 1. Έντυπα αιτήσεων
Διαβάστε περισσότεραMatematika 1. Gabrijel Tomšič Bojan Orel Neža Mramor Kosta
Matematika Gabrijel Tomšič Bojan Orel Neža Mramor Kosta 6. november 200 Poglavje 2 Zaporedja in številske vrste 2. Zaporedja 2.. Uvod Definicija 2... Zaporedje (a n ) = a, a 2,..., a n,... je predpis,
Διαβάστε περισσότεραPodobnost matrik. Matematika II (FKKT Kemijsko inženirstvo) Diagonalizacija matrik
Podobnost matrik Matematika II (FKKT Kemijsko inženirstvo) Matjaž Željko FKKT Kemijsko inženirstvo 14 teden (Zadnja sprememba: 23 maj 213) Matrika A R n n je podobna matriki B R n n, če obstaja obrnljiva
Διαβάστε περισσότεραPOROČILO. št.: P 1100/ Preskus jeklenih profilov za spuščen strop po točki 5.2 standarda SIST EN 13964:2004
Oddelek za konstrkcije Laboratorij za konstrkcije Ljbljana, 12.11.2012 POROČILO št.: P 1100/12 680 01 Presks jeklenih profilov za spščen strop po točki 5.2 standarda SIST EN 13964:2004 Naročnik: STEEL
Διαβάστε περισσότερα1. Definicijsko območje, zaloga vrednosti. 2. Naraščanje in padanje, ekstremi. 3. Ukrivljenost. 4. Trend na robu definicijskega območja
ZNAČILNOSTI FUNKCIJ ZNAČILNOSTI FUNKCIJE, KI SO RAZVIDNE IZ GRAFA. Deinicijsko območje, zaloga vrednosti. Naraščanje in padanje, ekstremi 3. Ukrivljenost 4. Trend na robu deinicijskega območja 5. Periodičnost
Διαβάστε περισσότερα5.1 Predpogojevanje. K 1 Ax = K 1 b,
5.1 Predpogojevanje Konvergenca metod podprostorov za reševanje linearnega sistema Ax = b je v veliki meri odvisna od razporeditve lastnih vrednosti (in lastnih vektorjev) matrike A. Kadar je konvergenca
Διαβάστε περισσότεραOsnove matematične analize 2016/17
Osnove matematične analize 216/17 Neža Mramor Kosta Fakulteta za računalništvo in informatiko Univerza v Ljubljani Kaj je funkcija? Funkcija je predpis, ki vsakemu elementu x iz definicijskega območja
Διαβάστε περισσότερα*M * Osnovna in višja raven MATEMATIKA NAVODILA ZA OCENJEVANJE. Sobota, 4. junij 2011 SPOMLADANSKI IZPITNI ROK. Državni izpitni center
Državni izpitni center *M40* Osnovna in višja raven MATEMATIKA SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Sobota, 4. junij 0 SPLOŠNA MATURA RIC 0 M-40-- IZPITNA POLA OSNOVNA IN VIŠJA RAVEN 0. Skupaj:
Διαβάστε περισσότεραSpoznajmo sedaj definicijo in nekaj osnovnih primerov zaporedij števil.
Zaporedja števil V matematiki in fiziki pogosto operiramo s približnimi vrednostmi neke količine. Pri numeričnemu računanju lahko npr. število π aproksimiramo s števili, ki imajo samo končno mnogo neničelnih
Διαβάστε περισσότεραNa pregledni skici napišite/označite ustrezne točke in paraboli. A) 12 B) 8 C) 4 D) 4 E) 8 F) 12
Predizpit, Proseminar A, 15.10.2015 1. Točki A(1, 2) in B(2, b) ležita na paraboli y = ax 2. Točka H leži na y osi in BH je pravokotna na y os. Točka C H leži na nosilki BH tako, da je HB = BC. Parabola
Διαβάστε περισσότεραDragi polinom, kje so tvoje ničle?
1 Dragi polinom, kje so tvoje ničle? Vito Vitrih FAMNIT - Izlet v matematično vesolje 17. december 2010 Polinomi: 2 Polinom stopnje n je funkcija p(x) = a n x n + a n 1 x n 1 +... + a 1 x + a 0, a i R.
Διαβάστε περισσότεραIterativno reševanje sistemov linearnih enačb. Numerične metode, sistemi linearnih enačb. Numerične metode FE, 2. december 2013
Numerične metode, sistemi linearnih enačb B. Jurčič Zlobec Numerične metode FE, 2. december 2013 1 Vsebina 1 z n neznankami. a i1 x 1 + a i2 x 2 + + a in = b i i = 1,..., n V matrični obliki zapišemo:
Διαβάστε περισσότεραNavadne diferencialne enačbe
Poglavje 6 Navadne diferencialne enačbe 6.1 Uvod Splošna rešitev navadne diferencialne enačbe n-tega reda F(x, y, y, y,..., y (n) ) = 0 je n-parametrična družina funkcij. Kadar želimo iz splošne rešitve
Διαβάστε περισσότεραVEKTORJI. Operacije z vektorji
VEKTORJI Vektorji so matematični objekti, s katerimi opisujemo določene fizikalne količine. V tisku jih označujemo s krepko natisnjenimi črkami (npr. a), pri pisanju pa s puščico ( a). Fizikalne količine,
Διαβάστε περισσότεραUniverza v Ljubljani Fakulteta za računalništvo in informatiko MATEMATIKA. Polona Oblak
Univerza v Ljubljani Fakulteta za računalništvo in informatiko MATEMATIKA Polona Oblak Ljubljana, 04 CIP - Kataložni zapis o publikaciji Narodna in univerzitetna knjižnica, Ljubljana 5(075.8)(0.034.) OBLAK,
Διαβάστε περισσότερα11.5 Metoda karakteristik za hiperbolične PDE
11.5 Metoda karakteristik za hiperbolične PDE Hiperbolična kvazi linearna PDE ima obliko au xx + bu xy + cu yy = f, (1) kjer so a, b, c, f funkcije x, y, u, u x in u y, ter velja b 2 4ac > 0. Če predpostavimo,
Διαβάστε περισσότεραMatematika. Funkcije in enačbe
Matematika Funkcije in enačbe (1) Nariši grafe naslednjih funkcij: (a) f() = 1, (b) f() = 3, (c) f() = 3. Rešitev: (a) Linearna funkcija f() = 1 ima začetno vrednost f(0) = 1 in ničlo = 1/. Definirana
Διαβάστε περισσότεραOsnove sklepne statistike
Univerza v Ljubljani Fakulteta za farmacijo Osnove sklepne statistike doc. dr. Mitja Kos, mag. farm. Katedra za socialno farmacijo e-pošta: mitja.kos@ffa.uni-lj.si Intervalna ocena oz. interval zaupanja
Διαβάστε περισσότεραII. LIMITA IN ZVEZNOST FUNKCIJ
II. LIMITA IN ZVEZNOST FUNKCIJ. Preslikave med množicami Funkcija ali preslikava med dvema množicama A in B je predpis f, ki vsakemu elementu x množice A priredi natanko določen element y množice B. Važno
Διαβάστε περισσότεραCM707. GR Οδηγός χρήσης... 2-7. SLO Uporabniški priročnik... 8-13. CR Korisnički priručnik... 14-19. TR Kullanım Kılavuzu... 20-25
1 2 3 4 5 6 7 OFFMANAUTO CM707 GR Οδηγός χρήσης... 2-7 SLO Uporabniški priročnik... 8-13 CR Korisnički priručnik... 14-19 TR Kullanım Kılavuzu... 20-25 ENG User Guide... 26-31 GR CM707 ΟΔΗΓΟΣ ΧΡΗΣΗΣ Περιγραφή
Διαβάστε περισσότεραp 1 ENTROPIJSKI ZAKON
ENROPIJSKI ZAKON REERZIBILNA srememba: moža je obrjea srememba reko eakih vmesih staj kot rvota srememba. Po obeh sremembah e sme biti obeih trajih srememb v bližji i dalji okolici. IREERZIBILNA srememba:
Διαβάστε περισσότεραMatematika vaja. Matematika FE, Ljubljana, Slovenija Fakulteta za Elektrotehniko 1000 Ljubljana, Tržaška 25, Slovenija
Matematika 1 3. vaja B. Jurčič Zlobec 1 1 Univerza v Ljubljani, Fakulteta za Elektrotehniko 1000 Ljubljana, Tržaška 25, Slovenija Matematika FE, Ljubljana, Slovenija 2011 Določi stekališča zaporedja a
Διαβάστε περισσότεραvezani ekstremi funkcij
11. vaja iz Matematike 2 (UNI) avtorica: Melita Hajdinjak datum: Ljubljana, 2009 ekstremi funkcij več spremenljivk nadaljevanje vezani ekstremi funkcij Dana je funkcija f(x, y). Zanimajo nas ekstremi nad
Διαβάστε περισσότεραZapiski s predavanj predmeta Algoritmi in podatkovne strukture 2
Zapiski s predavanj predmeta Algoritmi in podatkovne strukture 2 Alenka Caserman 22. avgust 2006 Kazalo I Pozor 4 II Uvod 4 1 Algoritmi 4 1.1 Modeli računanja (namišljeni računalnik)............. 5 1.1.1
Διαβάστε περισσότεραEnačba, v kateri poleg neznane funkcije neodvisnih spremenljivk ter konstant nastopajo tudi njeni odvodi, se imenuje diferencialna enačba.
1. Osnovni pojmi Enačba, v kateri poleg neznane funkcije neodvisnih spremenljivk ter konstant nastopajo tudi njeni odvodi, se imenuje diferencialna enačba. Primer 1.1: Diferencialne enačbe so izrazi: y
Διαβάστε περισσότεραKotni funkciji sinus in kosinus
Kotni funkciji sinus in kosinus Oznake: sinus kota x označujemo z oznako sin x, kosinus kota x označujemo z oznako cos x, DEFINICIJA V PRAVOKOTNEM TRIKOTNIKU: Kotna funkcija sinus je definirana kot razmerje
Διαβάστε περισσότερα3.1 Reševanje nelinearnih sistemov
3.1 Reševanje nelinearnih sistemov Rešujemo sistem nelinearnih enačb f 1 (x 1, x 2,..., x n ) = 0 f 2 (x 1, x 2,..., x n ) = 0. f n (x 1, x 2,..., x n ) = 0. Pišemo F (x) = 0, kjer je x R n in F : R n
Διαβάστε περισσότεραKvantni delec na potencialnem skoku
Kvantni delec na potencialnem skoku Delec, ki se giblje premo enakomerno, pride na mejo, kjer potencial naraste s potenciala 0 na potencial. Takšno potencialno funkcijo zapišemo kot 0, 0 0,0. Slika 1:
Διαβάστε περισσότερα8. Posplošeni problem lastnih vrednosti
8. Posplošeni problem lastnih vrednosti Bor Plestenjak NLA 13. april 2010 Bor Plestenjak (NLA) 8. Posplošeni problem lastnih vrednosti 13. april 2010 1 / 15 Matrični šop Dani sta kvadratni n n matriki
Διαβάστε περισσότεραDefinicija. definiramo skalarni produkt. x i y i. in razdaljo. d(x, y) = x y = < x y, x y > = n (x i y i ) 2. i=1. i=1
Funkcije več realnih spremenljivk Osnovne definicije Limita in zveznost funkcije več spremenljivk Parcialni odvodi funkcije več spremenljivk Gradient in odvod funkcije več spremenljivk v dani smeri Parcialni
Διαβάστε περισσότεραIntegralni račun. Nedoločeni integral in integracijske metrode. 1. Izračunaj naslednje nedoločene integrale: (a) dx. (b) x 3 +3+x 2 dx, (c) (d)
Integralni račun Nedoločeni integral in integracijske metrode. Izračunaj naslednje nedoločene integrale: d 3 +3+ 2 d, (f) (g) (h) (i) (j) (k) (l) + 3 4d, 3 +e +3d, 2 +4+4 d, 3 2 2 + 4 d, d, 6 2 +4 d, 2
Διαβάστε περισσότεραKvantni računalnik. Avtor: Miha Muškinja Mentor: prof. dr. Norma Susana Mankoč Borštnik
Kvantni računalnik Avtor: Miha Muškinja Mentor: prof. dr. Norma Susana Mankoč Borštnik Vsebina predstavitve Moorov zakon, Osnove kvantnega računalnika: kvantni bit, kvantni register, Kvantna logična vrata,
Διαβάστε περισσότεραMultivariatna analiza variance
(MANOVA) MANOVA je multivariatna metoda za proučevanje odvisnosti med več odvisnimi (številskimi) in več neodvisnimi (opisnimi) spremenljivkami. (MANOVA) MANOVA je multivariatna metoda za proučevanje odvisnosti
Διαβάστε περισσότεραMatematika 1. Gregor Dolinar. 2. januar Fakulteta za elektrotehniko Univerza v Ljubljani. Gregor Dolinar Matematika 1
Mtemtik 1 Gregor Dolinr Fkultet z elektrotehniko Univerz v Ljubljni 2. jnur 2014 Gregor Dolinr Mtemtik 1 Izrek (Izrek o povprečni vrednosti) Nj bo m ntnčn spodnj mej in M ntnčn zgornj mej integrbilne funkcije
Διαβάστε περισσότεραUNIVERZITET U NIŠU ELEKTRONSKI FAKULTET SIGNALI I SISTEMI. Zbirka zadataka
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET Goran Stančić SIGNALI I SISTEMI Zbirka zadataka NIŠ, 014. Sadržaj 1 Konvolucija Literatura 11 Indeks pojmova 11 3 4 Sadržaj 1 Konvolucija Zadatak 1. Odrediti konvoluciju
Διαβάστε περισσότεραNavadne diferencialne enačbe
Navadne diferencialne enačbe Navadne diferencialne enačbe prvega reda V celotnem poglavju bo y = dy dx. Diferencialne enačbe z ločljivima spremeljivkama Diferencialna enačba z ločljivima spremeljivkama
Διαβάστε περισσότεραFrekvenčna analiza neperiodičnih signalov. Analiza signalov prof. France Mihelič
Frekvenčna analiza neperiodičnih signalov Analiza signalov prof. France Mihelič Vpliv postopka daljšanja periode na spekter periodičnega signala Opazujmo družino sodih periodičnih pravokotnih impulzov
Διαβάστε περισσότεραGimnazija Krˇsko. vektorji - naloge
Vektorji Naloge 1. V koordinatnem sistemu so podane točke A(3, 4), B(0, 2), C( 3, 2). a) Izračunaj dolžino krajevnega vektorja točke A. (2) b) Izračunaj kot med vektorjema r A in r C. (4) c) Izrazi vektor
Διαβάστε περισσότεραPROCESIRANJE SIGNALOV
Rešive pisega izpia PROCESIRANJE SIGNALOV Daum: 7... aloga Kolikša je ampliuda reje harmoske kompoee arisaega periodičega sigala? f() - -3 - - 3 Rešiev: Časova fukcija a iervalu ( /,/) je lieara fukcija:
Διαβάστε περισσότεραKotne funkcije poljubnega kota. Osnovne zveze med funkcijamo istega kota. Uporaba kotnih funkcij v poljubnem trikotniku. Kosinusni in sinusni izrek.
DN#3 (januar 2018) 3A Teme, ki jih preverja domača naloga: Kotne funkcije poljubnega kota. Osnovne zveze med funkcijamo istega kota. Uporaba kotnih funkcij v poljubnem trikotniku. Kosinusni in sinusni
Διαβάστε περισσότερα1.3 Vsota diskretnih slučajnih spremenljivk
.3 Vsota diskretnih slučajnih spremenljivk Naj bosta X in Y neodvisni Bernoullijevo porazdeljeni spremenljivki, B(p). Kako je porazdeljena njuna vsota? Označimo Z = X + Y. Verjetnost, da je P (Z = z) za
Διαβάστε περισσότεραPoglavje 7. Poglavje 7. Poglavje 7. Regulacijski sistemi. Regulacijski sistemi. Slika 7. 1: Normirana blokovna shema regulacije EM
Slika 7. 1: Normirana blokovna shema regulacije EM Fakulteta za elektrotehniko 1 Slika 7. 2: Principielna shema regulacije AM v KSP Fakulteta za elektrotehniko 2 Slika 7. 3: Merjenje komponent fluksa s
Διαβάστε περισσότεραREˇSITVE. Naloga a. b. c. d Skupaj. FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost 2. kolokvij 23.
Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost. kolokvij 3. januar 08 Navodila Pazljivo preberite besedilo naloge, preden se lotite reševanja. Nalog je 6,
Διαβάστε περισσότεραPOROČILO 3.VAJA DOLOČANJE REZULTANTE SIL
POROČILO 3.VAJA DOLOČANJE REZULTANTE SIL Izdba aje: Ljubjana, 11. 1. 007, 10.00 Jan OMAHNE, 1.M Namen: 1.Preeri paraeogramsko praio za doočanje rezutante nezporedni si s skupnim prijemaiščem (grafično)..dooči
Διαβάστε περισσότερα8. Navadne diferencialne enačbe
8. Navadne diferencialne enačbe 8.1. Začetni problem prvega reda Iščemo funkcijo y(x), ki zadošča diferencialni enačbi y = f(x, y) in začetnemu pogoju y(x 0 ) = y 0, kjer je f dana dovolj gladka funkcija
Διαβάστε περισσότεραMatematika 2. Diferencialne enačbe drugega reda
Matematika 2 Diferencialne enačbe drugega reda (1) Reši homogene diferencialne enačbe drugega reda s konstantnimi koeficienti: (a) y 6y + 8y = 0, (b) y 2y + y = 0, (c) y + y = 0, (d) y + 2y + 2y = 0. Rešitev:
Διαβάστε περισσότεραStatistična analiza. doc. dr. Mitja Kos, mag. farm. Katedra za socialno farmacijo Univerza v Ljubljani- Fakulteta za farmacijo
Statistična analiza opisnih spremenljivk doc. dr. Mitja Kos, mag. arm. Katedra za socialno armacijo Univerza v Ljubljani- Fakulteta za armacijo Statistični znaki Proučevane spremenljivke: statistični znaki
Διαβάστε περισσότεραInverzni problem lastnih vrednosti evklidsko razdaljnih matrik
Univerza v Ljubljani Fakulteta za računalništvo in informatiko Fakulteta za matematiko in fiziko Peter Škvorc Inverzni problem lastnih vrednosti evklidsko razdaljnih matrik DIPLOMSKO DELO UNIVERZITETNI
Διαβάστε περισσότεραTema 1 Osnove navadnih diferencialnih enačb (NDE)
Matematične metode v fiziki II 2013/14 Tema 1 Osnove navadnih diferencialnih enačb (NDE Diferencialne enačbe v fiziki Večina osnovnih enačb v fiziki je zapisana v obliki diferencialne enačbe. Za primer
Διαβάστε περισσότεραFunkcije več spremenljivk
DODATEK C Funkcije več spremenljivk C.1. Osnovni pojmi Funkcija n spremenljivk je predpis: f : D f R, (x 1, x 2,..., x n ) u = f (x 1, x 2,..., x n ) kjer D f R n imenujemo definicijsko območje funkcije
Διαβάστε περισσότερα(Ne)rešljiva Rubikova kocka in grupe
(Ne)rešljiva Rubikova kocka in grupe Maša Lah, Sabina Boršić, Klara Drofenik Mentor: Rok Gregorič Matematično raziskovalno srečanje 24. avgust 2016 Povzetek Cilj našega projekta je bil ugotoviti kriterij
Διαβάστε περισσότεραAlgoritmi in podatkovne strukture 2. Številska drevesa
Algoritmi in podatkovne strukture 2 Številska drevesa osnove, PATRICIA, LC Trie Andrej Brodnik: Algoritmi in podatkovne strukture 2 / Številska drevesa osnove, PATRICIA, LC Trie (03) 1 Osnove rekurzivna
Διαβάστε περισσότεραOdvode odvisnih spremenljivk po neodvisni spremenljivki bomo označevali s piko: Sistem navadnih diferencialnih enačb prvega reda ima obliko:
4 Sisemi diferencialnih enačb V prakičnih primerih večkra naleimo na več diferencialnih enačb, ki opisujejo določen pojav in so medsebojno povezane edaj govorimo o sisemih diferencialnih enačb V eh enačbah
Διαβάστε περισσότεραKvadratne forme. Poglavje XI. 1 Definicija in osnovne lastnosti
Poglavje XI Kvadratne forme V zadnjem poglavju si bomo ogledali še eno vrsto preslikav, ki jih tudi lahko podamo z matrikami. To so tako imenovane kvadratne forme, ki niso več linearne preslikave. Kvadratne
Διαβάστε περισσότεραDomača naloga 6: dušeno nihanje
Domača naloga 6: dušeno nihanje Vaje iz predmeta Numerične metode v fiziki Igor Grešovnik Kazalo: 1 Naloga 6a Nihanje... 1.1 Enačbe nihanja... 1. Numerično reševanje problema... 3 1..1 Reševanje sistema
Διαβάστε περισσότεραSEMINARSKA NALOGA Funkciji sin(x) in cos(x)
FAKULTETA ZA MATEMATIKO IN FIZIKO Praktična Matematika-VSŠ(BO) Komuniciranje v matematiki SEMINARSKA NALOGA Funkciji sin(x) in cos(x) Avtorica: Špela Marinčič Ljubljana, maj 2011 KAZALO: 1.Uvod...1 2.
Διαβάστε περισσότεραPostavitev hipotez NUJNO! Milena Kova. 10. januar 2013
Postavitev hipotez NUJNO! Milena Kova 10. januar 2013 Osnove biometrije 2012/13 1 Postavitev in preizku²anje hipotez Hipoteze zastavimo najprej ob na rtovanju preizkusa Ob obdelavi jih morda malo popravimo
Διαβάστε περισσότεραVaje: Električni tokovi
Barbara Rovšek, Bojan Golli, Ana Gostinčar Blagotinšek Vaje: Električni tokovi 1 Merjenje toka in napetosti Naloga: Izmerite tok, ki teče skozi žarnico, ter napetost na žarnici Za izvedbo vaje potrebujete
Διαβάστε περισσότεραMetoda voditeljev. Poglavje 2
Poglavje 2 Metoda voditeljev Velika prednost metode hierarhičnega gručenja, ki smo jo spoznali v prejšnjem poglavju, je odkrivanje strukture skupin v podatkih, ki jih lahko enostavno ponazorimo v vizualizaciji
Διαβάστε περισσότεραdiferencialne enačbe - nadaljevanje
12. vaja iz Matematike 2 (VSŠ) avtorica: Melita Hajdinjak datum: Ljubljana, 2009 diferencialne enačbe - nadaljevanje Ortogonalne trajektorije Dana je 1-parametrična družina krivulj F(x, y, C) = 0. Ortogonalne
Διαβάστε περισσότερα1. VAJA IZ TRDNOSTI. (linearna algebra - ponovitev, Kroneckerjev δ i j, permutacijski simbol e i jk )
VAJA IZ TRDNOSTI (lnearna algebra - ponovtev, Kroneckerev δ, permutacsk smbol e k ) NALOGA : Zapš vektor a = [, 2,5,] kot lnearno kombnaco vektorev e = [,,,], e 2 = [,2,3,], e 3 = [2,,, ] n e 4 = [,,,]
Διαβάστε περισσότεραIskanje najkrajs e poti
Iskanje najkrajs e poti na Vojnovic, I. gimnazija v Celju nja Petkovic, Gimnazija Bez igrad, Ljubljana Matej Ros karic, SERS, Maribor Mentor: Uros Kuzman UL FMF 1 Uvod V vsakdanjem z ivljenju se velikokrat
Διαβάστε περισσότεραFAKULTETA ZA STROJNIŠTVO Matematika 4 Pisni izpit 22. junij Navodila
FAKULTETA ZA STROJNIŠTVO Matematika 4 Pisni izpit 22 junij 212 Ime in priimek: Vpisna št: Navodila Pazljivo preberite besedilo naloge, preden se lotite reševanja Veljale bodo samo rešitve na papirju, kjer
Διαβάστε περισσότεραPrepoznavanje krožnic na digitalnih slikah
Univerza v Ljubljani Fakulteta za računalništvo in informatiko Domen Kren Prepoznavanje krožnic na digitalnih slikah DIPLOMSKO DELO UNIVERZITETNI INTERDISCIPLINARNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO
Διαβάστε περισσότερα