Binarno Stablo Nasljeđivanja

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 17

SVEUČILIŠTE/UNIVERZITET „VITEZ“ VITEZ

FAKULTET INFORMACIJSKIH TEHNOLOGIJA

STUDIJ I CIKLUSA; GODINA STUDIJA:

I CIKLUS: I GODINA

SMIJER: INFORMACIJSKE TEHNOLOGIJE

BINARNO STABLO NASLJEĐIVANJA

Seminarski rad

Travnik, septembar 2019. godine


SVEUČILIŠTE/UNIVERZITET „VITEZ“ VITEZ

FAKULTET INFORMACIJSKIH TEHNOLOGIJA

STUDIJ I CIKLUSA; GODINA STUDIJA:

I CIKLUS: I GODINA

SMIJER: INFORMACIJSKE TEHNOLOGIJE

BINARNO STABLO NASLJEĐIVANJA

Seminarski rad

IZJAVA: Ja Ahmed Kasumović student Sveučilišta/Univerziteta „Vitez“ Vitez, Indeks


broj:078-18/RIIT odgovorno i uz moralnu i akademsku odgovornost izjavljujem da sam ovaj rad
izradio potpuno samostalno uz korištenje citirane literature i pomoć profesora odnosno
asistenata.

Potpis studenta:

_______________

STUDENT: Ahmed Kasumović

PREDMET: Strukture podataka i algoritmi

PROFESOR: dr. Lazo Roljić

ASISTENT: mr. Mahir Zaimović


Sadržaj

1. Definicije stabla ....................................................................................................................... 5

1.1. Terminologija ................................................................................................................... 6

1.2. Predstavljanje stabala ....................................................................................................... 6

1.2.1. Grafičko predstavljanje ............................................................................................. 6

1.2.2. Memorijska reprezentacija ........................................................................................ 7

1.3. Slična i ekvivalentna stable .............................................................................................. 7

2. Termini vezani za stabla .......................................................................................................... 9

3. Binarna stabla ........................................................................................................................ 10

3.1. Operacije umetanja i brisanja ......................................................................................... 10

3.2. Primjer umetanja novog čvora. ...................................................................................... 11

3.3. Obilazak binarnog stabla ................................................................................................ 11

3.4. Balansiranje stabla.......................................................................................................... 12

3.5. Binarna stabla pretrage ................................................................................................... 12

4. Implementacija binarnog stabla ............................................................................................. 14

ZAKLJUČAK ............................................................................................................................... 16

LITERATURA ............................................................................................................................. 17
UVOD

Stablo predstavlja važnu strukturu podataka, veoma pogodnu za modeliranje objekata koji
oslikavaju hijerarhijsku organizaciju. Tako se stablom mogu predstavljati rodbinski i nasljedni
odnosi u porodici (genealoško stablo), položaj ljudi na funkcijama, organizacija jedinica u vojsci,
složeni matematički izrazi, skeletoni sportskih takmičenja itd. Očigledno sve ove aplikacije
pokazuju prirodu grananja ili širenja organizacije po nivoima od vrha ka dnu.

Stabla su nelinearne strukture podataka

– Predstavljaju najvažnije nelinearne strukture koje se vrlo često koriste u računarstvu

– Odnos između elemenata nije linearan

– Imaju razgranatu ili hijerarhijsku strukturu elemenata

– Njihov naziv implicira vezu sa stablima (drvećem) u prirodi ili porodičnim stablima

– Većina terminologije potiče iz ovih izvora

4
1. Definicije stabla

• Definicija 1:

Struktura podataka B=(K,R); K-skup čvorova I R - binarna relacija prethođenja nad skupom K,
predstavlja stablo ako R zadovoljava sledeće uslove:

- Postoji samo jedan čvor r, koga nazivamo koren, kome ne prethodi ni jedan drugi čvor

- Svaki čvor, izuzev korena, ima samo jednog prethodnika

- Za svaki čvor k, k≠r, postoji niz čvorova k0 , k1 , k2 , - kn = k (n≥1 i=1,n) koji predstavljaju
listu, tj. (ki-1 , ki ) € R i=1,n

• Definicija 2:

– Stablo se može definisati kao poseban oblik nelinearnog grafa:

– Linearni graf je skup čvorova i skup relacija (nazivaju se linije grafa) koji opisuju veze između
čvorova. Linearni graf je povezan ako je svaki par čvorova u grafu povezan linijom.

– Stablo se onda može definisati kao povezan graf koji ne sadrži petlje, odnosno ako važi:

– Bilo koja dva čvora u stablu su povezana linijom

– Stablo sa n čvorova ima n-1 linija

• Definicija 3:

– Stablo se može rekurzivno definisati kao:

