algoritmi i strukture_podataka_2016-04_v01

46
Algoritmi i strukture podataka Algoritmi i složeni tipovi podataka Leonardo Miljko www.ckm.ba - Leonardo Miljko Prezentacija nastala na osnovu knjige: Brano Markić i Dražena Tomić, Uvod u algoritme i strukture, Ekonomski fakultet , Mostar,2008.

Upload: leonardo-miljko

Post on 21-Mar-2017

27 views

Category:

Software


1 download

TRANSCRIPT

Algoritmi i strukture podataka Algoritmi i složeni tipovi podataka

Leonardo Miljko

www.ckm.ba - Leonardo Miljko

Prezentacija nastala na osnovu knjige:

Brano Markić i Dražena Tomić,

Uvod u algoritme i strukture, Ekonomski fakultet , Mostar,2008.

Algoritmi i složeni tipovi podataka Složeni tipovi podataka su sastavljeni od:

jednostavnih (skalarnih) i/ili

složenih tipova podataka.

Primjer složenog tipa podataka je jednodimenzijsko polje. Njega tvore skupine skalarnih tipova podataka istog tipa. Naravno, članovi (elementi polja mogu biti složeni tipovi podataka).

Složeni tipovi se uvijek mogu razložiti na jednostavne (skalarne) tipove podataka.

www.ckm.ba - Leonardo Miljko

Polja (array) Polje je podatkovna struktura u kojoj više podataka istog tipa dijeli

zajedničko ime.

Polje je složeni tip podataka sastavljen od konačnog broja (n>=0) podataka istog tipa.

Struktura podataka polje matematički odgovara uređenoj n-torci x1, x2, ... xn, pri čemu svi članovi x1, x2, ... xn, pripadaju istoj domeni (istog su tipa). Ono je najčešća struktura podataka (najšire je u uporabi).

Osnovni elemenat pristupa članu polja je indeks. On definira broj elemenata polju ali i poziciju svakog člana u polju.

Indeks polja može biti nenegativni cijeli broj (konstanta, varijabla, cjelobrojni izraz). Prije uporabe polje se mora deklarirati.

Deklarirati polje znači odrediti tip podataka elemenata polja, naziv polja i indekse. Tako se elemenat P[i] bira preko indeksa i iz polja P.

www.ckm.ba - Leonardo Miljko

Polja (array) Polja, u načelu, zauzimaju kontinuirani memorijski prostor. Slika

prikazuje polje od 5 elemenata

P[0]; P[1]; P[2]; P[3]; P[4].

• Početna adresa polja je istodobno i adresa prvog elementa. Ona zauzima najnižu memorijsku adresu u polju. Drugi element polja slijedi nakon prvog, pa je i njegova memorijska adresa nakon adrese prvog elementa.

• Broj članova niza je u načelu unaprijed određen. Polje koje nema članova je prazno polje.

• Najbliži pojam u matematici polju je vektor.

• Jednodimenzijska polja imaju samo jedan indeks. (npr. P[4]). Prikaz jednodimenzijskih polja u memoriji je jednostavan jer je i glavna memorija računala jednodimenzijsko polje.

www.ckm.ba - Leonardo Miljko

Polja (array) Prikaz višedimenzijskih polja je nešto složeniji jer se ona pohranjuju u

jednodimenzijsku memoriju.

• Prvo se deklarira polje. To je polje npr. dvodimenzijsko, a elementi polja su tipa char tj.: char P[4][4];.

• Dvodimenzijsko polje P sadrži 16 elemenata ili 16 bajtova organiziranih u četiri retka

po četiri stupca.

Na slici je grafički prikazano

dvodimenzijsko polje 4 x 4

kao jednodimenzijsko polje

dimenzije 16.

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Sortirana su polja poseban oblik polja čiji su članovi uređeni po rastućem ili padajućem redoslijedu. Sortiranje članova polja olakšava (ubrzava) pronalaženje članova polja. Traženje u sortiranom polju logaritamski ovisi o duljini polja (primjer je binarno pretraživanje), a u nesortiranom polju ovisi linearno o duljini polja (i u prosjeku i u najgorem slučaju).

Najčešći algoritmi sortiranja:

pomoću mjehurića (bubble sort)

umetanjem (insertion sort)

shell sortiranje

