Upload
ivan-ivanic
View
221
Download
2
Embed Size (px)
DESCRIPTION
Strukture podataka i algoritmi
Citation preview
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi 2011/2012
STRUKTURE PODATAKA I ALGORITMI
sor)ranje
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Sor)ranje je postupak ponovnog rasporeivanja stvari prema nekoj njihovoj odrednici, na nain da te stvari budu rasporeene uzlazno ili silazno.
Neke od najvanijih primjena sor)ranja
- rjeenje problema zajednitva kod kojeg su svi elemen) s is)m opisom doneseni odjednom
ako je dano 10 5sua elemenata u proizvoljnom poretku, pri emu mnogi od njih imaju istu vrijednost, a potrebno je presloi5 te elemente tako da svi elemen5 s jednakim vrijednos5ma budu jedan pored drugoga
- usporeivanje elemenata u jednoj ili vie datoteka
ako je nekoliko datoteka sor5rano na is5 nain (npr. uzlazno) mogue je pronai sve podatke koji se poklapaju u samo jednom sekvencijalnom prolazu kroz njih, bez kretanja u suprotnom smjeru
- potraga za informacijom prema vrijednos: kljua
telefonski imenik
2
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Jedna od prvih primjena sor)ranja u velikim informacijskim sustavima je bila 1960. u tvrtci Computer Sciences Corpora)on
U tom desetljeu proizvoai raunala su tvrdili kako vie od 25% vremena u kojem njihova raunala rade, otpada na sor)ranje, a u nekim tvrtkama taj postotak je rastao i do 50%.
Odavde su se kristalizirala 3 zakljuka
- sor)ranje ima mnogo vanih primjena
- ljudi sor)raju kada i ne bi trebali
- u upotrebi su neuinkovi) algoritmi sor)ranja
Na prvi i drugi zakljuak raunarstvo nije moglo utjeca), ali na trei itekako je, razvojem novih i uinkovi)jih algoritama sor)ranja
3
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Za bolje shvaanje sor)ranja potrebno je poblie denira) problem kojeg ono ima rijei)
Dano je n elemenata koje treba sor)ra), pri emu se elemen) esto zovu zapisi (eng. record)
Svakom od zapisa pripada odgovarajui klju koji usmjerava proces sor)ranja.
- Kljuevi predstavljaju neku odrednicu zapisa po kojoj se sor)ra. Ako zapis predstavlja studenta s imenom, prezimenom, godinom roenja i sl. onda jedan od kljueva moe bi) dob ili prezime
4
R1,R2 ,,Rn
Rj K j
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Zapise sor)ranjem valja poreda) na specian nain, a ta relacija poretka (ureaja) koja se denira nad kljuevima mora zadovoljava) sljedee uvjete za bilo koja tri kljua
- naelo trihotomije - uvijek vrijedi tono jedan od izraza
- tranzi:vnost - iz odnosa i lslijedi odnos
Cilj sor)ranja je pronai permutaciju nad indeksima koja e postavi) kljueve u nepadajui poredak
Sor)ranje se dodatno naziva stabilnim ako zapisi sa is)m kljuevima nakon sor)ranja zadre svoj is) rela)vni poredak u odnosu na poetno stanje
5
a,b,ca < b,a = b,a > b
a < b b < c a < c
p 1( ) p 2( )p n( ) 1,2,,n{ }
Kp 1( ) Kp 2( ) Kp n( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Neka je dano pet uzastopnih memorijskih lokacija M1, M2, M3, M4, M5 a na svakoj od njih po jedan cijeli broj. Napii program koji e izmijeniC poredak brojeva na lokacijama, ako je to potrebno, tako da budu poredani uzlazno.
Za vjebu, pokuajte ovo rijei: na neki va nain! Moe i na papiru.
6
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE
Neka je dano pet uzastopnih memorijskih lokacija M1, M2, M3, M4, M5 a na svakoj od njih po jedan cijeli broj. Napii program koji e izmijeniC poredak brojeva na lokacijama, ako je to potrebno, tako da budu poredani uzlazno.
Ako ste napravili takav algoritam on gotovo sigurno spada u jedan od sljedeih )pova:
- sor)ranje umetanjem
brojevi se razmatraju jedan po jedan i svaki novorazmatrani broj se umee na odgovarajuu poziciju ovisno o prethodno sor5ranim elemen5ma
- sor)ranje izmjenom
ako se za dva susjedna broja utvrdi da nisu u povoljnom meusobnom odnosu tada oni mijenjaju mjesta, a ovaj postupak se ponavlja sve dok zamjene vie nisu potrebne
- sor)ranje izborom
prvo se pronae najmanji (najvei) element i na neki nain izdvoji od ostatka, a potom se proces ponavlja za preostale elemente
- sor)ranje spajanjem
- neto totalno drugaije
7
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM
Algoritmi iz ove skupine podsjeaju na algoritme koritene pri slaganju karata u kartakim igrama treeC ili remiju.
Prije razmatranja zapisa
- pretpostavljamo da su prethodni zapisi sor)rani
- potom ga umeemo na odgovarajue mjesto meu prethodno sor)rane zapise
Postoje zanimljive varijacije na ovu temu
- inser)on sort
- shell sort
8
Rj
R1,R2 ,,Rj1
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - INSERTION SORT
Algoritam
I1 [Vr: se u petlji po j] Obavljaj korake I2 do I5 za a potom zavri algoritam
I2 [Postavi i, K, R] Postavi
I3 [Usporedi K sa Ki] Ako je idi na I5
I4 [Pomakni Ri, smanji i] Postavi a ako je idi na I3
I5 [Smjes: R] Postavi
9
j = 2,3,,ni = j 1,K = K j ,R = Rj
u sljedeim koracima pokuat emo smjes55 R na pravo mjesto, usporeujui K s Ki za sve padajue
vrijednos5 od iK Ki
Pronaeno mjesto za RRi+1 = Ri ,i = i 1
i > 0
Ako je i = 0, tada je K najmanji do sada pronaeni klju, tako da zapis R pripada na mjestu 1
Ri+1 = R
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - INSERTION SORT
10
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - INSERTION SORT
11
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - INSERTION SORT
Ovaj program se izvrava 9B + 10N -3A -9 vremenskih jedinica pri emu je
- N = broj zapisa koje treba sor)ra)
- A = koliko puta se i smanjuje do 0 u koraku S4
- B = broj micanja elemenata
Vremenska sloenost ovog algoritma je za najgori sluaj
12
O n2( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - INSERTION SORT
13
static void Insertion(int[] niz) { int i;
for (i = 0; i < niz.Count(); i++) { /* Umetnimo niz[i] u sortirani podniz */ int j, v = niz[i];
for (j = i - 1; j >= 0; j--) { if (niz[j]
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
Ako je dan algoritam sor)ranja koji pomie elemente samo jednu po jednu poziciju tada e njegov prosjeno vrijeme izvoenja u najbolju ruku bi)
Za unaprijeenje su potrebni odreeni mehanizmi koji pomiu elemente koji su meusobno udaljeni za puno vie od jedne pozicije.
U srpnju 1959. Donald L. Shell je objavio rad u kojem je izloio jedan takav mehanizam, a taj algoritam njemu u ast nosi algoritam Shellov sort.
Ideja algoritma je jednostavna:
- promatra) svako k-) element u nizu
- tako nastale k podnizove sor)ra) inser)on sort algoritmom
- smanji) k i ponovi) postupak
- kada je k = 1, cijeli niz sor)ra) inser)on sort algoritmom
14
O n2( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
Algoritam
S1 [Vr: se u petlji po s] Obavi korak S2 za a onda zavri algoritam
S2 [Vr: se u petlji po j] Postavi i obavljaj korake S3 do S6 za
S3 [Postavi i, K, R] Postavi
S4 [Usporedi K sa Ki] Ako je idi na S6
S5 [Pomakni Ri, smanji i] Postavi a ako je idi natrag na S4.
S6 [Smjes: R] Postavi
15
s = t 1,t 2,,0h=hs
Ri+h = Ri ,i = i h i > 0
t je korak
Ri+h = R
h < j < n
i = j h,K = K j ,R = RjK Ki
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
16
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
Oito je da e za izvrenje algoritma treba) manje ili vie vremena ovisno o odabiru koraka k kojima se stvaraju podnizovi.
Najgori sluaj se ne moe spus)) ispod
Iscrpna istraivanja ovog problema su pokazala da je trenutno najbolji niz koraka onaj kojeg denira poljski matema)ar Marcin Ciura
Ukoliko je potrebno povea) korak, svaki sljedei je za otprilike 2.3 puta vei od prethodnog.
17
1,4,10,23,57,132,301,701,...{ }
O n32( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
18
static void ShellSortPomocna(int[] niz, int duljina, int korak) {! int i;!! for (i=0; i < duljina; i++) ! {! ! /* Umetnimo niz[i] u sortirani podniz */! ! int j, v = niz[i];! !! ! for (j = i - korak; j >= 0; j -= korak) ! ! {! ! ! if (niz[j]
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - SHELLOV SORT
19
static void ShellSort(int[] niz, int duljina) {! int[] CiurinNiz = new int[8] {701, 301, 132, 57, 23, 10, 4, 1};! double prosirenje = 2.3;!! int korak_idx = 0;! int korak = CiurinNiz[0];! if (duljina > korak) ! {! ! while(duljina > korak) ! ! {! ! ! korak_idx--;! ! ! korak = (int)(korak*prosirenje);! ! }! } ! else ! {! ! while(duljina < korak) ! ! {! ! ! korak_idx++;! ! ! korak = CiurinNiz[korak_idx];! ! }! }!! while (korak > 1) ! {! ! korak_idx++;! ! if (korak_idx >= 0) ! ! ! korak = CiurinNiz[korak_idx];! ! else ! ! ! korak = (int)(korak/prosirenje);! !! ! ShellSortPomocna(niz, duljina, korak);! } }
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM
Druga familija algoritama za sor)ranje koris) zamjenu ili transpoziciju kao metodu sor)ranja, pri emu sistema)no zamjenjuje svaka dva elementa koja nisu u eljenom odnosu, sve dok takvih parova vie nema.
Budui da se u svakom algoritmu sor)ranja odvija barem neka zamjena, nezahvalno je jedan algoritam strpa) u jednu familiju a drugi u drugu, ali razlike ipak postoje.
Varijacije na temu su
- bubble sort
- quicksort
20
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM - BUBBLE SORT
Vjerojatno najoi)ji nain sor)ranja izmjenom je usporeiva) kljueve K1 i K2 te onda zamijeni) zapise R1 i R2 ako nisu u dobrom odnosu, a postupak nastavi) s parovima R2 i R3, R3 i R4 itd
Metoda se zove bubble sort budui da najvei elemen) (ako sor)ramo uzlazno) odmah isplivaju na povrinu poput mjehuria zraka u vodi.
U najboljem sluaju e se bubble sort izvri) samo jedan prolaz kroz sve elemente, dok je naelno potrebno vie prolaza.
Vremenska sloenost u najgorem sluaju je
21
O n2( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM - BUBBLE SORT
22
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - BUBBLE SORT
Algoritam
B1 [Postavi GRANICU] GRANICA = n
B2 [Vr: se u petlji po j] Postavi . Obavi korak B3 za i za)m idi na korak B4
B3 [Usporedi/Zamijeni Rj i Rj+1] Ako je zamijeni te postavi
B4 [Je li bilo zamjena?] Ako je zavri algoritam. U pro)vnom GRANICA = t i vra) se na B2
23
Rj Rj+1
t= 0
GRANICA je najvii indeks za koji se ne zna je li zapis na svom konanom mjestu. prak5ki naznaavamo
kako u ovom trenutku nita ne znamo.
K j K j+1 t= j
j = 1,2,,GRANICA 1
t=0
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - UMETANJEM - BUBBLE SORT
24
static void Bubble(int[] niz) { int i, j, t = 0;
for (i = 0; i < niz.Count() - 1; i++) { for (j = i + 1; j < niz.Count(); j++) ! ! ! ! if (niz[i] < niz[j]) ! ! ! ! { ! ! ! ! ! Zamjena(ref niz[i], ref niz[j]);! ! ! ! ! ! t++;! ! ! ! }! ! ! if (t == 0) break; } }
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM - QUICK SORT
Unaprijeenje bubble sorta je algoritam Quicksort kojeg je izumio C.A.R. Hoare 1962.
Algoritam se temelji na proceduri sor)ranja koja bi se mogla nazva) par:cijska zamjena budui da koristei rekurziju par)cionira niz na dva podniza prethodno napravivi odgovarajue zamjene.
Odabere se neki element koji se proglasi pivotom.
- prvi, zadnji, srednji...
Potom se provjeravaju svi preostali elemen) tog niza i ako su manji od njega a desno ili vei od njega a lijevo, mijenjaju mjesta s pivotom.
Algoritam je izrazito brz, ali i sloen za analizu.
Vremenska sloenost quicksort algoritma u najgorem sluaju je ali brzina algoritma se strahovito ubrzava u preostalim sluajevima gdje mu je sloenost reda
25
O n2( )O n lnn( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM - QUICK SORT
26
static void QuickSort ( int[] niz, int n ) { QuickPomocna ( niz, 0, n - 1 ); }
static void QuickPomocna ( int[] niz, int prvi, int zadnji ) { if ( prvi < zadnji ) { int pivot = Particija ( niz, prvi, zadnji ); QuickPomocna ( niz, prvi, pivot - 1 ); QuickPomocna ( niz, pivot + 1, zadnji ); } }
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZMJENOM - QUICK SORT
27
static int Particija ( int[] niz, int prvi, int zadnji ) { int pivot = prvi;
while ( prvi < zadnji ) { if ( niz[prvi]
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZBOROM - SELECTION SORT
Trea familija algoritama sor)ranja bazirana je na ideji opetovanog izbora
Klasini predstavnik ove familije je Selec)on sort iji algoritam izgleda ovako
- pronai najmanji (najvei) klju
prenesi zapis s 5m kljuem na privremenu lokaciju zamijeni taj klju vrijednou veom (manjom) od maks broja elemenata (0)
- ponovi prethodni korak
poto je prethodni najmanji (najvei) klju sada postao vei (manji) od najveeg (najmanjeg) vie nije u igri
- nastavi ponavlja) korak 1 dok svih n zapisa nije odabrano
28
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZBOROM - SELECTION SORT
29
Vremenska sloenost za selec)on sort u najgorem sluaju je
Boldane vrijednos) su kandida) za maksimum, ali ipak je samo jedan
O n2( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - IZBOROM - SELECTION SORT
30
static void Selection(int[] niz) { int i, j, mmax;
for (i = 0; i < niz.Count(); i++) { mmax = i; for (j = i; j < niz.Count(); j++) if (niz[mmax] > niz[j]) mmax = j;
Zamjena(ref niz[i], ref niz[mmax]); } }
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - SPAJANJEM - MERGE SORT
Spajanje podrazumijeva kombiniranje 2 ili vie nizova u jedan ureeni niz.
Primjerice spajanje nizova 503 703 765 i 087 512 677 u ureeni niz 087 503 512 677 703 765
Najjednostavniji nain za ovo je usporeiva) dva najmanja elementa iz )h nizova te kao rezultat izbaci) manji od njih dva
31
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - SPAJANJEM - MERGE SORT
Merge sort koris) ovaj princip, no takoer koris) i princip podijeli pa vladaj.
Polazni niz se rekurzivno komada na dva niza po pola, sve dok duljina nastalog niza nije 1.
Nakon toga, spajanjem se formiraju novi podnizovi ali sada sor)rani.
Vremenska sloenost u najgorem sluaju za merge sort je
Merge sort je prilino brz algoritam, ali mu je najvei nedostatak to to stalno stvara nove podnizove i na taj nain zauzima puno memorije.
32
O n lnn( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - SPAJANJEM - MERGE SORT
33
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - SPAJANJEM - MERGE SORT
34
static void merge ( int[] niz, int first, int mid, int last ) {! int i = first, j = mid, k = 0;! int[] save = new int[last-first];
while ( i < mid && j < last ) {! ! if ( niz[i]
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - SPAJANJEM - MERGE SORT
35
static void merge_sort ( int[] niz, int first, int last ) { if ( first < last - 1 ) {! ! int mid = ( first + last ) / 2;! ! merge_sort ( niz, first, mid );! ! merge_sort ( niz, mid, last );! ! merge ( niz, first, mid, last ); } }
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - TOTALNO DRUGAIJE - RADIX SORT
Ovaj algoritam je drugaiji od drugih zato to ne usporeuje elemente ve njihove znamenke
Poinje s usporedbom jedinica, pa dese)ca, pa )suica, ...
Kako je potrebno obavi) sve prolaze (ovisno o broju znamenaka najveeg broja) to se u meustanjima pojavljuju nelogini poreci koji se na kraju ipak srede
Vremenska sloenost u najgorem sluaju za radix sort je gdje je k broj znamenaka najveeg broja
36
O kn( )
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - TOTALNO DRUGAIJE - RADIX SORT
37
radixodredi koliko znamenaka ima max broj = kpetlja po i od 1 do k
formiraj niz znamenaka poevi s jedinicama (1) pa s deseticama (2) do ksortiraj taj niz znamenakapetlja po j od 0 do n-1 po nizu brojeva
etaj paralelno po nizu znamenaka i nizu brojevatrai broj sa odgovarajuom znamenkom i zamijeni ga s trenutnom (1, 2, 3...)
Ivan Bilobrk - Odjel za Informa5ku - PMFSTStrukture podataka i algoritmi / 38
SORTIRANJE - RADIX SORT
38
Poetak 1. prolaz 2. prolaz 3. prolaz Kraj
503 170 503 061 061087 061 908 087 087512 512 509 154 154061 612 703 170 170908 503 512 275 275170 653 612 426 426897 703 426 503 503275 154 653 509 509653 275 154 512 512426 765 061 612 612154 426 765 653 653509 087 170 677 677612 897 275 703 703677 677 677 765 765765 908 087 897 897703 509 897 908 908