You are on page 1of 17

INTERNACIONALNI UNIVERZITET TRAVNIK

FAKULTET POLITEHNIČKIH NAUKA


RAČUNARSTVO I INFORMATIKA

BINARNO STABLO

SEMINARSKI RAD IZ ALGORITAMA I STRUKTURA


PODATAKA

Kandidat: Mentor:
Marija Matijević prof. dr Nevzudin Buzađija
(PT-60/19) ass. Nehad Gaši

Travnik, prosinac 2020. godine


UVOD........................................................................................................................3

STABLA....................................................................................................................4

Pojmovi vezani za stabla........................................................................................4

Obilazak stabla.......................................................................................................5

BINARNO STABLO.................................................................................................7

ČVOR.........................................................................................................................8

Slike........................................................................................................................8

Složenost................................................................................................................8

PRETRAŽIVANJA....................................................................................................9

Karakteristike BST-a..............................................................................................9

Traženje u BST-u...................................................................................................9

Ubacivanje u binarno stablo pretraživanja...........................................................10

Sortiranje binarnog stabla pretraživanja...............................................................10

SAMOBALANSIRAJUĆA STABLA.....................................................................12

ROTACIJE...............................................................................................................13

AVL STABLA.........................................................................................................14

Svojstva AVL stabla.............................................................................................14

Ubacivanje u AVL stablo.....................................................................................14

CRVENO-CRNA STABLA.....................................................................................15

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

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

Danas se računari koriste za apsolutno sve: počevši od vojnih simulacija, preko


fizikalnih i astronomskih simulacija pa sve do komunikacije, medija i astrologije. Prije
svega nekoliko desetaka godina, takva široka upotreba računara bila je nezamisliva. Osim
što danas svi imamo računare, bilo desktop bilo prenosive, oni su nam počeli preuzimati i
džepove – moderni mobilni telefoni u biti su umanjeni računari koji se svojom snagom
mogu mjeriti sa računarima iz prošlih decenija.
Prema Moore-ovom se zakonu svake dvije godine broj operacija koje računar može
izvršiti u sekundi udvostruči. Zbog toga se programi koji već postoje izvršavaju sve brže i
brže bez ikakve izmjene njihovog koda. Ipak, ta ubrzanja su samo konstantna i odnose se
na sve programe. Pretpostavimo da se bavimo programiranjem. Ako želimo da upravo naš
program bude najbrži, nećemo se oslanjati na sirovu računarsku snagu nego ćemo koristiti
brže algoritme i strukture podataka.
Važnost dobrog odabira algoritma opisat ćemo na primjeru sortiranja. Ako nekim
jednostavnim algoritmom (recimo bubble sortom ili selection sortom) pokušamo sortirati
veliku količinu podataka, recimo njih 10,000,000, program će se izvršavati otprilike 4.5
sata. Nasuprot tome, koristimo li nešto složeniji, ali brži algoritam (kao, na primjer, quick
sort ili merge sort), isti ulazni podatci biće sortirani za svega nekoliko sekundi!
Odabir odgovarajuće strukture podataka također je važan. Ako je bitno da možemo
pristupiti bilo kom elementu polja, nećemo koristiti listu, nego obično polje, jer ćemo, u
suprotnom, pristup elementima na kraju liste jako skupo plaćati. U bazama podataka
strukture su također bitne. U manjim bazama podataka, za to se koriste binarna stabla. No,
u najvećim bazama podataka, ne možemo učitati sve podatke, pa onda koristimo posebno
dizajnirane strukture, takozvana B stabla.
Ipak, ponekad zaista nije potrebno mučiti se i kodirati najbolji mogući algoritam i
najbolju strukturu podataka. Ono što je najbitnije u programiranju jeste sposobnost
ocjenjivanja potrebne efikasnosti. Ukoliko shvatimo da je dovoljna i jednostavna
alternativa, čemu se mučiti i pisati nešto što jeste možda brže, ali i traži puno više vremena
za samo pisanje i dizajniranje te je još podložnije greškama?
U ovom seminarskom radu govorit ćemo o strukturama podataka koje zovemo
binarna stabla.
STABLA

Stablo je u računarstvu način predstavljanja hijerarhije. To je struktura podataka