ubrzano (quick sort)

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Mjehurićasto sortiranje (bubble sort)

Mjehurićasto sortiranje temelji se na ideji usporedbe svakog elementa polja sa sljedećim elementom.

Ako elementi nisu u odgovarajućem poretku, onda se zamjenjuju njihova mjesta. Nakon završetka svih usporedbi vrijednosti članova polja (prvog prolaza), član polja koji ima najveću vrijednost je na posljednjoj poziciji u polju tj. on je posljednji član polja.

Proces zamjene se nastavlja sve dok svi elementi u polju ne budu u odgovarajućem redoslijedu (sortirani). To je uvjet završetka algoritma sortiranja.

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Sortiranje umetanjem (insertion sort)

• Metoda se bazira na promatranju sadržaja samo jednog člana iz onog dijela polja koji još nije uređen. Tom članu se pronalazi odgovarajuće mjesto u polju koje je uređeno. Potom se uzima svaki član u ostatku neuređenog polja, i premješta u sortirano polje na odgovarajuću poziciju.

• Kad se nađe mjesto promatranom članu u sortiranom polju, on se umeće na tu poziciju i svaki član u ostatku sortiranog polja se pomiče za jedno mjesto (povećava mu se indeks za jedan), a postupak se ponavlja sa sljedećim članom polja.

• Petpostavka je da proces sortiranja koristi još jedno polje. Svaki element originalnog (nesortiranog) polja se premješta u izlazno polje u sortiranom redoslijedu. Sortiranje je dovršeno kada se premjeste svi članovi originalnog polja u izlazno polje.

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Shell sort je nazvan prema Donald Shellu koji je 1959. godine prvi objavio tu tehniku sortiranja.

Algoritam bubble sort uspoređuje susjedne elemente polja i zamjenjuje njihova mjesta. Drugačije rješenje je uspoređivati dva člana polja koja su međusobno udaljena približno jednu polovinu ukupnog broja elemenata polja. Ako je član polja s manjim indeksom veći od člana polja s većim indeksom oni zamjenjuju mjesta.

Postupak uspoređivanja i zamjena mjesta u polju se ponavlja sve dok su članovi polja s manjim indeksom veći od članova polja s većim indeksom (sortiranje u rastućem redoslijedu).

Nakon toga se smanjuje rastojanje između elemenata polja na polovinu prethodnog rastojanja (intervala). Ponovno se nastavljaju uspoređivanja i zamjene, a onda i smanjenje rastojanja (intervala) između članova polja na polovinu prethodnog intervala sve dok interval ne postane 1.

Tada sortiranje postaje slično bubble sortu, ali će broj zamjena i uspoređivanja biti malen jer je polje već gotovo sortirano.

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Brzo sortiranje (quick sort) je prvi pokazao C.A.R. Hoare.

Brzo sortiranje je učinkovit algoritam sortiranja u kojem član polja, na odgovarajući način, pronalazi svoju poziciju u polju. Neki član polja se na početku procesa sortiranja proglašava stožernim članom (pivotal element). To je često prvi član polja (može i član čija je pozicija na sredini polja).

Algoritam pronalazi odgovarajuće mjesto u polju za taj stožerni element. Tako što se stožerni element prvo uspoređuje s članovima polja s desna na lijevo (prvo sa posljednjim članom u polju tj. s članom s najvećim indeksom, što se naziva backward). Usporedba se nastavlja sve dok je stožerni član manji od članova u polju s desna (sortiranje u rastućem redoslijedu). Ako je stožerni član veći, onda on zamjenjuje mjesto (poziciju) s članom od kojeg je veći.

www.ckm.ba - Leonardo Miljko

Polja (array) Algoritmi sortiranja

Mijenja se smjer uspoređivanja. Stožerni član se uspoređuje s članovima na početku polja (slijeva na desno ili forward), sve dok ne postane manji. Slijedi ponovno zamjena mjesta i primjena smjera uspoređivanja. Novi smjer je s desna na lijevo.

Takav postupak usporedbi s desna na lijevo i s lijeva na desno (backward i forward) i zamjena pozicija se nastavlja sve dok se svi članovi polja ne usporede sa stožernim. U toj točki ni jedan element polja lijevo od stožernog nije veći, niti je ni jedan član desno manji od stožernog. On je pronašao svoje mjesto.

