vanjsko sortiranje

30
VANJSKO SORTIRANJE SEMINARSKI RAD IZ KOLEGIJA „STRUKTURE PODATAKA“

Upload: xperia

Post on 01-Apr-2015

154 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Vanjsko sortiranje

VANJSKO SORTIRANJE

SEMINARSKI RAD IZ KOLEGIJA „STRUKTURE PODATAKA“

Page 2: Vanjsko sortiranje

Sadržaj

1. UVOD...................................................................................................................................................................1

2. VANJSKO SORTIRANJE.................................................................................................................................2

2.1. OPĆENITO O VANJSKOM SORTIRANJU...............................................................................................2

2.2. VIŠESMJERNO SPAJANJE i ZAMJENA IZBORA...................................................................................5

2.3. VIŠEFAZNO SPAJANJE...........................................................................................................................11

2.4. KASKADNO SPAJANJE...........................................................................................................................13

2.5. ČITANJE VRPCE UNAZAD.....................................................................................................................14

2.6. OSCILIRAJUĆE SPAJANJE......................................................................................................................15

2.7. VANJSKO BAZNO SORTIRANJE...........................................................................................................16

2.8. DVO-VRPČANO SORTIRANJE...............................................................................................................17

3. ZAKLJUČAK....................................................................................................................................................20

LITERATURA......................................................................................................................................................21

Page 3: Vanjsko sortiranje

1. Uvod

Računala su postala dio svakodnevice na način da su ušla na velika vrata u sve sfere

ljudskoga života. Prema Mooreovom zakonu svake dvije godine broj operacija koje računalo

može izvršiti u sekundi se udvostruči. Tako da nas ne mora čuditi što svakim danom imamo

sve više podataka koje je potrebno digitalno pohraniti, a u međuvremenu i s njima se koristiti.

Također, ljudske potrebe idu do te mjere da želimo da naši podaci budu u što kraćem roku

pohranjeni i sortirani prema određenom principu.

Jednostavnim algoritmima sortiranja poput sortiranja izborom i mjehuričastim

sortiranjem potrebno nam je otprilike 4.5 sata za veliku količinu podataka, dok složenijim

algoritmima poput brzim sortiranjem i sortiranjem spajanjem nam je potrebno samo nekoliko

sekundi. Upravo o tome ću pisati u ovom seminaru, odnosno o tome kako izabrati

najefikasniji i najefektivniji način sortiranja podataka.

U bazama podataka vrlo je bitan izbor strukture podataka, ali mi ćemo govoriti o

tipovima vanjskog sortiranja i njegovim jednostavnijim alternativama za koje je potrebno

manje dizajniranja i manje su podložne pogreškama. Osnovna ideja vanjskog sortiranja za

razliku od unutarnjeg je u sortiranju većeg broja podataka, većeg od kapaciteta kojeg

podržava unutarnja memorija računala.

1

Page 4: Vanjsko sortiranje

2. Vanjsko sortiranje

2.1. Općenito o vanjskom sortiranju

Problem se pojavljuje kada je broj zapisa koji bi trebao biti spremljen veći od samog

kapaciteta unutarnje računalne memorije. Vanjsko sortiranje je poprilično drugačije od

unutarnjeg sortiranja, iako je sama jezgra problema u oba slučaja jednaka na način da se

dobiveni podaci sortiraju neopadajućim redoslijedom, ali pristup vanjskoj memoriji i

podacima je strogo ograničen. Struktura podataka mora biti uređena na način da i djelomično

sporiji periferni memorijski uređaji (vrpce, diskovi, bubnjevi itd.) mogu izaći na kraj sa

uvjetima algoritma za sortiranje. Prema tome većina metoda za unutarnje sortiranje

(Sortiranje umetanjem, zamjenom ili odabirom) su beskorisne prilikom vanjskog sortiranja.

Ako na primjer imamo 5000 zapisa R1,R2,…R5000 koje trebamo sortirati na način da

svaki zapis Ri zauzima 20 mjesta praznog prostora, a unutarnja memorija podržava samo 1000

spremljenih zapisa jedino rješenje je da sortiramo svaki podzapis zapisa pojedinačno R1,…

R1000, R1001,…R2000, R4001…R5000 i na kraju te rezultate spojimo. Proces spajanja koristi vrlo

jednostavne strukture podataka kao što su linearne liste čiji su elementi slijedno povezani kao

kod stogova i redova, te se taj proces vrlo jednostavno izvodi i na najjeftinijim vanjskim

memorijskim uređajima. Unutarnje sortiranje popraćeno vanjskim spajanjem se vrlo često

koristi i u praksi što možemo vidjeti iz ovog primjera.

Padajući slijed zapisa koji je nastao u fazi unutarnjeg sortiranja često nazivamo string

u literaturi koja govori o sortiranju i pod tim nazivom je široko rasprostranjen na tom

području računalne znanosti. Zbog konflikta naziva i namjene uveden je novi termin nizovi

(eng.runs) koji se odnosi na sortirane segmente datoteke. Sada ćemo na primjeru objasniti