Stablo sa korenom je konačan skup K od jednog ili više čvorova takvih da je:

– Postoji jedan specijalni čvor koji se naziva koren stabla

– Preostali čvorovi (isključujući koren) se mogu podeliti u m ≥ 0 skupova K1, K2,

- Km, čiji je presek prazvan skup, a koji svaki predstavlja stablo za sebe. Stabla K1, K2, -Km se
nazivaju podtsbla korena

5
– Ova rekurzivna definicija je veoma pogodna za predstavljanje stabala u memoriji računara i
obavljanje operacija nad stablima.

1.1. Terminologija

Grane spajaju čvorove.

Ako se uoči neki čvor od kojeg se dalje granaju podstabla, onda se on smatra roditeljem čvorova
koji predstavljaju korijene tih podstabala, a oni njegovom djecom. Ulazni stepen je broj grana
koje ulaze u čvor, a izlazni stepen je broj grana koje izlaze iz čvora. Čvorovi sa nultim izlaznim
stepenom nazivaju se listovi. Visina ili dubina stabla se određuje kao maksimalna vrijednost
nivoa listova u stablu i to je najveća udaljenost nekog lista u stablu od korijena. Za dva stabla se
kaže da su slična ako imaju istu strukturu, što znači da imaju isti broj čvorova i grana, kao i istu
topologiju. Za dva stabla se kaže da su ekvivalentna ako su slična, a odgovarajući čvorovi imaju
isti sadržaj. Uređeno stablo je stablo u kojem podstabla svakog čvora čine uređen skup (inače je
neuređeno). Poziciona stabla stepena m su ona stabla kod kojih je svakom podstablu nekog čvora
pridružena jedinstvena pozicija označena rednim brojem od 1 do m

1.2. Predstavljanje stabala

1.2.1. Grafičko predstavljanje

Grafički se stablo najčešće predstavlja kao graf sa korijenom na vrhu, njegovom djecom ispod
njega i tako sve do listova na dnu (za razliku od stabala u prirodi). Ova predstava najprirodnije
odgovara terminu „stablo“. Pored toga, može da se koristi i predstava preko zagrada. Prvo se
navodi korijen, a onda, u zagradi, njegova podstabla, koja se, zatim, na isti način u ugniježdenim
zagradama predstavljaju preko svojih podstabala. Redoslijed pojavljivanja zagrada može da
određuje i poredak djece u uređenim stablima.

6
1.2.2. Memorijska reprezentacija

Za predstavljanje stabala u memoriji se najčešće koristi ulančana reprezentacija. U tom načinu,


čvor se predstavlja elementom koji, pored informacionog dijela (sadržaja), ima i pokazivače na
djecu. Broj pokazivača može biti i promjenljiv, u zavisnosti od broja djece. Mnogo pogodnije je,
zbog alokacije i dealokacije prostora, da broj pokazivača po čvoru bude fiksan i jednak stepenu
stabla, da se iniciraju samo pokazivači na postojeća podstabla, dok su ostali prazni.

Pored ulančanih, postoje i sekvencijalne reprezentacije. S obzirom da svaki čvor sem korijena
ima samo jednog roditelja, stablo sa n čvorova se najprostije može predstaviti vektorom V[1:n]
tako da svakom čvoru odgovara jedan element koji sadrži indeks roditelja toga čvora. Vrijednost
prvog elementa koji odgovara korijenu je 0.

Treća, najvažnija sekvencijalna reprezentacija, također koristi vektor V[1:n] za smještanje


čvorova stabla. Na prvo mjesto se smješta korijen, a zatim njegova djeca po njihovom
pozicionom poretku, tako što se za nedostajuća podstabla ostave prazna mjesta. Zatim se nižu
čvorovi iz drugog nivoa i tako redom.

1.3. Slična i ekvivalentna stabla

• Slična stabla

– Za dva stabla se kaže da su slična ako imaju istu strukturu, tj. tačnije ako su oba prazna ili su
sva njihova podstabla slična

• Ekvivalentna stabla

– Dva stabla su ekvivalentna ako su slična i imaju identičan informacioni sadržaj u


odgovarajućim čvorovima

7
Dva stabla koja su slična

Dva stabla koja nisu slična

8
Dva stabla koja su slična, ali nisu ekvivalentna

2. Termini vezani za stabla

• Terminalni čvor ili list je čvor koji nema podstabla

• Čvor d je dijete čvoru k ako je d korijen podstabla od čvora k. Čvor k se naziva roditelj.

• Stepen čvora je broj podstabala datog čvora

• Šuma je skup stabala koja ne preklapaju

• Nivo čvora je 1 ako je koren ili jednak broju čvorova koji se prodju na putu od korena do datog
čvora.

• Visina (ili dubina) stabla je maksimalni nivo na kome se nalazi neki čvor stabla