Polje se može podijeliti na dva polja (lijeva i desna particija). Nakon podjele polja na dva dijela njihovi članovi se mogu nastaviti sortirati odvojeno uporabom istog algoritma (rekurzivnim pozivima).

Služi se strategijom „podijeli pa vladaj“ www.ckm.ba - Leonardo Miljko

Algoritmi brisanja, pretraživanja i dodavanja članova polja

Element polja se može obrisati samo ako je stvarno pohranjen u polju. Zato je nužni preduvjet uspješne primjene algoritma brisanja popunjenost polja podacima tj. da ne postoje prazni članovi (rezerviran prostor memorije u kojem ne postoji nikakva vrijednost).

Ako se pretpostavi postojanje praznih mjesta u polju, onda je algoritam brisanja nešto složeniji.

Nakon pronalaska člana koji se želi obrisati i njegova brisanja potrebno je promijeniti indekse (umanjiti ih za jedan) svakom članu koji ima indeks veći od obrisanog člana (do kraja polja).

www.ckm.ba - Leonardo Miljko

Algoritmi pretraživanja Sortirana polja sadrže članove koji su poredani u rastućem ili

padajućem redoslijedu. Takav poredak članova polja omogućuje brzo pretraživanje. Bitan razlog razvoja algoritama sortiranja polja je uporaba binarnog pretraživanja.

Binarno pretraživanje je najbrži postupak pretraživanja sortiranih polja i značajno povećava brzinu obrade podataka.

Jednostavnije, ali sporije, od binarnog je linearno pretraživanje.

Linearno pretraživanje sortiranih polja nalik je pretraživanju nesortiranog polja. Razlika je samo što linearno pretraživanje sortiranog polja završava ako je pronađen član s većom vrijednosti od člana koji se želi pronaći (ne mora se doći do posljednjeg člana polja).

www.ckm.ba - Leonardo Miljko

Algoritmi pretraživanja Binarno pretraživanja dolazi do punog izražaja u sortiranom polju.

To je najbrži način pretraživanja polja, osobito bitan za polja s velikim brojem članova.

Jednostavan primjer logike binarnog pretraživanja je dobro poznata igra pogađanja zamišljenog broja U toj igri zapiše se neki broj, npr. između 1 i 100. Da bi se pronašao zapisani (ili zamišljeni) broj potrebno je redom postavljati pitanja. Mora se znati jedino u kojem se intervalu nalazi zamišljeni broj (taj interval je [1,100]). Prvo je razumno podijeliti interval na polovicu i upitati je li broj veći od 50. Ako je odgovor da, onda je zapisani broj između 50 i 100. Ponovno se interval [50, 100] dijeli na polovicu (polovica je 75) i postavlja isto pitanje je li broj veći od 75. Svaki odgovor dopušta podjelu intervala u kojem se nalazi zapisani broj na polovicu. Interval se smanjuje i na koncu interval postaje samo jedan broj, a on je zapisani ili zamišljeni broj.

www.ckm.ba - Leonardo Miljko

Strukture Struktura je skup različitih podataka u jednoj jedinstvenoj jedinici

(dijelu) memorije. Deklariraju se uporabom ključne riječi struct

Varijable unutar strukture se nazivaju elementi strukture. Svaki element strukture se deklarira kao varijabla u nekom bloku naredbi.

Nakon deklaracije kreiraju se instance strukture. One se dodaju kao varijable između zatvorene zagrade i točke zareza na kraju strukture.

• Primjer:

U ovom primjeru se deklarira struktura točka (ima dvije cjelobrojne koordinate x i y) i generiraju dvije instance strukture: gornjaDesna, donjaDesna (dvije točke).

www.ckm.ba - Leonardo Miljko

Klase • Apstraktni tipovi podataka su prethodnica objektno orijentiranog

dizajna. Ta ideja omogućila je izgradnju teorije objektno orijentiranog pristupa u analizi, dizajnu i programiranju.

• Apstraktni tip podataka je struktura podataka i skup funkcija i procedura koje operiraju na strukturi podataka. Pojam apstraktni tip podataka ima dva dijela.

