nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/486/predavanje6-spa.pdfnajpre biramo element c i...
TRANSCRIPT
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.
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).
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.
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
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)
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.
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.
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}
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.
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.
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).
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.
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).
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.
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.)