Professional Documents
Culture Documents
Binarno Stablo Nasljeđivanja
Binarno Stablo Nasljeđivanja
Binarno Stablo Nasljeđivanja
I CIKLUS: I GODINA
Seminarski rad
I CIKLUS: I GODINA
Seminarski rad
Potpis studenta:
_______________
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.
– Njihov naziv implicira vezu sa stablima (drvećem) u prirodi ili porodičnim stablima
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
- 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:
– 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:
• Definicija 3:
Stablo sa korenom je konačan skup K od jednog ili više čvorova takvih da je:
- 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
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
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
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.
• 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
7
Dva stabla koja su slična
8
Dva stabla koja su slična, ali nisu ekvivalentna
• Čvor d je dijete čvoru k ako je d korijen podstabla od čvora k. Čvor k se naziva roditelj.
• 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.
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.
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
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.
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.
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:
int podatak;
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:
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
17