• Prvi je tip podataka, a drugi je apstrakcija. Osim ugrađenih tipova podataka u programskim jezicima (npr. int, double, float, long itd.). mogu se izgraditi i vlastiti tipovi podataka uporabom klasa. Neodvojivi dio identiteta tih elementarnih tipova podataka su i dopuštene operacije npr. +, -, *, /, i druge koje se mogu primijeniti na tipove podataka.

www.ckm.ba - Leonardo Miljko

Klase • Ako se pojmovi vezani za apstraktne tipove podataka uspoređuju s

pojmovima u objektno orijentiranom pristupu, onda se funkcije i procedure (kod apstraktnih tipova podataka) u objektnoj orijentaciji nazivaju metode, a strukturu podataka i njezine metode klasom.

• Apstraktni tipovi podataka se tako razvijaju u klase, pa se između apstraktnog tipa podataka i klase može staviti znak jednakosti. Razvojem koncepta klase moguće je kreirati vlastite tipove podataka. Ako se stog ili red prikazuju kao klase, onda su i oni tipovi podataka.

www.ckm.ba - Leonardo Miljko

Klase Apstraktni tipovi podataka su način razmišljanja o strukturama

podataka koji se koncentrira na to što struktura radi, a ne na to kako radi. Koncept strukture podataka je odvojen od njezine implementacije.

Stog i red su primjeri apstraktnih tipova podataka. Mogu se implementirati pomoću polja ili povezanih listi. Upravo je to jedna apstraktna priroda stogova i redova.

Klasa je skupina podataka i funkcija međusobno povezanih kako bi izvršili neki programski zadatak. Klasa je tako nalik strukturi. Koncept klasa u C++ ima obilježja koja su zajednička svim objektno orijentiranim jezicima

www.ckm.ba - Leonardo Miljko

Klase Koncept klasa u C++ ima obilježja koja su zajednička svim objektno

orijentiranim jezicima.

To su sljedeća bitna obilježja:

atribut

metoda

kapsuliranje podataka i ograničenje pristupa samo atributima klase

konstruktor

destruktor

Klasa je opći plan, obrazac za konkretni objekt (instancu klase). Svaki je pojavni oblik klase (instanca) poseban objekt i on ima svoje elemente. Objekti su međusobno neovisni.

Svi su istog tipa (jer pripadaju istoj klasi), ali u memoriji zauzimaju posebne dijelove.

www.ckm.ba - Leonardo Miljko

Klase Deklaracija klase i strukture u C++ je veoma slična. Ta se dva koncepta

razlikuju samo u uporabi ključnih riječi „class“ i „struct“.

Klasa se prije uporabe mora deklarirati. Nakon deklaracije se ponaša kao tip podataka. Sličan koncept vrijedi i za varijable. Prije uporabe varijabla se deklarira tako što navede tip podataka i naziv varijable.

Tek nakon deklaracije varijabla se može inicijalizirati i uporabiti u programu.

Slično je i s klasom. Tek nakon deklaracije klase ona može posluži za kreiranje objekata. Objekti klase nasljeđuju sve atribute i metode klase kojoj pripadaju.

• Radi komparacije koncepata klase i strukture i prikaza njihove sličnosti slijedi primjer strukture i klase Konto.

www.ckm.ba - Leonardo Miljko

Stog (stack) Temeljno svojstvo stoga je ograničavanje pristupa podacima u stogu

(članovima stoga).

Puni se i prazni po načelu posljednji unutra prvi van (LIFO – last in first out). Omogućuju pristup samo jednom elementu, a to je posljednji element stoga. Imaju dosta široku primjenu.

Mikroprocesori se služe stogom tj. imaju arhitekturu temeljenu na stogu.

• Isto tako može se koristiti i za obilazak binarnog stabla kao složene strukture podataka. Kada se pozove neka funkcija, onda se vraća njezina adresa, a argumenti funkcije se postavljaju (push) na stog. Kada funkcija izračunava neki izraz onda se njezini argumenti skidaju sa stoga (pop).

• Operacije stoga su ugrađene u mikroprocesor. Stog ima primjenu kod parsinga (analize) aritmetičkih izraza.

www.ckm.ba - Leonardo Miljko

Stog (stack) U realnim situacijama često nailazimo na stog kao strukturu

podataka.

Jedan je od najjednostavnijih primjera poznata figura “pez” ili “magazin” pištolja:

Stog se može zamisliti kao spremnik objekata koji se puni i prazni po načelu posljednji unutra - prvi van (LIFO: last-in-first-out).

