Algoritmi i strukture podataka dr.sc. Edin Pjanić
Fakultet elektrotehnike Univerziteta u Tuzli
1/22
Pregled predavanja
Stabla
definicija i terminologija
Binarna stabla
Uređena binarna stabla – Binary Search Tree (BST)
pretraga
prolazak kroz stablo – traversing
pre-order, in-order, post-order
dodavanje čvora
Fakultet elektrotehnike Univerziteta u Tuzli
2/22
Stabla
Stablo: usmjerena aciklična struktura povezanih čvorova. usmjerena: Ima vezu samo u jednom smjeru
aciklična: ako krenemo od jednog čvora, nema puteva koji vode do tog istog čvora odakle smo krenuli. Osim toga, do svakog čvora se može doći samo na jedan način, jednim putem.
Primjeri stabala:
porodično stablo
organizaciona struktura firme i sl.
umjetna inteligencija: stablo odluka
kompajleri: stablo parsiranja...
Stabla imaju dobre performanse pri dodavanju, uklanjanju i pretraživanju elemenata.
Fakultet elektrotehnike Univerziteta u Tuzli
3/22
Stabla - primjeri
File system Računanje izraza: a= (b+c)*d; = a
* + b
d c
Fakultet elektrotehnike Univerziteta u Tuzli
4/22
Terminologija
čvor (node): objekat koji sadrži podatak (element) i veze do svoje djece
korijen (root): čvor na vrhu stabla. Nema roditelja. list (leaf): čvor koji nema djece. grana (branch):
roditelj (parent):
čvor koji ima vezu do trenutnog čvora. Svaki čvor, osim korijena, ima tačno jednog roditelja.
dijete (child):
svaki unutrašnji čvor koji nije niti korijen niti list.
čvor na koji trenutni čvor ima vezu
brat (sibling):
čvor koji ima zajedničkog roditelja sa trenutnim čvorom
Fakultet elektrotehnike Univerziteta u Tuzli
5/22
Terminologija
čvor (node): svi kružići na slici desno
korijen (root): 1 list (leaf): 4, 5, 6, 7 grana (branch): 2, 3
korijen (root)
1
Posmatrajmo čvor 2
roditelj (parent): 1
dijete (child): 4, 5
brat (sibling): 3
2 4
3 5
čvor Fakultet elektrotehnike Univerziteta u Tuzli
6
7
veza 6/22
Terminologija podstablo (subtree): stablo sa čvorovima do kojih se dolazi preko jedne veze od trenutnog čvora. Svaki čvor se može smatrati korijenom podstabla kome pripadaju njegova djeca, unuci itd.
visina (height): dužina najdužeg puta od trenutnog čvora do najudaljenijeg lista nivo ili dubina (level): put od korijena do nivo 1 datog čvora
korijen visina = 3
1 2
nivo 2
nivo 3 Fakultet elektrotehnike Univerziteta u Tuzli
4
3 5
6
7 7/22
Još jedna definicija stabla (rekurzivna) 1.Stablo je kolekcija čvorova 2.Stablo može biti prazno 3.Ako nije prazno, stablo se sastoji od jednog čvora (korijen, root) i nula ili više podstabala na čije korijene su spojene veze od korijena trenutnog stabla.
Fakultet elektrotehnike Univerziteta u Tuzli
8/22
Stablo – moguća implementacija
element veze do djece
element veze do djece
Fakultet elektrotehnike Univerziteta u Tuzli
9/22
Binarna stabla
Stablo kod kojeg čvor može imati najviše 2 djece
Dubina je prosječnog binarnog stabla je mnogo manja od N, mada u najgorem slučaju može iznositi N-1
Fakultet elektrotehnike Univerziteta u Tuzli
10/22
Binarno stablo - implementacija
Binarno stablo je moguće implementirati pomoću niza:
Fakultet elektrotehnike Univerziteta u Tuzli
11/22
Binarno stablo - implementacija
Binarna stabla se uglavnom implementiraju pomoću povezanih čvorova. Takav čvor ima element u koji se smješta podatak i dvije veze (pokazivači) na dvoje svoje djece (lijevo, desno). lijevo
element
desno
podaci struct CvorStabla { ElemTip element; CvorStabla *lijevo; CvorStabla *desno; }; Fakultet elektrotehnike Univerziteta u Tuzli
12/22
Binarno stablo - primjer
Više čvorova se veže u stablo na sljedeći način. korijen
left
data right 42
left
data right 59
left
data right 27 left
data right 86
Fakultet elektrotehnike Univerziteta u Tuzli
13/22
Uređena binarna stabla – (binary search trees - BST)
Kod ovog stabla su vrijednosti elemenata unutar čvorova poredani tako da se operacije ubacivanja, uklanjanja i pretraživanja mogu izvoditi efikasno. Ključ: dio elementa koji je kriterij pretraživanja Za svaki čvor X, svi ključevi u lijevom podstablu su manji od vrijednosti ključa čvora X, a svi ključevi u desnom podstablu su veći od ključa u X.
Fakultet elektrotehnike Univerziteta u Tuzli
14/22
Uređena binarna stabla – (binary search trees - BST)
BINARNO STABLO
NIJE BINARNO STABLO jer je 7 > 6 a nalazi se u lijevom podstablu čvora 6
Fakultet elektrotehnike Univerziteta u Tuzli
15/22
Uređena binarna stabla – (binary search trees - BST) Dva stabla koja sadrže iste podatke
Prosječna dubina čvora je O(logN) Najveća dubina čvora je O(N)
Fakultet elektrotehnike Univerziteta u Tuzli
16/22
Operacije nad BST binarnim stablom
Traženje čvora sa datom vrijednošću elementa Prolazak kroz stablo (npr. ispis svih elemenata) Ubacivanje novog elementa (čvora) Uklanjanje postojećeg elementa (čvora)
Fakultet elektrotehnike Univerziteta u Tuzli
17/22
Pretraživanje u binarnom stablu Primjer traženja čvora sa vrijednošću 9:
Tražimo 9: 1. Poredimo 9:15 (korijen) => idi u lijevo podstablo 2. Poredimo 9:6 => idi u desno podstablo 3. Poredimo 9:7 => idi u desno podstablo 4. Poredimo 9:13 => idi u lijevo podstablo 5. Poredimo 9:9 => PRONAĐENO!
Ovo je rekurzivan proces.
Složenost: O(visina stabla) Fakultet elektrotehnike Univerziteta u Tuzli
18/22
Prolazak kroz BST – engl. traversal
Prolazak kroz sve elemente stabla. Ovaj proces se koristi u mnogim algoritmima sa stablima. Najčešći načini prolaska kroz stablo (prema redoslijedu procesiranja podatka u čvoru): pre-order: procesira se čvor pa onda lijevo pa desno podstablo tog čvora in-order: procesira se lijevo podstablo pa onda čvor pa desno podstablo post-order:
procesira se lijevo pa desno podstablo pa onda čvor
Fakultet elektrotehnike Univerziteta u Tuzli
19/22
Prolazak kroz BST – primjer korijen
12 5 2
18 9
15
19
pre-order: 12 5 2 9 in-order: 2 5 9 12 post-order: 2 9 5 15
18 15 19
Fakultet elektrotehnike Univerziteta u Tuzli
15 18 18
19 19 12 20/22
Prolazak kroz BST – "trik"
12
Nacrtati putanju oko stabla. Kad prođete pored čvora sa prave strane, procesirati ga.
korijen
Brzo generisanje rezultata prolaska kroz stablo:
pre-order: sa lijeve strane in-order: odozdo post-order: sa desne strane
pre-order: 12 5 2 9 in-order: 2 5 9 12 post-order: 2 9 5 15
Fakultet elektrotehnike Univerziteta u Tuzli
5
18
2
9
18 15 19
15 18 18
15
19
19 19 12
21/22
Ubacivanje čvora
Proći kroz stablo kao kod pretraživanja Ako je nađen X ne raditi ništa (ili treba izvršiti neko ažuriranje, zavisno od dizajna) Ako X nije nađen, ubaciti X na zadnjem čvoru pretrage. Primjer ubacivanja broja 13
Složenost: O(visina stabla) Fakultet elektrotehnike Univerziteta u Tuzli
22/22