vanjsko sortiranje na magnetskim vrpcama koje se koriste kao pomoćna memorija.

Najjednostavniji način njezinog korištenja je uravnoteženo dvostruko spajanje. Tijekom prve

faze padajući nizovi stvoreni unutarnjim sortiranjem su alternativno stavljeni na vrpcu 1 i 2.

Ova faza prestaje s nestankom elemenata na ulazu. Tada se vrpca 1 i 2 vraćaju na početak

stvarajući nove nizove koji su duplo duži od originalnih. Originalni nizovi se spajaju, a novi

nizovi se zapisuju na vrpce 3 i 4. Ako vrpca 1 sadrži niz duži od niza vrpce 2, tada se taj niz

duljine 0 nalazi i na vrpci 2. Sve vrpce se obnavljaju i sadržaj vrpce 3 i 4 se spajaju u nizove

četverostruke duljine koji se snimaju naizmjenično na vrpcu 1 i 2. Proces se nastavlja na način

2

Page 5: Vanjsko sortiranje

da se svaki put udvostruči duljina nizova sve dok ne preostane samo jedan niz, odnosno

sortirana datoteka. Tokom unutarnjeg sortiranja k=[log2S] gdje k zadovoljava uvjete da su se

S nizovi kreirali tokom unutarnjeg sortiranja i da 2k-1<S≤2k toliko puta prođe kroz sve podatke.

Unutarnji memorijski kapacitet je 1000, a mi imamo 5000 zapisa koji trebaju unutra biti

spremljeni i sortirani S=5.

(1)

Prvi prolaz spajanja povećava nizove na vrpcama 3 i 4 istovremeno kada ih čita s vrpce 1 i 2:

(2)

S početka vrpce 3 i kraja vrpce 4 dodani su nizovi u vrpcu 1, a s vrpce 3 su dodani u vrpcu 2:

(3)

Uravnoteženo spajanje ćemo općenito opisati slučajem T vrpci, za bilo koji T≥3. Izabrat ćemo

broj P sa 1≤P<T, i podijelit ćemo T vrpcu na dva dijela, sa P dijelom vrpce na lijevoj strani i

T-P na desnoj. Podijeli se svaki niz posebno na lijevoj strani vrpce P, a zatim treba napraviti

spajanje P-strane s lijeva nadesno, popraćeno (T-P) smjerom spajanja s desne na lijevo, sve

dok se ne završi sortiranje. Najbolji izbor podjele P je T/2. Inicijalna podjela:

(4)

Nakon prvog spajanja nastaje:

3

Page 6: Vanjsko sortiranje

(5)

Drugo spajanje i prolazak kroz nizove dovršava proces, smještajući R1…R5000 na vrpcu 1. U

ovom slučaju T=6 je prilično isto kao i T=5, s obzirom da se 6 vrpca koristi samo kada je

S≥7. Trostruko spajanje zahtijeva više računalnog vremena za odvijanje procesa nego li

dvostruko spajanje, ali je u općem smislu to beznačajno u usporedbi s vremenom potrebnim

za zapisivanje, čitanje i premotavanje vrpci. S obzirom na kapacitet vrpce možemo dobiti

zadovoljavajuću procjenu vremena izvršavanja procesa. Balansirano spajanje je vrlo

jednostavno, ali nije najbolji način za rješavanje zadanog slučaja. Umjesto da premotavamo

vrpce, trebali bi zaustaviti prvi prolazak spajanja nakon vrpci 3 i 4 koje sadrže R1…R2000 i

R2001…R4000, i vrpcu 1 ostaviti spremno da čita R4001…R5000. Tada vrpce 2, 3 i 4 mogu biti

premotane i možemo dovršiti spajanje koristeći trostruko spajanje na vrpci 2. Ukupan broj

čitanja zapisa s vrpce tokom ove procedure će biti 4000+5000=9000, u usporedbi s

5000+5000+5000=15000 u balansiranoj shemi. Suvremeno računalo će znati razliku.

Zatim se trostruko spaja na vrpcu 4, a istovremeno se trake 3 i 4 premotavaju zajedno s tim da

se na traci 3 odvija trostruko spajanje, te se tako završava sortiranje što znači

3000+5000=8000 zapisa je pročitano. Također, da smo imali 6 vrpci mogli smo inicijalni niz

postaviti na vrpcu 1 preko 5 vrpce i završiti sortiranje jednim prolaskom peterostrukim

spajanjem vrpce 6. Unutarnjim sortiranjem tvorimo inicijalne nizove, dok vanjskim

sortiranjem zapravo uvelike prekoračujemo kapacitet te unutarnje memorije.

4

Page 7: Vanjsko sortiranje

2.2. Višesmjerno spajanje i Zamjena izbora

U ovom slučaju imamo P padajući niz, slijed zapisa čiji su zapisi u neopadajućem

stanju. Način na koji ćemo ih spajati je taj da ćemo pogledati prvi zapis svakoga niza i

odabrati zapis čiji je znak najmanji. Taj zapis će biti smješten na izlaz, te se tada automatski