www.ckm.ba - Leonardo Miljko

Liste Prednosti i nedostaci pojedinih struktura podataka za izvođenje

određenih operacija:

o u nesortiranom polju pretraživanje podataka veoma sporo,

o u sortiranom polju sporo je umetanje podataka

o brisanje je podataka u oba tipa: sortiranom i nesortiranom polju veoma sporo.

o duljina polja (broj elemenata) se često ne može promijeniti nakon deklaracije

Povezane liste mogu riješiti neke od tih problema, eliminirati neke nedostatke polja. Može zamijeniti polje kao osnovicu za stog i red. Povezane liste mogu zamijeniti polja i bitno ubrzati brisanje i umetanje podataka. Liste su zato široko uporabljive, a koncepcijski mnogo jednostavnije od drugih popularnih struktura kao što je npr. stablo.

www.ckm.ba - Leonardo Miljko

Liste Lista je konačni niz (od nula ili više) podataka istog tipa. Podaci u listi

se nazivaju njeni članovi (elementi). Povezana lista je linijska struktura podataka.

U povezanoj listi svaki je član liste umetnut u neku vezu. Veza je objekt klase koja se najčešće naziva čvor.

www.ckm.ba - Leonardo Miljko

Liste Primjeri liste

Riječ je lista znakova. Npr. riječ MARINA se može interpretirati kao (M,A,R,I,N,A). Dva različita elementa imaju istu vrijednost i oni su dva različita člana liste (to je znak A).

Redak teksta je lista znakova (uključujući i prazan znak).

Stranica teksta je lista redaka.

Cijeli tekst lista stranica.

Neki elemenati liste mogu imati jednake vrijednosti. Međutim, identitet elementa određuje njegova pozicija (redni broj, mjesto u listi), a ne vrijednost.

Elementi liste su linearno uređeni. Uvijek je ai ispred ai+1, i nakon ai−1.

Broj elemenata u listi nije unaprijed određen.

www.ckm.ba - Leonardo Miljko

Liste Dvostruko povezana lista je lista u kojoj svaki član (čvor) sadrži dvije

adrese: adresu svog prethodnika i adresu svog sljedbenika. Ona je struktura koja sadrži pokazivač na sljedeći (kao kod jednostruko povezane), ali i pokazivač na prethodni član.

Dvostruko povezana lista može se pretraživati od početka prema kraju i od kraja prema početku. Zbog dva pokazivača u svakom čvoru, dvostrukoj listi je potrebno više memorijskog prostora od jednostruko povezane liste.

www.ckm.ba - Leonardo Miljko

Liste Liste s pokazivačima Glava i Rep Jednostrukoj vezanoj listi se dodaju

još dva člana na koje pokazuju pokazivači Glava i Rep.

Prednosti takve varijante linearne liste su što se prilikom pretraživanja ne mora stalno ispitivati uvjet dolaska do posljednjeg člana liste jer je kraj liste posebno obilježen (stop član).

Bitno svojstvo liste su i dva dodatna člana: jedan je ispred prvog, a drugi iza posljednjeg člana liste. Član iza posljednjeg člana liste sadrži pokazivač na posljednji pravi član liste.

www.ckm.ba - Leonardo Miljko

Liste Cirkularna lista Ona nema kraja liste.

Tvori se tako da se pokazivač 'posljednjeg' člana liste, vrati na prvi član liste. Petlja kojom se prolazi kroz listu vrtila bi se do beskonačnosti jer cirkularna lista nema kraja.

www.ckm.ba - Leonardo Miljko

Stablo Stablo je samo instanca općenitijeg pojma koji se naziva graf. Graf

G=(N,L) čini skup čvorova (vrhova) N1, N2 ..., Nn i skup lukova L (grana, bridova) koji povezuju parove Grana odgovara paru čvorova. Drugim riječima, grane predstavljaju relaciju između čvorova.

Takav skup čvorova ne mora biti konačan. Grane stabla su uređeni par čvorova.

U računalnom programu čvorovi (nodes) mogu reprezentirati pojmove kao što su ljudi, auta, avionske rezervacije i sl. To su neki tipični pojmovi pohranjeni kao strukture podataka. Veze između čvorova prikazuju kako su čvorovi (vrhovi) povezani. Jedini način kretanja između čvorova je slijediti tu crtu (luk) kojom su čvorovi povezani, a zove se putanja (path).