koja vuče analogije s rodoslovnim stablima. Prema definicijama teorije grafova, stablo je
aciklički povezani graf u kojem svaki čvor ima nula ili više djece. Čvor je najmanja
jedinica građe stabla. Na donjim slikama čvorovi su kućice i ono što piše u njima. Crte
koje povezuju dva čvora zovu se veze. Djeca nekog čvora su svi čvorovi koji se nalaze
ispod tog čvora i povezani su sa njime. Roditelj nekog čvora je čvor kome je dani čvor
dijete. Čvor bez djece zove se list. Čvor bez roditelja nazivamo korijenom.

dani u nedjelji

radni dani neradni

Pon Uto Sri Čet Pet Sub Ned

Slika 1 Primjer stabla

Pojmovi vezani za stabla

 Binarno stablo – stablo u kojem svaki čvor ima najviše dvoje djece.
 Braća – čvorovi u stablu koji su djeca istog roditelja. U binarnom stablu čvor nema
više od jednog brata.
 Čvor – osnovna jedinica građe svakog stabla. Povezana je vezama s ostalim
čvorovima.
 Dijete / sin – su svi čvorovi koji su povezani vezom s danim čvorom, a nalaze se na
nižem stupnju hijerarhijske ljestvice, tj. podređeni su danom čvoru.
 Djed – čvor koji je otac oca trenutnog čvora.
 Dubina (visina) čvora – broj čvorova koje moramo proći od korijena stabla do
danog čvora.
 Korijen stabla – čvor koji nema roditelja.
 List – čvor koji nema djece.
 Potpuno balansirano stablo – stablo u kojem su svi listovi na istoj visini.
 Roditelj / otac – čvor kojemu je dati čvor dijete.
 Unuk – svi čvorovi koji su djeca sve djece danog čvora.
 Veza – poveznica koja spaja dva čvora na različitim (uzastopnim) stupnjevima
hijerarhijske ljestvice. U grafičkom obliku zapisa to je crta koja povezuje dva
čvora.
Obilazak stabla

Obilazak stabla je algoritam kojim posjećujemo čvorove stabla, tako da svaki čvor
posjetimo tačno jednom. To je potrebno ako želimo obaviti neku obradu nad svim
čvorovima (npr. ispisati oznake).
Najpoznatiji obilasci su:
 PREORDER
 INORDER
 POSTORDER

Slika 2 Stablo T

Ova tri algoritma zadajemo rekurzivno. Neka je T stablo sastavljeno od korijena r i


pod-stabala T1, T2, . . ., Tk od korijena. Tada:

PREORDER( ) . . . najprije posjećuje r, zatim obilazi T1, zatim obilazi T2, . . ., na


kraju obilazi Tk.

INORDER( ) . . . najprije obilazi T1, zatim posjećuje r, zatim obilazi T2, . . ., na


kraju obilazi Tk.

POSTORDER( ) . . . najprije obilazi T1, zatim obilazi T2, . . ., zatim obilazi Tk, na
kraju posjećuje r.
Razlike između tri obilaska vide se iz primjera:

Slika 3 Princip obilaska stabla


BINARNO STABLO

Binarno stablo je struktura podataka koja se predstavlja kao stablo u kojem niti
jedan čvor nema više od dvoje djece. Također, korijen stabla je samo jedan, tj. na vrhu
smije biti samo jedan element. Slika 1 nije primjer binarnog stabla, dok Slika 4 to jeste.

enciklopedija

nauka kultura

umjetnost historija

Slika 4 Primjer binarnog stabla

U binarnom stablu svaki čvor ima tačno jednog roditelja, s izuzećem korijena
stabla, koji nema roditelja. Nadalje, svaki čvor ima najviše dvoje djece – čvorova kojima je
on roditelj.
ČVOR

Kako bismo se lakše snalazili u ovoj radnji, biće potrebno napraviti neke dogovore
kojih ćemo se pridržavati cijelom radnjom.

U svakom čvoru ćemo pamtiti sljedeće informacije:

• Vrijednost (v)
• Lijevo dijete (l)
• Desno dijete (d)
• Roditelj (roditelj)
• Broj elemenata u podstablu (n)
• Broj istih elemenata (brojač)

