nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/predavanje6-spa.pdfnajpre biramo element c i...

19

Upload: others

Post on 24-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred
Install
Rectangle
Page 2: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred
Page 3: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred
Page 4: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred
Page 5: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Bubble sort

Razmotrimo još jedan vrlo popularan algoritam sortiranjapodataka, vrlo slican prethodnom algoritmu.Algoritam je poznat pod nazivom Bubble sort algoritam(algoritam mehurastog sortiranja), jer u njemu mali brojevi kaoda isplivavaju na vrh, a vrh je pocetak liste.Polazimo sa desne strane, uporedjujemo poslednja dva clana imanji pomeramo u levo. Zatim, taj manji element uporedjujemosa elementom sa njegove leve strane i, opet, manji pomeramou levo. Postupak nastavljamo dok ne stignemo do prvogelementa. Postupak ponavljamo, polazeci sa desne strane, svedok ne dodjemo do drugog clana liste, cime drugi po velicinielement izbija na drugu poziciju. Proces ponavljamo sve dokne sortiramo celu listu.

Page 6: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Bubble sort(cont.)

Problem implementacije je u tome što se kroz listu prolazi uobratnom smeru. Zato uvodimo oblik iskaza sa negativnimkorakom "step -1".

Procedure BubbleSort

for i := 2 to n do

for j := n to i step − 1

IF aj < aj−1 THEN ′′zameniti mesta za aj i a′′j−1

END;

Napomena

Kompleksnost ovog algoritma ista je kao kod sortiranjaselekcijom, tj. O(n2).

Page 7: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Quick sort

Naredni algoritam je Quick sort algoritam (algoritam brzogsortiranja). Ovaj algoritam cemo definisati rekurzivno.Postupak se zasniva na uzimanju poslednjeg elementa liste al,a zatim sve elemente manje ili jednake al pomeramo levo odnjega. Novodobijenu listu oznacimo sa S1. Svaki element veciod al pomeramo desno od njega i dobijenu listu oznacimo saS2. Primenjujuci postupak brzog sortiranja na S1 dobijamo jošdve liste S11 i S12. Ponavljamo proceduru na listu S11 i takodalje, sve dok ne dobijemo listu Sx, koja kada se podeli dajeliste Sx1 i Sx2 , pri cemu je Sx1 ili sortirana ili prazna. Zatim,postupak primenjujemo na Sx2 deleci je na levu i desnu stranu iprelazimo na levu stranu.

Page 8: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Quick sort(cont.)

Postupak opet nastavljamo dok se segment liste, recimo, Sy nepodeli na levu i desnu listu Sy1 i Sy2 , pri cemu je Sy1 ili sortiranaili prazna. Potom se algoritam brzog sortiranja primenjuje naSy2 itd. Kada se i leva i desna strana neke podliste sortiraju,vracamo se na listu u kojoj ona predstavlja levu ili desnu stranui primenjujemo istu proceduru.

QuickSort(S, levi, desni)

Gotovo = false

IF (levi > desni) THEN error ′′pogrešni podaci′′

v = S[desni]

i = levi + 1

j = desni

Page 9: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Quick sort(cont.)

REPEAT

REPEAT i = i + 1

UNTIL (S[i] > v)

REPEAT j = j− 1

UNTIL (j 6 levi) or (S[j] 6 v)

IF (i > j) THEN Gotovo = true

ELSE ′′razmeniti S[i] i S[j]′′

UNTIL Gotovo′′razmeniti S[i] i S[desni]′′

QuickSort(S, levi, i− 1)

QuickSort(S, i− 1, desni)

Page 10: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort

Merge sort (Sortiranje ucešljavanjem je algoritam sortiranjaslican prethodnom, ali nešto jednostavniji.Procedura se sastoji iz deljenja liste elemenata koje sortiramona polovine ili što je moguce bliže polovinama. Zatim svaku odovih polovina delimo još na pola i postupak nastavljamo svedok se svaki skup ne svede na jednoelementni. Sada seproces obrce i liste se spajaju na isti nacin na koji su podeljene,ali se usput ucešljavaju.Promenljive l, m, r oznacavace levi, desni i srednji elementtekuce liste, redom, a procedura sortiranja koristi rekurziju.U toku rada ove procedure, koristcemo još jednu proceduruMerge.

Page 11: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

Procedura Merge jednostavno uporedjuje prve elemente dveliste koje su vec sortirane i manji od njih uklanja iz te liste ipostavlja na mesto prvog elementa nove liste u kojoj ce svirazmatrani elementi biti sortirani.Postupak se, zatim ponavlja, pri cemu se svaki uklonjenielement dodaje na kraj nove sortirane liste, sve dok se jedna odlisti ne isprazni. Tada se ostatak druge liste dodaje novoj,sortiranoj listi.

Page 12: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

PROCEDURE Merge(l, m, r)

Neka je A = {al, al+1, . . . am} i B = {am+1, am+2, . . . ar}

i neka je C nova učešljana lista.

IF obe liste A i B sadrže elemente THEN uporedititi prve

i ukloniti manji od njih

Dodati uklonjeni element na kraj liste C.

IF jedna od A i B je prazna THEN

ostatak neprazne liste dodati listi C.

Promeniti imena elemenata liste C = {al, al+1, . . . ar}

Page 13: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

PROCEDURE MergeSort(l, r)

IF l < r THEN m =[ l + r

2

]

Call MergeSort(l, m)

Call MergeSort(m + 1, r)

Call Merge(l, m, r)

Primer:Neka je c, b, a, v, h, d, x, e lista koju sortiramo. Delimo je napola: c, b, a, v|h, d, x, e. Pozivamo proceduru MergeSort zasortiranje leve strane i dobijamo c, b|a, v|h, d, x, e, a njenimponovnim pozivanjem je c|b|a, v|h, d, x, e.

Page 14: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

Primer:Sada više ne možemo da delimo ni levu ni desnu stranu, teprocedurom Merge spajamo c i b i dobijamo b, c|a, v|h, d, x, elista koju sortiramo. Vracamo se na MergeSort koja je podelilalevi deo na b, c i kako je završena MergeSort(l,m), pozivamoMergeSort(m+1,r)kojom se a, v deli na a|v, a zatim ih spajamo itime smo završili poziv za c, b|a, v,a zatim spajamo i ove listea, b, c, v|h, d, x, e.Isti postupak ponavljamo za desni deo i dobijamo h, d, e, x, aponovnim spajanjem listi dobijamo a, b, c, d, e, h, v, x.

Page 15: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

Sortiranje ucešljavanjem predstavlja najefikasniji algoritamsortiranja (kao i qick sort) po pitanju broja izvršenih poredjenja.Da bismo to pokazali, bez umanjenja opštosti, pokazacemo daje n = 2m, za neku vrednost m, jer je ovakav broj elemenatanajlakše podeliti. Odavde dobijamo da je m = log2 n. Akoposmatramo ucešljavanje izvršeno u okviru inicijalnog pozivaprocedure sortiranja, ona ucešljava dve liste od kojih svakasadrži 2m−1 elemenata. Ako ovo smatramo prvim nivoom, uk-tom nivou imamo 2k listi od kojih svaka sadrži 2m−k

elemenata. Svako poredjenje parova listi od kojih svaka sadrži2m−k elemenata, zahteva najviše 2m−k+1 − 1 poredjenja, poštoposlednji element ne poredimo ni sa cim. Na k-tom nivou, tadamoramo da izvršimo 2k−1 poredjenja, tj. vrši se najviše

2k−1(2m−k+1 − 1) = 2k−1(2m−(k−1) − 1).

Page 16: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Merge sort(cont.)

Prema tome, najveci broj poredjenja nece biti veci od

m∑

k=1

2k−1(2m−(k−1) − 1) =m−1∑

i=0

2i(2m−i − 1) =m−1∑

i=0

2m − 2i

= m2m − (2m − 1) = n log2 n− (n− 1) = n log2 n− n + 1,

tako da u narednom slucaju imamo O(n log2 n) uporedjivanja.

Page 17: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Insert sort

Poslednji algoritam sortiranja koji cemo posmatrati je insert sort(sortiranje umetanjem). Ovaj postupak je vrlo jednostavan i uovom sortiranju elementi podataka se uzimaju jedan po jedan istavljaju na odgovarajuce mesto, u vec formiranu listu. Dakle,za svaki element se pronalazi mesto, tako da su svi elementimanji od umetnutog elementa levo od njega, dok su svi vecidesno od njega.Posmatrajmo opet niz elemenata iz prethodnog primerac, b, a, v, h, d, x, e.Najpre biramo element c i stavljamo ga u novu listu, a potompošto je b manji od c, stavljamo ga ispred c u novoj listi idobijamo b, c. Zatim a ide ispred b itd. U najgorem slucaju, brojporedjenja na svakom nivou je kao u Bubble sort algoritmu, tj.O(n2).

Page 18: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Zavadi pa vladaj

Kao što smo videli, vecina algoritama sortiranja ukljucujedeljenje skupova na manje skupove, njihovo sortiranje iponovno kombinovanje.

Zavadi pa vladaj

Tehnika razbijanja skupova u osnovne skupove, izvršavanjaoperacija nad njima i njihovog ponovnog sklapanja naziva seZavadi pa vladaj.

Procedure koje se zasnivaju na metodi zavadi pa vladaj, cestozadovoljavaju rekuretnu jednacinu oblika Qn = cQ n

2+ f(n),

gde Qn može da predstavlja broj operacija, broj poredjenja,vremenski period ili bilo koju drugu meru. Mi cemo Qn koristitiza oznaku broja operacija.

Page 19: nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/PREDAVANJE6-SPA.pdfNajpre biramo element c i stavljamo ga u novu listu, a potom pošto je b manji od c, stavljamo ga ispred

OvervievProblemi pretraživanja

Heš tabele

Mehurasto sortiranjeBrzo sortiranjeSortiranje u cešljavanjemSortiranje umetanjem

Zavadi pa vladaj(cont.)

Funkcija f(n) predstavlja broj operacija potrebnih za deljenjenekog skupa u dva dela, a zatim, za njihovo ponovno spajanje.

Oblikn

2pretpostavlja da skup na kome se izvršava operacija

delimo na dva jednaka dela.Ovaj je postupak uobicajen kod binarnih stabala, pri cemu suoperacije binarne, pa se pretpostavlja da je n stepen broja 2.Interesuju nas, pre svega, slucajevi u kojima je vrednost f(n)konstantna ili je f(n) = Dn, za neku konstantu D. Slucajf(n) = Dn znaci da je broj operacija potrebnih za deljenje listeod n objekata i njihovo ponovno spajanje direktno srazmeranbroju elemenata u listi.Tako rekurentna jednacina postaje Qn = cQ n

2+ Dn. (U Quick

sort algoritmu važi Qn = 2Q n2

+ n.)