www.ckm.ba - Leonardo Miljko

Stablo Graf je usmjeren ako su mu grane uređeni parovi (zna se točno koji je

prvi, a koji sljedeći). Ako se usmjereni graf prikazuje slikom, granama se dodaju strijelice koje vode k drugom čvoru iz uređenog para. Svaki luk usmjerenog grafa ima određen smjer. Graf je neusmjeren ako su mu grane neuređeni parovi. Vrhovi grafa mogu biti npr. imena zračnih luka, a grane putanje leta zrakoplova između zračnih luka.

Ako usmjereni graf pokazuje od čvora Nj prema Nk, tada se Nj zove roditelj, a Nk dijete. Ako usmjereni graf sadrži grane (Nj, Nk) i (Nj, Ni), tada se Nk i Ni zovu braća jer imaju istog roditelja. Čvor koji nema roditelja u grafu, zove se korijen, a čvor koji nema djece, zove se list ili vrh. Usmjereni graf G = (V,E) sastoji se iz konačnog skupa vrhova i skupa bridova .

www.ckm.ba - Leonardo Miljko

Stablo POSJET ČVORU (VISITING)

Čvor je posjećen kada kontrola programa stigne do tog čvora. Cilj posjeta čvoru stabla je izvršavanje nekih operacija u čvoru (nad čvorom) kao što su: prikaz sadržaja čvora, provjera vrijednosti podataka u čvoru, promjena podataka i sl.

OBILAZAK (TRAVERSING)

Obilazak stabla je posjet svim čvorovima u nekom određenom redoslijedu. U obilasku stabla se mora posjetiti svaki čvor.

RAZINE (LEVELS)

Razina pojedinog čvora je broj koji pokazuje koliko generacija je čvor udaljen od korijena. Ako se pretpostavi da je korijen na razini 1, njegova djeca su na razini 2, njegovi unuci bit će na razini 3 itd. Općenito se može reći za čvor razine n djeca imaju razinu n+1.

www.ckm.ba - Leonardo Miljko

Stablo BINARNO STABLO

U informatici se najčešće koristi binarno stablo. Ako svaki čvor (konačan skup podataka istog tipa) u stablu ima najviše dva djeteta onda se stablo zove binarno (binary tree). Binarno stablo T se sastoji od nijednog, jednog ili više čvorova drugog stupnja. Kod binarnog stabla razlikuju se lijevo TL i desno TR podstablo svakog čvora

www.ckm.ba - Leonardo Miljko

Stablo Crveno-crna stabla

• Binarna stabla često nakon umetanja podataka postaju nebalansirana. Ona bitno umanjuju performanse binarnih stabala.

• Binarna stabla najčešće dobro funkcioniraju kada se podaci unose u slučajnom redoslijedu. Međutim, umetanjem u stablo već sortiranih podataka u rastućem (npr. 5, 12, 45, 67, 89,..) ili opadajućem redoslijedu (npr. 76, 56, 54, 34, 21, 4,...) stvara stablo nebalansirano. Pronaći podatak u nebalansiranom stablu je spor postupak.

• Najčešća tehnika zadržavanja balansiranosti binarnog stabla su crveno-crno stabla.

www.ckm.ba - Leonardo Miljko

Stablo Crveno-crna stabla

Nebalansirano stablo.

Ono na svakoj razini ima samo jedan čvor.

Podaci se u binarno stablo umeću tako što podatak u čvoru desno dijete je veći, a u čvoru lijevo dijete manji nego njihov roditelj. Svaki sljedeći podatak je manji od prethodnog pa je svaki novi čvor desno dijete. Svi čvorovi binarnog stabla su na istoj strani u odnosu na korijen. Takvo stablo je potpuno nebalansirano binarno stablo.

Ako bi se umetnuli podaci sortirani u opadajućem redoslijedu i takvo stablo bi bilo nebalansirano. Svi čvorovi binarnog stabla su lijevo u odnosu na korijen.

Takva stabla su jednostruko povezana lista.

www.ckm.ba - Leonardo Miljko

Stablo Crveno-crna stabla