Ako su još neki podatci potrebni za neku od opisanih struktura, to će biti posebno
naglašeno u tekstu koji opisuje tu strukturu.

Slike

Čvor ćemo predstavljati sivom bojom, osim ako u tekstu nije drugačije naznačeno.
Veze predstavljamo crnim linijama, osim ako u tekstu nije drugačije naznačeno.

Složenost

Složenost svakog algoritma biće napisana u veliko-O notaciji, osim ako u tekstu
nije drugačije naznačeno. Veliko-O notacija (ili samo O notacija) jeste način zapisivanja
neke funkcije u kojoj zanemarujemo sve osim najjače potencije
.

Slika 5 Primjer
PRETRAŽIVANJA

Binarno stablo traženja (BST – engl. binary search tree) je struktura podataka koja
zadovoljava sljedeća svojstva:

 Strukturirano je kao binarno stablo


 Dva čvora ne sadrže istu vrijednost
 Oba djeteta nekog čvora također su binarna stabla traženja
 U lijevom podstablu nekog čvora svi čvorovi imaju manju vrijednost od tog
čvora
 U desnom podstablu nekog čvora svi čvorovi imaju veću vrijednost od tog
čvora

Karakteristike BST-a

Ova struktura u prosjeku omogućava brzo izvršavanje svih bitnih operacija


(umetanje, pronalaženje, brisanje, sortiranje, itd). Prosječne i najgore moguće brzine
izvršavanja nekih osnovnih operacija navedene su u tablici.

Tablica 1 Karakteristike

Kao što se može vidjeti iz Tablice 1, razlika između prosječnog i najgoreg slučaja
poprilično je velika. To je razlog zašto se često koriste strukture koje imaju bolju složenost
u najgorim slučajevima.

Traženje u BST-u

 Krenemo od korijena stabla


 Ako trenutni čvor ne postoji, vratimo da čvor ne postoji
 Ako je vrijednost trenutnog čvora jednaka traženoj vrijednosti, vratimo
trenutni čvor
 Ako je vrijednost trenutnog čvora manja od tražene vrijednosti, tražena
vrijednost se nalazi u desnom podstablu pa tamo nastavimo traženje.
 U suprotnom tražena vrijednost se nalazi u lijevom podstablu pa tamo
nastavimo traženje
Kod:

nadji(sad, x):*cvor
ako je sad == 0
vrati 0
ako je sad->vrijednost == x
vrati sad
ako je sad->vrijednost < x
vrati nadji(sad->d, x)
vrati nadji(sad->l, x)

Ubacivanje u binarno stablo pretraživanja

U BST čvor se ubacuje na sljedeći način:

 Kreće se od korijena stabla,


 Ako je trenutni čvor prazan, njegova vrijednost se postavlja na traženu vrijednost,
 Ako je vrijednost trenutnog čvora jednaka vrijednosti koja se ubacuje, povećava se
broj istih vrijednosti u trenutnom čvoru i završava se algoritam
 Ako je vrijednost trenutnog čvora manja od vrijednosti koja se ubacuje,
ubacuje se vrijednost u podstablo desnog djeteta trenutnog čvora
 U suprotnom ubacuje se vrijednost u podstablo lijevog djeteta trenutnog čvora.

Kod:

ubaci(sad,x)
ako je sad == 0
sad = novi cvor(x)
izadi van
povecaj sad->n
ako je sad->vrijednost == x
povecaj sad->brojac
izadi van
ako je sad->vrijednost < x
ubaci(sad->d,x)
inace
ubaci(sad->l,x)

Sortiranje binarnog stabla pretraživanja

Ako su svi čvorovi u lijevom podstablu manji, a svi u desnom veći, da bi se


sortirao BST prvo se sortira lijevo podstablo, dodaje se korijen, te se onda sortira
desno podstablo. To predstavlja jednostavnu rekurzivnu implementaciju, koja se dalje
koristi i za sva ostala stabla pretraživanja. Pseudokod predstavlja algoritam koji ispisuje
stablo u sortiranom obliku.
Kod:

ispiši(sad)
ako je sad == 0
izadi van
ispiši(sad->l)
za svaki i∈[1,sad->brojac]
piši sad.vrijednost
ispiši(sad->d)
SAMOBALANSIRAJUĆA STABLA