briše sa ulaza,a proces se ponavlja. Ako se dogodi da su oba dva znaka najmanja, odnosno

jednaka onda je izbor zapisa proizvoljan. U ovom zadatku imamo stablo odluke koje se sastoji

od dvije razine i na njemu će se primjenjivati četverostruko spajanje. Znak „∞“ koristimo

kako bi duljina niza koje spajamo bila definirana, a ne proizvoljna.

Slika 2.2.1. Primjer stabla odluke [Knuth, 1998., str. 251]

Svaki korak u stablu odluke sastoji se od zamjene najmanjeg elementa s njegovim

sljedbenikom u nizu i mijenjanjem putova izbora elementa. Proces zamjene jednog znaka s

drugim u stablu odluke se zove Zamjena izbora (eng. Replacement Selection).

Svaki čvor u stablu predstavlja slijed uključen u zajednički proces spajanja. Također,

ovo stablo se ponaša i funkcionira na način višeg reda „onaj koji je najmanji, ide prvi van“.

Mogli smo koristiti i hrpu umjesto stabla kako bi implementirali viši red, ali hrpa bi bila

5

Page 8: Vanjsko sortiranje

uređena tako da se najmanji element nalazi na vrhu. S obzirom da hrpa nema fiksnu veličinu

ne bi koristili ni „∞“ znak već bi spajanje odnosno sortiranje bilo gotovo kada bi hrpa bila

prazna. Vanjsko sortiranje se najčešće koristi prilikom sortiranja vrlo velikih zapisa i znakova,

stoga se hrpa sastoji od pokazivača na znakove, a ne samih znakova.

Slika 2.2.2. Binarno stablo – stablo „gubitnika“ [Knuth, 1998., str. 252]

Drvo „gubitnika“ prikazuje kompletno binarno stablo sa 12 vanjskih (četverokuta) čvorova i

11 unutarnjih (kružnih) čvorova. Vanjski čvorovi su popunjeni znakovima, a unutarnji

čvorovi su popunjeni „pobjednicima“ ako se stablo gleda kao borba za najmanji znak.

Najmanji brojevi iznad svakog čvora pokazuju tradicionalan način alociranja pozicija slijedne

memorije za čitavo stablo. Kada pogledamo broj 061 vidimo da su brojevi 512, 087 i 154

„gubitnici“ u borbi s tim brojem. Što znači da mi ustvari gledamo gubitnike svake borbe

umjesto pobjednike i time stvaramo stablo spremno za nadopunjavanje.

Slika 2.2.3. Binarno stablo – stablo „gubitnika“ [Knuth, 1998., str. 252]

6

Page 9: Vanjsko sortiranje

U ovom stablu vidimo da su gubitnici stavljeni ispred pobjednika. Na vrhu stabla

nadodan je čvor pod brojem 0 i on predstavlja pobjednika turnira. Svaki znak koji prihvati

izazov je gubitnik samo jedanput jer se pojavljuje jednom kao vanjski čvor, a drugi put kao

unutarnji čvor. U praksi vanjski čvorovi pri dnu predstavljat će duže zapise spremljene u

računalnoj memoriji, a unutarnji čvorovi će predstavljati pokazivače na te zapise.

Tablica 2.2.1. Primjer četverosmjerne zamjene odabira

Tehnika zamjene izbora se može koristiti i u prvoj fazi vanjskog sortiranja, ako radimo

P-smjerno spajanje ulaznih podataka sa njima samima. U gornje navedenom slučaju uzimamo

P dovoljno dugačak kako bi unutarnja memorija bila popunjena. Kada je zapis na izlazu

njegovo mjesto preuzima sljedeći zapis sa ulaza. Ako novi zapis teži manje od onog koji je

upravo izašao ne možemo ga uključiti u trenutačni niz. U suprotnom možemo ući u stablo

odluke i vidjeti kako se formirao taj novonastali dio. Svaki niz može sadržavati više od jednog

P zapisa, ali zapravo nikada nemamo više od jednog P zapisa u stablu izbora u isto vrijeme.

Gornja tablica prikazuje proces za P=4; brojevi u zagradi čekaju na uključivanje u sljedeći

niz.