• Potrebno vrijeme za pronalaženja određenog podatka u djelomično nebalansiranom stablu je kraće nego u potpuno nebalansiranom. To će vrijeme biti između O(N) i O(log2N) u ovisnosti o stupnju nebalansiranosti.

• Cilj je zato oblikovati binarno balansirano stablo ili skoro balansirano, kako bi vrijeme pretraživanja bilo približno O(log2N). Drugim riječima, krajnji cilj je oblikovati stablo u kojem će broj potomaka na lijevoj i desnoj strani u odnosu na korijen biti gotovo jednak. Svaki čvor u stablu mora imati isti broj potomaka u lijevom i desnom podstablu.

www.ckm.ba - Leonardo Miljko

Stablo SVOJSTVA CRVENO-CRNOG STABLA

• Svaki čvor crveno-crnog stabla ima crvenu ili crnu boju. To svojstvo je jednostavno razumjeti.

• Pravila koja održavaju balansiranost stabla:

1. Svaki čvor je ili crven ili crn.

2. Korijen je uvijek crn.

3. Ako je čvor crven, onda njegova djeca moraju biti crna (obrnuto ne mora biti uvijek istinito).

4. Svaki izravni put iz nekog čvora u bilo koji list ispod njega ima jednak broj crnih čvorova.

Posljednje svojstvo uvjetuje da duž svakog puta iz korijena do lista, crveni čvorovi ne mogu biti susjedi. Ali. bilo koji broj crnih čvorova može se pojaviti jedan za drugim. Broj crnih čvorova na svakom putu iz cvora x (ne brojeći čvor x) do bilo kog lista, zove se crna visina čvora i označava sa bh(x) (black height). Crna visina čvora mora biti jednaka za svaku putanju iz korijena do lista binarnog stabla.

www.ckm.ba - Leonardo Miljko

Stablo SVOJSTVA CRVENO-CRNOG STABLA

Dodavanja i brisanja iz crveno-crnog stabla narušavaju crveno-crne svojstva tako da ih je potrebno ponovno uspostavljati. Moguće akcije ako je neko od pravila narušeno:

Promijeniti boju čvorova

Rotacija Balansiranje stabla je postupak promjene fizičkog razmještaja čvorova u stablu. Ako

bi svi čvorovi stabla bili na lijevoj strani korijenskog čvora onda se neki čvorovi moraju pomjeriti na desnu stranu. To postižemo unutarnjom operacijom koja se zove rotacija. Rotacija ima zadatak:

podići određene čvorove i spustiti druge, kako bi se održala balansiranost binarnog stabla

osigurati da balansiranost stabla nije narušena.

Rotacija je lokalna operacija u stablu pretraživanja koja čuva in-order poredak. ključeva.

www.ckm.ba - Leonardo Miljko

Stablo B-STABLA

B-stabla imaju više varijanti (B*, B+) i danas se primjenjuju za organizaciju indeksa u datotekama i primjenjuju se za pohranjivanje podataka na vanjske memorije. Balansirana znači da svako B-stablo s n čvorova ima visinu O(log n). Svaki čvor B-stabla može imati više djece, do nekoliko tisuća (B-stabla nisu isto što i binarna stabla). B-stablo reda m ima sljedeća svojstva :

• a) svi listovi imaju istu dubinu (svi putovi od korijena do lista imaju istu duljinu)

• b) korijen stabla ima najmanje dva djeteta

• c) svaki čvor, osim korijena i listova, ima između i m djece

• d) svaki unutarnji čvor sa (r+1) djece ima r ključeva k1<.........< kr

• e) vrijednost svih ključeva u podstablu s korijenom pi nalaze se između ki i ki+1

• f) svi ključevi u p0 su manji od k1 i svi ključevi u pr su veći od kr. www.ckm.ba - Leonardo Miljko

Stablo B-STABLA

Red B-stabla određuje čvor s najvećim brojem pokazivača (broj strelica koje izlaze iz čvora).

Pretraživanje B-stabla je slično pretraživanju binarnog stabla.

Umetanje novog ključa u B-stablo reda m temelji se na pronalaženje odgovarajućeg mjesta ključu u B-stablu.

Ako u B-stablu treba obrisati (izbaciti) neki ključ, onda se ta operacija ograničava samo na ključeve u čvorovima na najnižoj razini B-stabla.

www.ckm.ba - Leonardo Miljko