Samobalansirajuća binarna stabla su binarna stabla koja nam garantuju složenost u


najgorim slučajevima. Kako smo već vidjeli na primjeru binarnog stabla, moguće je da se
dogodi da nam ono nudi linearnu složenost koju smo na početku i željeli izbjeći. Stoga, još
od samog početka računarske nauke, razmatrali su se načini kako osigurati da se sve
operacije izvedu u nekom vremenu koje je bolje od linearnog.

Prvu takvu ideju imali su Gregorij Adelson-Velskij i Evgenij Landis. Oni su 1962.
kreirali stablo koje se balansira po dubini podstabla te je to stablo po njima nazvano AVL
stablom. Kako je to običaj u svim naukama, nije se stalo na tom otkriću, nego se dalje
nastavilo sa radom te su već nakon desetak godina razvijene razne slične strukture
podataka. Danas, upravo zahvaljujući radu tih pionira računarske nauke, postoji cijeli niz
samobalansirajućih binarnih stabala. Uz gore spomenuto AVL stablo, medu jednostavnija
samobalansirajuća binarna stabla ubrajamo crveno-crna stabla i raširena stabla te razne
njihove modifikacije.

Ovo područje se i danas razvija. Najbolji primjer za to su lijevo-naginjuća crveno-


crna stabla. Njih je konstruirao Robert Sedgewick, a ona programeru daju crveno-crno
stablo koje ne mora biti kopija 2-3-4 stabla, nego može biti i kopija 2-3 stabla.

U ovom radu, donosimo kratak pregled određenih varijanti AVL i crveno-crnih


stabala. Za sve njih je karakteristično da su operacije traženja i sortiranja identične onima u
binarnom stablu. Stoga je vrlo korisno imati slične objektno-orijentisane implementacije za
sva stabla jer je tada vrlo jednostavno promijeniti strukturu podatka koju koristimo te se
time bolje prilagoditi potrebi.
ROTACIJE

Osnova svih balansirajućih stabala su rotacije. Za rotacije je karakteristično da ne


kvare svojstva binarnog stabla, to jest u stablu i nakon rotacije vrijedi da su svi manji
elementi u lijevom podstablu, a svi veći u desnom.

Postoji samo jedan tip rotacije koji koriste sva balansirajuća binarna stabla, a to je
rotacija veze roditelja i djeteta. Može se manifestovati na dva načina:

Slika 6 Rotacija udesno

rotacija udesno – rotira se lijevo dijete (A) roditelja (B)

Slika 7 Rotacija ulijevo


AVL STABLA

AVL stablo konstruirali su Gregorij Adelson-Velskij i Evgenij Landis 1962. u radu


„Algoritam za organizaciju podataka“. AVL stablo ima sljedeća svojstva:

 Strukturirano je kao binarno stablo

 Svaki čvor u sebi sadrži i podatak o balansiranosti (tzv. balance factor)

 Svi podaci o balansiranosti moraju biti između -1 i 1; ako nisu vrše se


modifikacije
 U suštini AVL stabla nalazi se podatak o balansiranosti. To je u biti razlika
između visina dva podstabla.

Svojstva AVL stabla

AVL stablo, kao i sva ostala samobalansirajuća binarna stabla nam osigurava brzo
izvršavanje jednostavnih operacija. Vrlo je rigidno balansirano, no o tome više nešto
kasnije.

Ubacivanje u AVL stablo

U AVL stablo ubacuje se jednako kao i u binarno stablo, samo što se na kraju
rekurzije još pozove funkcija popravi. Ta funkcija popravlja stablo tako da vrijedi 3.
svojstvo AVL stabala. Kako bismo si olakšali posao, napravit ćemo funkciju osvježi čvor
koja će za dani čvor ponovo izračunati visinu podstabla i podatak o balansiranosti. Nju
moramo pozvati i na kraju svake rotacije. Funkcija popravi prima čvor te prvo osvježi
podatke u njemu. Nakon toga, ako je podatak o balansiranosti veći od 1 po apsolutnoj
vrijednosti, stablo nije balansirano pa ga treba popraviti. Imamo stoga 2 (u biti 4) slučaja:

