Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Poglavlje 3:
Stabla
Sastavio: Robert Manger
23.10.2020
Sveučilište u Zagrebu
PMF – Matematički odsjek
STRUKTURE PODATAKA I
ALGORITMI
Predavanja 2020/2021
Sadržaj Poglavlja 3
3.1. (Uređeno) stablo
3.2. Binarno stablo
3.3. k-stablo
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
2
Svojstva i primjene stabla (1)
• U listi smo imali linearni uređaj podataka; stablo
se zasniva na hijerarhijskom uređaju.
• (Uređeno) stablo T je neprazni konačni skup
podataka istog tipa koje zovemo čvorovi. Pritom:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
3
– postoji jedan istaknuti
čvor r koji se zove
korijen od T ;
– ostali čvorovi grade
konačni niz (T1, T2, ...,Tk)
od 0 ili više disjunktnih
(manjih) stabala.
Svojstva i primjene stabla (2)
• Ovo je bila rekurzivna definicija.
• T1, T2, . . .,Tk zovu se pod-stabla korijena r.
• Korijeni r1, r2, . . .,rk od T1, T2, . . .,Tk su djeca od
r, a r je njihov roditelj.
• Primjenom rekurzije za svaki čvor možemo
ustanoviti čije je on dijete te čiji je roditelj.
– Korijen nema roditelja
– Ostali imaju po jednog roditelja.
• Uređenost stabla se očituje u tome što među
pod-stablima postoji linearan uređaj.
• Uređeno stablo prikazujemo dijagramom.SPA-3 STRUKTURE PODATAKA I
ALGORITMI
4
Svojstva i primjene stabla (3)
• Primjeri uređenih stabala.
– Sadržaj knjige, struktura
države, porodično stablo,
organizacija Sveučilišta.
– Građa C programa:
• globalne varijable, funkcije
• lokalne varijable, naredbe.
– Građa aritmetičkog izraza
(a + b)*(a + c) :
• Čvorovi bez djece su operandi,
ostali su računske operacije.
• Uređenost je važna ako su
operacije nekomutativne.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
5
Svojstva i primjene stabla (4)
• U zadnjem primjeru imamo označeno stablo:
– Svakom čvoru pridružen je dodatni podatak - oznaka.
– Razlikujemo čvor (njegovo ime) od oznake.
• Ime čvora (u kružiću) služi za identifikaciju - ne mogu
postojati dva čvora s istim imenom.
• Oznaka čvora (izvan kružića) služi za informaciju - dva čvora
mogu imati istu oznaku.
• Niz čvorova i1, i2, . . . , im takvih da je prethodni u
nizu roditelj idućeg zove se put od i1 do im .
– Duljina tog puta je m − 1.
– i1 je predak od im , a im je potomak od i1.
– Za svaki čvor ≠ korijena postoji jedinstveni put od
korijena do tog čvora.SPA-3 STRUKTURE PODATAKA I
ALGORITMI
6
Svojstva i primjene stabla (5)
• Razina (nivo) s je skup čvorova stabla sa
svojstvom da put od korijena do tog čvora ima
duljinu s.
– Razinu 0 čini sam korijen.
– Razinu 1 čine djeca korijena,
– Razinu 2 njihova djeca, itd.
• Visina stabla je maksimalna neprazna razina.
• List je čvor bez djece.
• Unutrašnji čvor je čvor koji nije list.
• Djeca istog čvora zovu se braća.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
7
Svojstva i primjene stabla (6)
• Apstraktni tip podataka Tree
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
8
Svojstva i primjene stabla (7)
• Apstraktni tip podataka Tree (nastavak)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
9
Svojstva i primjene stabla (8)
• Apstraktni tip podataka Tree (drugi nastavak)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
10
Obilazak stabla (1)
• Obilazak je algoritam kojim “posjećujemo”
čvorove stabla, svaki čvor točno jednom.
• Najpoznatiji obilasci su: Preorder( ),
Inorder( ), Postorder( ).
• Neka je T stablo sastavljeno od korijena r i pod-
stabala T1, T2, . . . ,Tk . 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.SPA-3 STRUKTURE PODATAKA I
ALGORITMI
11
Obilazak stabla (2)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
12
• Čvorove stabla na slici algoritmi
obilaze u sljedećem redoslijedu:
– Preorder( ):
0,1,2,4,7,8,5,9,3,6
– Inorder( ):
1,0,7,4,8,2,9,5,6,3
– Postorder( ):
1,7,8,4,9,5,2,6,3,0
Obilazak stabla (3)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
13
• Algoritmi obilaska mogu se
zapisati kao potprogrami
(neovisni o implementaciji).
• U potprogramu ispod
operacija posjećivanja čvora
pretvorena je u ispis oznake:
Implementacija stabla na osnovi
veze od čvora do roditelja (1)
• Svakom čvoru eksplicitno zapišemo roditelja.– Uzimamo da su imena čvorova cijeli brojevi 0, 1, 2, ...,
n − 1, gdje je n broj čvorova.
– Stablo prikazujemo poljima.
– i-te klijetke polja opisuju i-ti čvor i u njima piše oznaka
tog čvora odnosno kursor na roditelja.
– Kursor root pokazuje gdje se nalazi korijen stabla.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
14
Implementacija stabla na osnovi
veze od čvora do roditelja (2)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
15
Implementacija stabla na osnovi
veze od čvora do roditelja (3)
• Ako je MAXNODES veći od stvarnog broja
čvorova, neke klijetke su slobodne.
– Možemo ih označiti i prepoznati tako da im upišemo neku nemoguću vrijednost (npr. T[i].parent==i).
• Struktura podržava TrParent() i TrLabel().
– Ostale operacije zahtijevaju pretraživanje cijelog polja.
• Mana je da se ne pamti redoslijed braće - stablo
je zapravo neuređeno.
– Ipak, možemo uvesti umjetno pravilo da su braća
poredana po svojim imenima (indeksima).
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
16
Implementacija stabla na osnovi
veze od čvora do roditelja (4)
• Ova implementacija je dobra ako: – nema mnogo ubacivanja/izbacivanja čvorova,
– nije potrebna uređenost stabla, – pretežno se koriste TrParent( ), TrLabel( ).
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
17
• Primjer funkcije:
Implementacija stabla na osnovi
veze od čvora do djeteta i brata (1)
• Svakom čvoru eksplicitno zapišemo njegovo
prvo dijete, te njegovog idućeg brata.– Veze realiziramo pomoću kursora.
– Imena čvorova su cijeli brojevi.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
18
Implementacija stabla na osnovi
veze od čvora do djeteta i brata (2)
– Polje space[]predstavlja “zalihu” klijetki od kojih će se
graditi stabla.
– i-ta klijetka opisuje i-ti čvor. Stablo je prikazano kao
vezana struktura klijetki.
– Stablo se poistovjećuje s kursorom na korijen.
– Razna stabla s kojima radimo troše klijetke iz istog (jedinstvenog) polja space[].
– Sve slobodne klijetke (koje ne pripadaju ni jednom
stablu) povezane su u vezanu listu, čiji početak pokazuje globalni kursor avail.
– Slobodne klijetke se vežu kursorima smještenim npr. u komponenti nextsibling.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
19
Implementacija stabla na osnovi
veze od čvora do djeteta i brata (3)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
20
Implementacija stabla na osnovi
veze od čvora do djeteta i brata (4)
• Sve operacije osim TrParent( ) mogu se
efikasno implementirati. Na primjer:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
21
Implementacija stabla na osnovi
veze od čvora do djeteta i brata (5)
• Implementacija je pogodna kad
– ima puno ubacivanja/izbacivanja čvorova,
– ili kad se radi s više stabala koja se spajaju u
veća,
– ili kad se intenzivno koriste veze od roditelja
prema djeci.
• Ako je također potrebna i operacija TrParent( ), tada možemo u klijetku
polja space[] dodati i kursor na roditelja.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
22
Sadržaj Poglavlja 3
3.1. (Uređeno) stablo
3.2. Binarno stablo
3.3. k-stablo
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
23
Svojstva i primjene bin stabla (1)
• Umjesto stabala, u računarstvu se još češće
pojavljuju jednostavnije građena binarna stabla.
• Binarno stablo T je konačan skup podataka
istog tipa koje zovemo čvorovi. Pritom vrijedi:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
24
– T je prazan skup (prazno
stablo) , ili
– postoji jedan istaknuti čvor r
koji se zove korijen od T , a
ostali čvorovi grade uređeni
par (TL,TR) disjunktnih
(manjih) binarnih stabala.
Svojstva i primjene bin stabla (2)
• TL i TR zovu se lijevo i desno pod-stablo.
• Korijen od TL odnosno TR (ako postoji) je lijevo
odnosno desno dijete od r, a r je njihov roditelj.
• Primjenom rekurzije za svaki čvor možemo
ustanoviti čije je on dijete te čiji je on roditelj.
– Korijen je bez roditelja, ostali imaju točno 1 roditelja.
– Broj djece nekog čvora može biti 0, 1 ili 2.
• Ostala terminologija je ista kao kod stabla.
• Binarno stablo crta se na isti način kao uređeno.
• Primjenjuju se isti algoritmi obilaska.SPA-3 STRUKTURE PODATAKA I
ALGORITMI
25
Svojstva i primjene bin stabla (3)
• Binarno stablo nije specijalni slučaj uređenog:
– binarno stablo može biti prazno,
– ako čvor u binarnom stablu ima samo jedno dijete,
tada nije svejedno je li to lijevo ili desno dijete.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
26
Svojstva i primjene bin stabla (4)
• Primjeri binarnih stabala.
– Ako je aritmetički izraz sastavljen od binarnih operacija,
njegova se građa može prikazati binarnim stablom.
– Znakovi su kodirani nizovima bitova. Tada se postupak
dekodiranja može prikazati binarnim stablom:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
27
Svojstva i primjene bin stabla (5)
• Primjeri binarnih stabala (nastavak).
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
28
– Donošenje
odluke
opisuje se
stablom
odlučivanja.
Ako su
odgovori na
sva pitanja u
tom postupku
oblika da/ne,
stablo je
binarno.
Svojstva i primjene bin stabla (6)
• Primjeri binarnih stabala (drugi nastavak).
– Uređeno stablo može se interpretirati kao binarno, na
osnovi veza čvor prvo dijete i čvor idući brat.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
29
– Binarna stabla služe za prikaz skupova, te se
pojavljuju u algoritmima za sortiranje.
Svojstva i primjene bin stabla (7)
• Apstraktni tip podataka BinaryTree.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
30
Svojstva i primjene bin stabla (8)
• Apstraktni tip podataka BinaryTree (nastavak).
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
31
Svojstva i primjene bin stabla (9)
• Apstraktni tip podataka BinaryTree (drugi
nastavak).
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
32
Impl bin stabla pomoću pointera (1)
• Svakom čvoru eksplicitno zapišemo njegovo
lijevo i desno dijete. Veza se može zapisati
pomoću kursora ili pomoću pointera.
• Promatramo varijantu pomoću pointera:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
33
oznaka
lijevo
dijete
desno
dijete
Impl bin stabla pomoću pointera (2)
• Svaki čvor prikazujemo jednom klijetkom. Čvor
je jednoznačno određen pointerom na klijetku.
• Binarno stablo se gradi kao struktura klijetki
povezanih pointerima. Binarno stablo
poistovjećujemo s pointerom na korijen.
• Prazno stablo je prikazano pointerom NULL.
• Ako koristimo funkciju BiParent( ), tada u
klijetku treba dodati još jedan pointer koji
pokazuje prema roditelju.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
34
Impl bin stabla pomoću pointera (3)
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
35
Impl bin stabla pomoću pointera (4)
• Sve operacije iz a.t.p. BinaryTree osim BiDelete( ) i BiParent( ) mogu se
efikasno implementirati, tako da im vrijeme
izvršavanja bude O(1). Primjerice:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
36
Impl potpunog bin st pomoću polja (1)
• Potpuno binarno stablo sastoji se od n
čvorova, s imenima 0, 1, 2, ..., n − 1. Pritom vrijedi:
– lijevo dijete čvora i je čvor 2i+1 (ako je 2i+1 > n−1 tada
čvor i nema lijevo dijete);
– desno dijete čvora i je čvor 2i+2 (ako je 2i+2 > n−1
tada i nema desno dijete).
• Na svim razinama osim zadnje postoje svi
mogući čvorovi. Čvorovi na zadnjoj razini
“gurnuti” su na lijevu stranu.
• Numeriranje ide s razine 0 na razinu 1, razinu 2,
itd., s lijeva na desno.SPA-3 STRUKTURE PODATAKA I
ALGORITMI
37
Impl potpunog bin st pomoću polja (2)
• Potpuno binarno stablo s n = 12 čvorova:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
38
Impl potpunog bin st pomoću polja (3)
• Potpuno binarno stablo treba zamišljati kao
objekt sa statičkom građom.
– Ne namjeravaju se primjenjivati operacije poput BiCreate( ), BiLeftSubtree( ),
BiRightSubtree( ), jer rezultat više ne bi bio
potpuno binarno stablo.
– Umjesto toga potrebno je “manevrirati” po već
zadanom stablu te čitati ili mijenjati oznake čvorova.
– Dopušta se ubacivanje/izbacivanje čvorova na
desnom kraju zadnje razine.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
39
Impl potpunog bin st pomoću polja (4)
• Potpuno binarno
stablo može se
prikazati u
računalu
pomoću polja. – i-ta klijetka polja
sadrži oznaku
čvora i.
– Imamo kursor
koji pokazuje
zadnji čvor n−1.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
40
Impl potpunog bin st pomoću polja (5)
• Potrebne su definicije:
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
41
• Manevriranje po potpunom binarnom stablu:
- Korijen je u 0-toj klijetki.
- Lijevo i desno dijete čvora iz i-te klijetke nalaze se u
(2i+1)-oj i (2i+2)-oj klijetki (ako one postoje).
- Roditelj čvora iz i-te klijetke je u (i-1)/2 – toj klijetki.
Impl potpunog bin st pomoću polja (6)
• Prikaz se donekle može proširiti na binarna stabla
koja nisu potpuna.– Binarno stablo nadopunimo “lažnim” čvorovima, pa ga
zatim prikazujemo kao da je potpuno.
– Metoda se često ne isplati jer troši previše memorije.
SPA-3 STRUKTURE PODATAKA I
ALGORITMI
42