Redovi (queue) • Red (queue) je sličan stogu. Razlika je u tome što članovi reda

ulaze na jednom kraju (ulaz), a izlaze na suprotnom kraju (izlaz). Red funkcionira po načelu prvi unutra prvi van (FIFO – First In First Out). Najočitiji primjer reda su ljudi koji čekaju na šalteru banke, blagajni u prodavaonici, rezervaciji avionskih karata i sl. Dok stog

funkcionira po načelu posljednji unutra prvi van ( LIFO - Last In First Out).

• Red se najčešće implementira pomoću pokazivača. Na ulaz i izlaz iz reda pokazuju dva pokazivača: Ulaz i Izlaz. Pokazivač Ulaz pokazuje na posljednji član reda, a pokazivač Izlaz na prvi član reda.

www.ckm.ba - Leonardo Miljko

Redovi (queue) • Članovi reda se dodaju na ulazu (metoda push). Dodati neki član u

red (član D) sastoji se u preusmjeravanju pokazivača. Pokazivač Ulaz nakon dodavanja novog člana ponovno pokazuje na posljednji član reda.

www.ckm.ba - Leonardo Miljko

Redovi (queue) • Brisanje članova reda je ponovno preusmjeravanje pokazivača Izlaz

na slijedeći član reda (B).

www.ckm.ba - Leonardo Miljko

Gomila, hrpa (heap) • Gomile se zasnivaju na pojmu potpunog stabla. Razlika razina

krajnjih čvorova potpunog stabla najviše jedan. Potpuno stablo se popunjava s lijeve strane:

1. svi listovi su na istom nivou ili na dva susjedna nivoa i odnosno i-1

2. svi čvorovi na najnižem nivou se nalaze što je moguće više lijevo.

• U potpunom binarnom stablu mogu nedostajati listovi samo na desnom podstablu.

• Gomila je potpuno binarno stablo sa svojstvom da je podatak u nekom čvoru veći ili jednak podacima u čvorovima svoje djece (ako postoje).

www.ckm.ba - Leonardo Miljko

Osnove raspršenog adresiranja • Rasuta tablica (hash table) je još jedna struktura podataka koja

omogućuje brzo izvršavanje operacija umetanja i pretraživanja. Postoji algoritam pretraživanja brži od binarnog.

• Prvi susret s rasutim tablicama i tvrdnja da se operacije umetanja i pretraživanja izvršavaju u konstantnom vremenu tj. O(1) izgleda pomalo nestvarna. Te su tablice bitno brže od stabla, iako su ona u pretraživanju podataka veoma brza O(log2n). Osim što omogućuju brzo pretraživanje podataka rasute tablice se programiraju jednostavno.

• Rasute tablice pokazuju prednosti osobito u situacijama kada je poznata veličina baze podataka (količina podataka koju treba pohraniti) i podatke ne treba sortirati.

• Pokazuju i neke nedostatke. Ako se tablica popuni, onda prednosti brzo nestaju.

www.ckm.ba - Leonardo Miljko

Osnove raspršenog adresiranja Hash-tablica može imati više oblika.

Prva je u obliku polja. Za hash tablicu u obliku polja polazi se od sljedećih činjenica:

• slog se pohranjuje u polje koje sadrži unaprijed zadan broj članova

• svi slogovi su jednake duljine, a u svaki član polja može pohraniti jedan slog

• ključevi za pretraživanje slogova su pozitivni cijeli brojevi

Drugi oblik je hash tablica koju čini više pretinaca. U svaki pretinac hash tablice može se smjestiti jedna vezana lista. Pretinac u kojem ne postoji ni jedan član liste je prazan (lista ima NULL vrijednost - prazna lista). Kad god treba novi element x umetnuti u i-ti pretinac, tada se i-ta vezana lista produlji jednim članom. Kapacitet jednog pretinca je promjenjiv i neograničen, ali je broj pretinaca u hash tablici unaprijed određen (npr. 10, 1000 ili 10000 ovisno o primjeni). Lista u pretincu ne mora biti sortirana, ali postoji i varijanta sortiranih listi u hash tablici.

www.ckm.ba - Leonardo Miljko

Hvala !

Leonardo Miljko

diplomirani inženjer

elektrotehnike,

računarstva i

informatike

Pitanja?

www.ckm.ba - Leonardo Miljko