Harold H.Seward (Master's Thesis, Digital Computer Laboratory Report R-232)

opisao je metodu formiranja inicijalnih nizova i također je iznio da nizovi mogu sadržavati

više od 1.5P zapisa kada se primjenjuju na slučajne podatke. A.I.Dumey je upotpunio ideju

1950.godine svojim uređajem za sortiranje u suradnji s Engineering Research Associates, ali

nije ju objavio. Naziv „Replacement selection“ stvorio je E.H.Friend 1956. godine koji je

svojim eksperimentom potvrdio da je očekivana duljina slijeda 2P i da su to realna očekivanja

7

Page 10: Vanjsko sortiranje

tokom procesa. E.F.Moore potvrdio je da je duljina 2P i usporedio ju je sa situacijom

cirkularnog obilaska ralice.

Slika 2.2.3. Primjer cirkularnog obilaska ralice [Knuth, 1998., str. 255]

Pahuljice snijega uzastopno padaju na kružnu stazu, te tako ralica neprekidno kruži i čisti.

Figurativno govoreći kada se snijeg makne sa ceste tada i podaci nestaju iz sustava.

Pokazivači na cesti mogu biti zamijenjeni i realnim brojevima x, 0≤x<1. Pahuljica snijega

koja pada na poziciju x predstavlja ulazni zapis čiji je znak x, a ralica predstavlja izlaz

Zamjene izbora. Brzina ralice je obrnuto proporcionalna visini snijega s kojim se susreće.

Situacija je savršeno izbalansirana tako da ukupna količina snijega na cesti čitavo vrijeme

iznosi P. Novi niz se formira na izlazu svaki put kad ralica prođe pored oznake 0. Nakon

određenog vremena sustav prelazi u stabilno stanje zbog toga što ralica konstantnom brzinom

cirkularno kruži. Visina snijega je konstanta u susretu sa ralicom kao i brzina padanja snijega,

odnosno iz prikazanog vidimo da je budući snijeg dvaput manji od postojećeg.

Slika 2.2.4. Primjer ralice na stazi određene duljine [Knuth, 1998., str. 255]

U mnogim komercijalnim aplikacijama ulazni podaci nisu posve slučajni nego imaju

određeni poredak. Nizovi stvoreni zamjenom izbora će nastojati imati više od 2P zapisa.

Vanjsko spajanje i sortiranje određeno je brojem stvorenih nizova u inicijalnoj distributivnoj

8

Page 11: Vanjsko sortiranje

fazi, stoga je i poželjno koristiti zamjenu izbora. Druge vrste unutarnjeg sortiranja stvaraju

duplo više početnih nizova zbog limitirane memorijske veličine.

Stvaranje početnih nizova zamjenom izbora otkriveno je zahvaljujući John R.

Waltersu, James Painteru i Martin Zalku, koji su koristili program za spajanje i sortiranje za

Philco 2000, 1958.godine. Koristili su se boljim načinom da inicijaliziraju stablo odluke i da

razdvoje zapise koji pripadaju različitim nizovima, te su izbacili zadnji niz koristeći se u

principu vrlo jednostavnom i jedinstvenom logikom. Osnovna ideja je da je svaki niz kao par

(S, K) gdje je K originalni znak, a S predstavlja redni broj niza kojemu zapis pripada. Kada su

takvi prošireni znakovi leksikografski poredani mi dobijemo izlazni slijed stvoren zamjenom

izbora sa S kao glavnim znakom i K kao podznakom.

Algoritam R (Zamjena izbora) je algoritam koji čita zapise sekvencijalno s početka

reda i zapisuje ih sekvencijalno na kraj reda, stvarajući RMAX broj nizova čija je duljina P ili

više (osim zadnjeg niza). Postoje P≥2 čvora i X[0],…,X[P-1] polja. Algoritam R opisuje ulaz

i izlaz svakog zapisa pojedinačno, dok je u praksi najbolje čitati i zapisivati samo relativno

velike blokove zapisa. Prema tome neki ulazni i izlazni bufferi su prisutni u memoriji i iz

pozadine efektivno smanjuju veličinu. P.E.H.Friend predložio je proširenu verziju zamjene

izbora s time da svaki put kad je key manji od lastkey na način da nestane na vrpcu ili veći ili

jednak od lastkey zapisuje se na vrpcu i stavlja se na izlazni buffer. Neka računala imaju

„raspršeno čitanje“ i „skupljeno pisanje“ mogućnosti za obradu ulazno-izlaznih podataka i sa

nedosljednih lokacija i to vodi k tehnikama preklapanja buffera sa stablom odluke.

2.3. Višefazno spajanje

Višefazno spajanje (eng.The Polyphase Merge) je princip podijele nizova na vrpce i

njihovo međusobno spajanje sve do posljednjeg niza. To ćemo sada objasniti na primjeru u

kojem imamo tri slobodne vrpčane jedinice T1, T2 i T3. Tehnikom „slobodnog spajanja“ i

unaprijed zadanim P=2 i T=3 koristimo sljedeću formu: Podijelimo početne redove

naizmjenično na vrpce T1 i T2. Zatim dolazi do spajanja nizova s T1 i T2 na T3; ako T3

sadrži samo jedan niz onda treba stati. Ako početni dijelni prolaz stvara S nizova tada će prvo

spajanje stvoriti S/2 nizova na T3, drugi će stvoriti S/4, itd. Recimo da imamo 17≤S≤32 onda

ce biti jedan dijelni prolaz, pet prolazaka spajanja i četiri kopirajuća prolaza. Općenito ako je

S>1, broj prolazaka kroz podatke je 2[log2S]. Kopirajući prolazi u ovoj proceduri su

9

Page 12: Vanjsko sortiranje

nepoželjni budući da ne reduciraju broj nizova. Većinu kopiranja možemo izbjeći koristeći se

dvofaznom procedurom da podijelimo početne nizove naizmjenično na vrpce T1 i T2, zatim

spojimo nizove s T1 i T2 na T3 i onda stanemo ako T3 ima samo jedan niz. Kopiramo

polovicu nizova s T3 na T1. Spojimo nizove s T1 i T3 na T2 i onda stanemo ako T2 sadrži

samo jedan niz. Kopiramo polovicu nizova s T2 na T1. I vratimo se na A2. Broj prolazaka

kroz podatke je reduciran na 3/2[log2S]+1/2 budući da koraci A3 i A5 rade samo polovicu

prolazaka, pa je s time ušteđeno i 25% vremena. U potpunosti se može eliminirati kopiranje

ako započnemo sa Fn nizovima na T1 i Fn-1 nizovima na T2 gdje su Fn i Fn-1 Fibonaccijevi

brojevi. Primjer:n=7, S=Fn+Fn-1=13+8=21

Broj znamenaka u svakoj fazi označava broj nizova, a značenje samog broja je duljina niza.

Općenito zadan broj vrpci T≥3 i koristeći (T-1)-smjerno spajanje prikazat ćemo na primjeru

sa šest vrpci:

10

Page 13: Vanjsko sortiranje

Iz tablice vidimo da 131 znači da postoji 31 niz relativne duljine 1. U principu ako želimo

pravilno višefazno spajanje moramo imati „savršenu Fibonaccijevu podjelu“ nizova na

vrpcama nakon svake faze što je otkrio R.L.Gilstad 1960. godine. Opći primjer toga je:

T=6 s poretkom {1,0,0,0,0},{1,1,1,1,1},{2,2,2,2,1},{4,4,4,3,2},{8,8,7,6,4},{16,15,14,12,8} i

{31,30,28,24,16} :

Vrpca 6 će uvijek biti prazna nakon početne podjele. Razine u tablici se kreću od n prema n+1

konstantno. U slučaju da S nije savršen, odnosno ako nemamo savršenu Fibonaccijevu

podjelu onda koristimo uravnoteženo P-smjerno spajanje i dodajemo lažni niz kako bi

postigli savršenost S. Primjer toga je Algoritam D koji višefazno spaja i sortira

horizontalnom podjelom. Uzima početne nizove i jednog po jednog stavlja na vrpce sve dok

ih ne ponestane. Također, u međukoracima nastojimo izjednačiti broj lažnih nizova na svakoj

vrpci. Zapisi na vrpcama se nalaze na kraju vrpci, a lažni nizovi na početku.

Kod višefaznog spajanja i sortiranja dolazi do problema efikasnog preklapanja

vremena premotavanja vrpci i tada koristimo metodu Razdvajanje vrpci (eng. Tape

splitting). Iterativni postupak će zapisati izlazni podatak, a pročitat će ulazni. Vrijeme

premotavanja može se izbjeći korištenjem triju vrpci, a metodu razdvajanja vrpci koristit

ćemo kod četiri ili više vrpci s (T-2)-smjernim spajanjem.

2.4. Kaskadno spajanje

Kaskadno spajanje (eng. Cascade Merge) započinje „savršenom podjelom“ nizova na

vrpci, iako se sama podjela razlikuje od podjele kod metode višefaznog spajanja. Svaka linija

11

Page 14: Vanjsko sortiranje

prikazuje kompletan prolaz kroz podatke.

Iznad navedeni primjer prikazuje šest vrpci, gdje se spajanje odvija po principu (T-1)-

smjerno, (T-2)-smjerno, (T-3)-smjerno spajanje itd. Prednosti korištenja kaskadnog spajanja

naspram višefaznog spajanja je kod šest i više vrpci, iako ni tada se ne može potvrditi da će

visoki stupanj spajanja biti u potpunosti efikasan. Ako početni nizovi nisu savršeni, onda se

uobičajeno koriste lažni nizovi. U prethodnom primjeru je vidljivo da nema potrebe za lažnim

nizovima, jer su prolazi cjeloviti, odnosno imamo 190 početnih nizova i svaki zapis je

procesuiran točno pet puta. U slučaju da imamo 191 prolaz morali bi svaki zapis procesuirati

šest puta ili bi u prvom prolasku spajanja i podjele nizova smanjili kopiranje sadržaja vrpce,

što nazivamo Fergusonovom metodom koja bez poteškoća prelazi s razine na razinu.

Kaskadno spajanje s posebnom podjelom podrazumijeva Algoritam C, koji uzima jedan po

jedan početni niz i raspodjeljuje ih po vrpcama sve dok ih ne ponestane. Zatim specificira na

koji način će vrpce biti spojene i izbjegava jednosmjerno spajanje. Algoritam C funkcionirat

će po principu da postoji T≥3 slobodne jedinice i da se koristi većinom (T-1)-smjerno

spajanje.

Ako je nadodana još jedna vrpca, moguće je preklopiti skoro sva vremena tijekom

kaskadnog sortiranja. Recimo da možemo spojiti T1-T5 na T7, T1-T4 na T6, T1-T3 na T5 (u

ovome slučaju T5 je već premotana), zatim T1-T2 na T4, koji nakon toga zahtijeva kratko

vrijeme kako bi se premotao. Još jedna od modifikacija kaskadnog sortiranja jest i shema koja

uključuje višefazne i kaskadne slučajeve, gdje svaka faza sadrži (T-1)-smjerno,(T-2)-smjerno,

…, P-smjerno spajanje, a P je fiksni broj između 1 i T-1. U slučaju P=1 radi se o čistoj

kaskadi ili P=2 onda je kaskada bez faze kopiranja, a kada je P=T-1 onda se radi o višefaznom

spajanju. Kako se T povećava tako se vrijednosti P više približavaju kaskadi nego višefazi, što

znači da je u praksi bolje koristiti kaskadno spajanje nego njegovu kombinaciju. U suštini od

svih kompromisnih spajanja najbolje je osnovno višefazno jer koristi optimalan broj razina i

podjela lažnih nizova.

12

Page 15: Vanjsko sortiranje

2.5. Čitanje vrpce unazad

Čitanje vrpce unazad (eng,. Reading Tape Backwards) prikazuje sposobnost čitanja

magnetskih vrpci u suprotnom smjeru u kojoj su na njoj zapisani podaci što poništava

operacije premotavanja vrpci na način da zapisujemo na vrpcu unaprijed, a čitamo unazad.

Općenito se informacije na vrpcama zapisuju unaprijed, zatim se vrpca premotava, učitava

unaprijed i ponovno premotava. Svi tipovi spajanja od uravnoteženog, višefaznog i kaskadnog

mogu biti primjenjivani na način da čitaju vrpcu unazad. No, spajanje invertira poredak niza

kada ga čitamo unazad i upisujemo unaprijed. Kada postoje dva niza u opadajućem poretku na

vrpci oni se spajaju tokom čitanja unazad i tada postaju neopadajući nizovi. Svakim

prolaskom kroz nizove, opadajući nizovi prelaze u neopadajuće i obrnuto.

Sljedeći primjer odnosi se na spajanje osam početnih nizova nad kojima ćemo koristiti

tehniku čitanja vrpce unazad u uravnoteženo spajanje na četiri vrpce. Znak A r prikazuje niz na

vrpci kao rastući niz, a Dr je opadajući niz duljine r. Prvim prolaskom (A1) niz je rastući i

čitamo ga unaprijed, tijekom drugog prolaska niz prelazi u padajući i čitamo ga unazad. Za

ubrzanje procesa spajanja najbolje je premotati vrpcu prilikom trećeg prolaska.

Proces čitanja vrpce unazad najbolje se može primjenjivati kod uravnoteženog spajanja jer

kod kaskadnog i višefaznog spajanja to traje vremenski vrlo dugo, a i tehnički je vrlo

zahtjevno. Kako bi ipak bilo izvedivo dolazi do čestih premotavanja vrpci, kopiranja sadržaja

s jedne vrpce na drugu, izmjenjivanja smjera nizova na svakoj vrpci, dodavanja lažnih nizova.

Optimalni obrazac spajanja na vrpcama je vrlo teško determinirati prvenstveno zbog

interakcije vremena premotavanja s vremenom spajanja. Zbog toga je Richard M. Karp razvio

dvije teorije prikaz vektorom i prikaz stablom koje su vrlo korisne u praksi. Vektori su u

procesu spajanja navedeni unatrag od y(m) kao prvog do y(0) kao zadnjeg što je prednost ove

razvojne teorije. Kod prikaza stablom konstruira se stablo s listom kao vanjskim čvorom za

svaki početni niz i s unutarnjim čvorom koji označava na kojem nizu je izvedeno spajanje.

Kod malih S vrijednosti višefazne i kaskadne metode su jednostavnije i brže u procesu

13

Page 16: Vanjsko sortiranje

podjele i spajanja, a kod većih vrijednosti pogodnije je asimptotički optimum preraspodjele

kod spajanja.

2.6. Oscilirajuće spajanje

Oscilirajuće spajanje (eng. Oscillating Sort) kreirano je 1962. godine kada je Sheldon

Sobel predložio algoritam koji oscilira unazad i unaprijed između podjele i spajanja. Iz

algoritma je izbačen prolaz s podjelom gdje se početni nizovi ne postavljaju više na vrpce već

se većina sortiranja odvije prije nego što se ulazni podaci u potpunosti ne potroše. U

sljedećem primjeru ćemo Sobelovom metodom na pet vrpci sortirati 16 početnih nizova. A r i

Dr prikazuju rastuće i padajuće nizove relativne duljine r. Na svaku vrpcu od T1 do T4

zapisujemo početne nizove i spajamo ih čitajući unazad na petu vrpcu. Nakon prve faze dolazi

do ponovne podjele i sekundarnog spajanja stvarajući niz D4.

Dennis L. Bencher je 1965. godine stvorio „unakrsno spajanje“, odnosno algoritam koji

odgađa spajanje sve dok se ne skupi dovoljno znanja o S. Ovo spajanje se ostvaruje s

Algoritmom B koji predstavlja oscilirajuće spajanje sa unakrsnom podjelom. Uzimajući

početne nizove raspodjeljuje ih na vrpce, a povremeno prekida proces dijeljenja spajajući

sadržaje određenih vrpci. M.A.Goetz otkrio je način performanse oscilirajućeg sortiranja

čitanjem unaprijed i jednostavnim premotavanjem. Ovaj način je prilično drugačiji od drugih

jer su podaci ponekad zapisani na početak vrpce, dok se podrazumijeva da podaci sa sredine

vrpce neće biti izbrisani. Također, svi početni stringovi imaju fiksnu maksimalnu duljinu.

Ovom shemom se zaobilaze karakteristike čitanja unaprijed „prvi unutra, prvi van“, ali se

dovoljnom količinom praznog prostora između nizova može efikasno implementirati i također

na vrijeme se trebaju prepoznati i ignorirati analogne greške.

14

Page 17: Vanjsko sortiranje

2.7. Vanjsko bazno sortiranje

Vanjsko bazno sortiranje (eng. External Radix Sorting) ponekad nazivamo i sortiranje

podjelom, digitalno sortiranje, džepno sortiranje i slično. Važno je naglasiti da je ovaj tip

sortiranja u potpunosti različit od spajanja. U primjeru imamo četiri vrpce i osam ponuđenih

znakova: 0,1,2,3,4,5,6,7. Na vrpci T1 nalaze se ulazni podaci, te proces započinjemo

premještanjem parnih brojeva na T3, a neparnih brojeva na T4. Tada premotamo vrpcu i

iščitavamo vrpcu T3, pa onda T4 stavljajući pritom {0,1,4,5} na vrpcu T1 i {2,3,6,7} na T2.

Nakon drugog premotavanja i podjele na vrpci T3 se nalaze 0,1,2,3, dok se na T4 nalaze

4,5,6,7. Ova metoda završava kopiranjem sadržaja sa T4 na T3. Broj izvedenih prolazaka je

jednak duljini vanjske staze stabla podijeljenoj brojem vanjskih čvorova.

Vanjsko bazno sortiranje pojavljuje se i u obliku čitanja sadržaja vrpci unazad, te se

tada susrećemo s pojmom T-lifo stabla. Iako, ova vrsta sortiranja nije u potpunosti efikasna

vrlo je zanimljiva zbog svojih metoda parcijalnog prolaska jer se pojavila prije u literaturi o

vanjskom baznom sortiranju (1946.) nego u literaturi o spajanju (1960.). U većini slučajeva

bazno sortiranje je inferiornije od sortiranja spajanjem jer tehnika zamjena izbora sortiranju

spajanjem daje bitnu prednost. Oscilirajuće bazno sortiranje tvori međupodatke koji su manji

nego što memorija može učitati tako da podjela odgovara stablu s većim brojem vanjskih

čvorova i ima niz prednosti naspram korištenja zamjene odabranog ili spajanja. Vanjska

duljina staze stabla slijedno se povećava, odnosno vrijeme sortiranja.

Ako je domet znakova vrlo mali na način da skupina zapisa znakovima koje posjeduje

bude ispunila unutarnju memoriju dvaput i više tada je bolje koristiti bazno sortiranje.

Unutarnje bazno sortiranje je superiornije nad spajanjem na određenim brzo protočnim

računalima jer unutarnje petlje baznog sortiranja izbjegavaju kompleksno grananje. Brza

vanjska memorija pridonijet će stroju da spaja podatke dovoljno brzo i u skladu sa ulazno-

izlaznim jedinicama.

15

Page 18: Vanjsko sortiranje

2.8. Dvo-vrpčano sortiranje

Dvo-vrpčano sortiranje (eng. Two-Tape Sorting) je kombinacija zamjena

odabranog i mjehuričastog sortiranja. Na vrpci T1 nalazi se ulaz i čitanje započinje od P+1 u

memoriji. Zapis koji ima najmanji znak stavlja se na vrpcu 2 i zamjenjuje se novim ulaznim

zapisom. Kada na ulazu više ne postoji zapisa, najveći P znak datoteke će biti prisutan u

memoriji, a rezultat je opadajući niz znakova. Zatim se obje vrpce premotavaju i proces se

ponavlja na način da čita s vrpce T2 i zapisuje na T1. Svakim prolazom stavlja se za P više

zapisa na za to određena mjesto. Ako je veličina datoteke nezamjetno veća od veličine

memorije i brzina sortiranja će biti veća, također dvo-vrpčano sortiranje možemo koristiti i

kad nam je potrebna dodatna slobodna jedinica.

Slika 2.8.1. Prikaz vrpci 0 i 1 [Knuth, 1998., str. 354]

Slika (2.8.1.) iznad prikazuje vrpcu 0 i vrpcu 1 kao dva stoga čijim bi spajanjem

nastala linearna lista i na kojoj bi se trenutačne pozicije mogle premještati s desne na lijevu

stranu i obrnuto kopirajući s jednog stoga na drugi. Vrijeme izvođenja ovog algoritma ogleda

se u tome da su podaci spremljeni u direktnom slijedu pa je vjerojatnost da postoje dva ista

znaka nikakva. Metoda baznog sortiranja također se može primijeniti na dvo-vrpčano jer se

sama ideja temelji na čitanju datoteke više od jedanput i sličnosti s Quicksort-om. Ulazni

podaci na T1 kopirat će se na vrpcu T2 čiji znakovi u binarnoj notaciji završavaju s 0. Kada

premotamo T1, ponovno je čitamo i zapisujemo znakove kojima je zadnja znamenka 1.

Premotavanjem obje vrpce dobijemo sličan par prolaza i zamjenjuju se uloge T1 i T2, ali onda

gledamo drugi bit najmanjeg značaja. Do tad se u T1 nalaze zapisi (..00)2, a zatim slijede (…

01)2,…,(…10)2 ,…(11)2. Ako su znakovi za b bitova duži, onda treba samo 2b prolaza kroz

podatke kako bi se izvršilo sortiranje. F.C.Hennie i R.E.Stearns kreirali su sortiranje i nazvali

ga simulacija više vrpci čime su prikazali da je traka vrpce koja je potrebna, složenosti O(log

L) gdje je L maksimalna duljina prolaza kroz vrpcu kod uravnoteženog spajanja. Sortiranje

quicksort-om složenosti O(N(logN)2) je više akademske vrijednosti jer bi u suprotnom bilo

potrebno 37 sati kako bi se podaci efikasno sortirali.

16

Page 19: Vanjsko sortiranje

Mono-vrpčano sortiranje objašnjeno je na primjeru transporta ljudi između katova

koristeći samo jedno dizalo. Ako u obzir uzmemo dizalo sa n katova i c brojem ljudi za koje

na svakom katu postoji prostor određenog kapaciteta. U zgradi nema vrata, prozora ni

stepenica već samo ima dizalo koje se može zaustaviti na svakom katu. Postoji cn ljudi u

zgradi, od toga c ljudi želi ići na određeni kat, a najviše b ljudi se može nalaziti u dizalu.

Zadatak je da se ljudi u dizalu prevezu što brže od točke A do točke B, odnosno od kata i do

kata i+1. U ovom slučaju ljudi predstavljaju zapise, a zgrada je vrpca. Katovi tvore

pojedinačne blokove na vrpci, a dizalo je unutarnja računalna memorija. Dizalo će napraviti

najmanje uk/b prijelaza od kata do kata, gdje uk predstavlja ukupan broj ljudi na svakom katu.

Zaključak ovog primjera je Teorem K koji kaže da ako je uk>0 za 1≤k<n onda dizalo u

najmanjem vremenskom roku svakoga dovozi do željenog odredišta.

17

Page 20: Vanjsko sortiranje

3. Zaključak

Različite vrste vanjskog sortiranja pokrivat će različite potrebe programera.

Činjenica je da ćemo kod malog broja podataka koristiti unutarnje sortiranje jer je kapacitet

glavne memorije sasvim dovoljan da obradi tu količinu podataka. S druge strane vanjsko

sortiranje ćemo koristiti kod većeg broja podataka i svoj naziv je dobio po tipu memorije koju

koristi, a to je vanjska memorija, odnosno najčešće hard drive.

Strategija vanjskog sortiranja jest u kombinaciji sortiranja i spajanja gdje u fazi

sortiranja manje dijelove podataka dostatne za glavnu memoriju čita, sortira i zapisuje u

privremenu memoriju, a u fazi spajanja sortirani podaci se spajaju u veću jedinstvenu

datoteku.

Najbitniji dio samog algoritma jest u ocjeni njegove efikasnosti. Ako se natječemo s

vremenom onda se nećemo oslanjati na samu snagu i brzinu računala već ćemo nastojati

koristiti algoritme i strukture podataka koji mogu u kratkom vremenskom roku obraditi

određenu količinu podataka ovisno o potrebama korisnika.

18

Page 21: Vanjsko sortiranje

Literatura

1. J. S. Vitter, Algorithms and Data Structures for External Memory, Series on

Foundations and Trends in Theoretical Computer Science, now Publishers, Hanover,

MA, 2008.

2. Donald Knuth, The Art of Computer Programming, Volume 3: Sorting and Searching,

Second Edition. Addison-Wesley, 1998, Section 5.4: External Sorting, (248–379.str.)

3. Chasing State of the Art - External Merge Sort (2010.) Dostupno 22.12.2010. na

http://dzmitryhuba.blogspot.com/2010/08/external-merge-sort.html

4. External Sorting (2009.) Dostupno 22.12.2010. na

www.cs.rutgers.edu/~muthu/lec9-04.ppt

5. Tutorial on External Sorting (2010.) Dostupno 22.12.2010. na

http://www.csd.uoc.gr/~hy460/0607Fall/lectures/CS460SortMergeTutorial06.pdf

19