9
3. Binarna stabla

Binarno stablo se rekurzivno definiše kao konačan skup čvorova koji je ili prazan ili se sastoji od
korijena sa dva posebna podstabla, lijevim i desnim, koja su, također, binarna stabla. Ono je po
svojoj definiciji poziciono stablo.

3.1. Operacije umetanja i brisanja

Aktivnosti pri operacijama umetanja i brisanja zavise od ukazanog mjesta u stablu gdje se
ubacuje novi čvor ili sa kojeg se briše čvor.

10
3.2. Primjer umetanja novog čvora.

Ako se čvor ubacuje kao list, onda jedino treba njegovom adresom popuniti odgovarajući
pokazivač u čvoru roditelja. Ako se novi čvor ubacuje između nekog čvora (roditelja) i njegovog
djeteta, onda novi čvor preuzima na toj strani od roditelja odgovarajući pokazivač na dijete, a
roditelj sada ukazuje na novi čvor.

Kod brisanja lista iz čvora jedino treba u njegovom roditelju postaviti odgovarajući prazan
pokazivač. Ako čvor koji se briše ima jedno dijete, pokazivač u čvoru njegovog roditelja koji je
ranije ukazivao na čvor koji se briše, treba da se preusmjeri tako da pokazuje na dijete čvora koji
se briše. Ukoliko čvor koji treba da se briše ima oba djeteta, situacija se usložnjava.

3.3. Obilazak binarnog stabla

U primjenama koje koriste binarna stabla često se javlja potreba sa pristupom svakom čvoru
stabla u cilju neke obrade. U takvim slučajevima čvorovima treba pristupiti u sistematskom
poretku i obraditi ih samo po jednom. Ovakva operacija se naziva obilaskom ili prolazom stabla.
Kada se obilazi binarno stablo, svaki čvor i njegova podstabla se tretiraju na isti način i na njih se
primijenjuju ista pravila. Konvencija da se lijevo podstablo uvijek posjećuje prije desnog daje tri
uobičajena metoda obilaska: preorder, inorder, postorder. Sva tri načina su važna i imaju svoje
praktične primjene. Oni se definišu na rekurzivan način:

11
Preorder:

posjeti se korijen obiđe se prvo lijevo podstablo na preorder način obiđe se desno podstablo na
preorder način

Inorder:

obiđe se lijevo postablo na inorder način posjeti se korijen obiđe se desno podstablo na inorder
način

Postorder:

obiđe se lijevo podstablo na postorder način obiđe se desno podstablo na postorder način posjeti
se korijen

3.4. Balansiranje stabla

Za binarno stablo se kaže da je balansirano ako za svaki čvor važi da se broj čvorova u njegovom
lijevom i desnom podstablu ne razlikuje za više od 1. Da bi se dobilo još i stablo minimalne
visine za dati broj čvorova, jasno je da čvorove treba distribuirati ravnomjerno na lijevo i desno
podstablo, maksimalno popunjavajući sve nivoe osim posljednjeg.

3.5. Binarna stabla pretrage

Binarno stablo pretrage, poznato i kao sortirano binarno stablo, je binarno stablo zasnovano na
čvorovima, gdje svaki čvor ima uporedljivi ključ (sa dodijeljenom vrijednošću) i zadovoljava
uslov da je vrijednost svakog čvora veća od vrijednosti svakog čvora u njegovom lijevom
podstablu i manja od vrijednosti svakog čvora u njegovom desnom podstablu. Svaki čvor ima
najviše dva djeteta. Svako dijete mora da bude ili list (nema nijedno dijete) ili korijen još jednog
binarnog stabla pretrage. Najveća prednost binarnog stabla pretrage je da ostaje uređeno, što
omogućava brže vrijeme pretrage nego većina drugih struktura.

12
Primjer binarnog stabla pretrage.

Za binarno stablo pretrage također vrijedi:

• Prosječna dubina stabla je O(log N)


• Maksimalna dubina stabla je O(N)
• Algoritam za pretragu ima složenost O(dubina stabla)
• Algoritmi za pronalaženje minimuma i maximuma imaju složenost O(dubina stabla)
• Algoritam za umetanje ima složenost O(dubina stabla)
• Algoritam za brisanje elementa ima složenost O(dubina stabla)

Binarno stablo pretrage je fundamentalna struktura podataka pomoću koje se konstruišu


apstraktnije strukture podataka kao npr. skupovi, multiskupovi i asocijativni nizovi.

Oblik binarnog stabla pretrage zavisi samo od reda ubacivanja elemenata, i može biti
degenerisano.

Kada ubacujemo ili tražimo element u binarnom stablu pretrage, ključ svakog posjećenog čvora
mora da se uporedi sa ključem elementa kog ubacujemo ili tražimo.

