160 likes | 380 Views
Merge – Sort - Join. Algoritmid ja andmestruktuurid Loeng 5. Merge – kahe listi ühendamine. List1 List2 List3 X = List1.Esimene Y = List2.Esimene While X or Y Case X = Y Insert List3(X) X.Next Y.Next Case X < Y or Y=Null Insert List3(X) X.Next Case X > Y or X = Null Insert List3(Y)
E N D
Merge – Sort - Join Algoritmid ja andmestruktuurid Loeng 5
Merge – kahe listi ühendamine • List1 List2 List3 • X = List1.Esimene • Y = List2.Esimene • While X or Y • Case X = Y • Insert List3(X) • X.Next • Y.Next • Case X < Y or Y=Null • Insert List3(X) • X.Next • Case X > Y or X = Null • Insert List3(Y) • Y.Next • Loop
Merge keerukus ja eeldus • Mõlemad listid peavad olema sorteeritud • Keerukus lineaarne • O = O(N1) + O(N2)
Sorteerimine • List või massiiv sorteerida • Põhilised operatsioonid • Elementide vahetus • Massiivi (listi) tükeldus
Kõige lihtsam sorteerimine • Otsi kõige väiksem element (N) • Tõsta see sorteeritud massiivi • Korda N korda (N*N) või (N*N/2) • Ruutkeerukusega algoritm
Pendelsort • X = List.Esimene • While X ei ole viimane • If X > X.Next • Swap (X ja X.Next) • IF X on esimene • X = X.Next • Else • X = X.Prior • Else • X = X.Next • Loop • ISESEISEV ÜLESANNE – Leia keerukus
Merge sort • Lõikame sorteeritava kaheks • Sorteerime pooled eraldi • Ühendame (merge) • Keerukus • Sort(N) = 2 * Sort(N/2) + 2N • Sort(2) = 1 Iseseisev ülesanne – leia keerukus (N log N) http://www2.ics.hawaii.edu/~qizhang/ics665/mergesort.html
Kiirsort – Quick Sort • Võtame suvalise elemendi (telje) • Jaotame • kõik teljest suuremad paremale • Kõik teljest väiksemad vasakule • Sorteerime mõlemad pooled • Ühendame Iseseisev ülesanne – leia keerukus (N log N) http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/qsort.html
Sorteerimisalgoritmide võrdlusi http://www.cs.rit.edu/~atk/Java/Sorting/sorting.html http://www.cs.ubc.ca/spider/harrison/Java/ • Jaotage ära – homme iga üks teeb ettekande ühest sorteerimisalgoritmist (toob välja pointi)
Ühendamine – join • On kaks (või enam) listi, massiivi, puud, andmebaasitabelit • Tuleb leida kokkulangevate võtmetega paarid
Variant 1 – Inner Loop • Esimese massiivi igale elemendile • Leiame paarilise(d) teisest • Keerukus • Mõlemad sorteerimata O(N1 * N2) • Teine sorteeritud O(N1*N2 / 2) • Ruutkeerukusega ülesanne
Variant 2 – Merge • Mõlemat hulka töödeldakse paralleelselt • Keerukus lineaarne • Eeldus sorteerimine • N * Log N + M * Log M + (N+M)
Variant 3 – Hash • Üks hulk häshitakse • Teisele leitakse paarilised häshist • Keerukus lineaarne • Eeldus küllaldane mälu
Homme – harjutus • Ei tee harjutust ise • Uurime valmis sorteerimisalgoritme • Homme ootan erinevate sorteerimisalgoritmide analüüse (too välja idee) • Korralik ettekanne läheb kirja kodutööna