1. Podatak je jednak

2. To znači da je lijevo podstablo više od desnog. Tu opet imamo dva slučaja:


a. Podatak u lijevom podstablu je jednak -1. To znači da je lijevo podstablo
lijevog djeteta veće od desnog podstabla lijevog djeteta. Ovakvu situaciju
ćemo riješiti desnom rotacijom veze između trenutnog čvora i njegovog
lijevog djeteta.
b. U suprotnom, znamo da je desno podstablo lijevog djeteta veće od lijevog.
Ovakvu situaciju rješavamo prvo rotacijom veze između lijevog djeteta i
njegovog desnog te trenutnog čvora i njegovog (novog) lijevog djeteta
CRVENO-CRNA STABLA

Crveno-crno stablo je samo balansirajuće binarno stablo pretraživanja. Kreirao ga


je Rudolf Bayer 1972. i nazvao ga simetričnim binarnim B stablom. Današnje ime dali su
mu Guibas i Sedgewick. U svojoj osnovi to je 2-3-4 stablo prikazano u obliku binarnog
stabla. Od tuda vuče svoja svojstva:

 Crveno-crno stablo je binarno stablo


 Svaka veza ima boju, crvenu ili crnu, a boja veze pridružena je djetetu
 Korijen je crn
 Spoljni čvorovi su prazni i crni
 Oba djeteta crvenog čvora su crna
 Broj crnih čvorova na svakom putu od svakog čvora u stablu do svih listova
u njegovom podstablu je jednak

Svojstva od 1. do 4. su jednostavna i o njima ne treba posebno raspravljati.


5. i 6. svojstvo osigurava performanse u najgorim slučajevima te proizlaze iz svojstva 2-3-
4 stabala. Crvene veze su one unutar čvora u 2-3-4 stablu. 5. svojstvo osigurava da se ne
pojavljuju dva crvena čvora za redom. Treba primjetiti da 5. i 6. svojstvo zajedno
osiguravaju da je najduži put u najgorem slučaju najviše 2 puta veći od bilo kojeg drugog
puta u stablu.
ZAKLJUČAK

S obzirom da je računarska nauka novo područje, možemo reći da ona još ne


preuzima sve uloge za koje je sposobna. To se odnosi na sve njene grane, pa tako i na
područje struktura podataka u obliku binarnih stabala. Ipak, njihovu primjenu možemo
naći u bazama podataka kad je podatke moguće učitati u radnu memoriju.

Crveno crna stabla služe kao podloga strukturama koje nalazimo u standardima
modernih programskih jezika.

Problemi koje već gotove strukture rješavaju su u biti dosta teški, a ako i nisu
teški onda su barem naporni. Primjer za to jeste izbacivanje duplih elemenata iz nekog
skupa.
To se može riješiti i sortiranjem, ali je puno prirodnije imati neku strukturu u koju
ćemo ubacivati elemente, a ona neće prihvatati duplikate.
Ovaj rad smatram premalim da sadržajno u potpunosti obradi sve što se i danas zna
o binarnim stablima jer su o njima napisane cijele knjige, pa je stoga nerealno za očekivati
da je moguće sažeti sve informacije na desetak stranica. Ipak, mislim da stvari koje su
odabrane su solidno obrađene te da svako ko se njima bavi ili ga one zanimaju može
shvatiti što je to stablo, kako se ono izgrađuje i ostale bitne informacije iz ovog
seminarskog rada.
LITERATURA

[1.]http://lnr.irb.hr/soya/nastava/spa-skripta.pdf
[2.]https://web.math.pmf.unizg.hr/~stojic/SPAbinarytree.pdf
[3.]https://bs.wikipedia.org/wiki/Binarno_stablo

Popis slika:
Slika 1 Primjer stabla.................................................................................................4
Slika 2 Stablo T..........................................................................................................5
Slika 3 Princip obilaska stabla....................................................................................5
Slika 4 Primjer binarnog stabla..................................................................................6
Slika 5 Primjer............................................................................................................7
Slika 6 Rotacija udesno............................................................................................12
Slika 7 Rotacija ulijevo............................................................................................12

Popis tablica:
Tablica 1 Karakteristike.............................................................................................8

You might also like