Ključevi u binarnom stablu pretrage mogu biti dugački, što može uticati na vremensku složenost.

13
4. Implementacija binarnog stabla

U C-u se binarno stablo može implementirati korićenjem strukture i pokazivača na sledeći način:

typedef struct Cvor{

int podatak;

Cvor *levi, *desni; }Cvor;

Ovom strukturom opisan je jedan čvor u binarnom stablu koji sadrži podatak i pokazivače na
lijevo i desno podstablo. Binarno stablo se deklariše kao pokazivač na koren:

Cvor *koren = NULL; // kreiranje praznog binarnog stabla

Najčešće operacije nad uređenim binarnim stablom su:

• dodavanje elemenata na odgovarajuće mesto u uređeno binarno stablo


• ispis elemenata binarnog stabla
• pronalazak elementa u binarnom stablu
• brisanje pojedinačnog elemenata binarnog stabla
• brisanje binarnog stabla i oslobađanje memorijskih resursa

Većina ovih operacija implementira se korišćenjem rekurzije. Na sledećem listingu prikazana je


funkcija za ubacivanje novog elementa u uređeno binarno stablo. Argumenti su pokazivač na
korijen stabla u koji se ubacuje element i element koji se ubacuje, a povratna vrijednost je
pokazivač na korojen izmjenjenog stabla.

Ubacivanje elementa implementirano je korišćenjem rekurzije. Sličaj za izlazak iz rekurzije je


kada imamo prazno stablo u koje dodajemo element (koren==NULL) i tada kreiramo novi čvor
kome će i levo i desno podstablo biti prazna stabla, a podatak je jednak argumentu funkcije.
Ukoliko stablo nije prazno potrebno je da pronađemo mesto za novi element. Ako je podatak
manji od vrednosti korena, novi čvor se ubacuje u levo podstablo, inače u desno. Ubacivanje se
realizuje rekurzivnim pozivom, tako što se za vrednost podstabla postavlja vrednost stabla koje
se dobija rekurzivnim pozivom funkcije ubaciCvor za odgovarajuće lijevo odnosno desno

14
podstablo. Na ovaj način se rekurzija ponavlja dok se ne dođe do slučaja da se novi podatak
ubacuje kao list na odgovarajuće mesto u binarnom stablu.

Na sledećem listingu prikazana je funkcija koja ispisuje elemente binarnog stabla i to redom po
veličini. Prvo se rekurzivno ispiše levo podstablo (u kom su elementni manji od korena), zatim
se ispiše koren, a zatim rekurzivno desno podstablo (u kom su elementi veći od korena).

15
ZAKLJUČAK

Nešto složeniji, ali ujedno i bolji način spremanja podataka jest unutar binarnog stabla. Elementi
se prilikom unosa automatski sortiraju po veličini. Osnovno pravilo je da manji elementi od
trenutnog idu u „lijevu“ granu dok veći ili jednaki elementi idu u „desnu“ granu. Najbolja
varijanta popune stabla jest potpuna popuna stabla gdje se dobiva ista dubina stabla na svim
granama. Najlošija je kad za unos dobijemo već sortirane elemente jer u tom slučaju konačno
stablo izgleda poput liste. Dubina stabla je u tom slučaju jednaka broju elemenata u stablu. Unos
i pretraživanje elemenata su optimalni koliko je i stablo optimalno razgranato, tj. koliko blizu
potpunom stablu je korišteno stablo. Najlošiji slučaj je jednak dubini stabla. Pri brisanju
elemenata iz stabla se koriste odreñeni algoritmi za ubrzanje rada. Najjednostavniji modeli
brisanja su kad se brišu listovi ili čvorovi sa samo jednim djetetom. Pri usporedbi efikasnosti
struktura podataka sa 1000 spremljenih elemenata polje je dalo najbolje rezultate (slika 5.6).
Sortirana lista je davala malo bolje rezultate pri mijenjanju do 40% elemenata odjednom, ali
nakon toga joj efikasnost veoma brzo opada. Binarno stablo je dalo najlošije rezultate iako se
može primijetiti da mu efikasnost opada daleko sporije od liste te da daje bolje rezultate pri više
od 80% mijenjanih elemenata.

16
LITERATURA

• INTERAKTIVNI POSTUPCI NAD OKTALNOM STRUKTUROM GRAFIČKIH


PODATAKA, Davor Čaktaš, Sveučilište Zagreb
• http://www.puskice.org/download/strukture_podataka_i_algoritmi/strukture_by_sky.pdf
• https://bs.wikipedia.org/wiki/Binarno_stablo
• https://petlja.org/biblioteka/r/lekcije/uvod-u-programiranje/nedelja_12

17

You might also like