Vous êtes sur la page 1sur 43

ALGORITMI I STRUKTURE

PODATAKA
- Stablo -


Prof. Duan Starevi
Literatura
Dejan ivkovi, Osnove dizajna i analize
algoritama, CET, Beograd, 2007
Robert Manger, Miljenko Marui,
Strukture podataka i algoritmi, PMF
Zagreb, skripta, 2007
ppt prezentacije D. Kalpia i kolega sa
FER-a, Zagreb, 2007
Stablo
Mehanizam za ureivanja odnosa izmeu podataka
Za razliku od liste, koja je zasnovana na linearnom
ureenju podataka, stablo se zasniva na hijerarhijskom
ureenju podataka
U sluaju stabla meu podacima postoji odnos
podreeni-nadreeni ili roditelj dete
Primeri stabla:
sadraj knjige koju prouavamo,
porodino stablo,
razne organizacione eme, npr.vojna subordinacija,
direktorijumi i datoteni sistem kod raunara,
struktura programa, glavni program i potprogrami
Stablo
Stabla se mogu posmatrati kao specijalan sluaj grafova,
odnosno slobodna stabla
Mi emo se ograniiti na sluaj ureivanja podataka
posredstvom korenskih stabala
Ureeno stablo, T (eng. tree) je neprazni konani skup
podataka istog tipa koje nazivamo vorovi stabla
Ureeni par vorova naziva se grana, a skup svih grana i
vorova ini stablo T
Za vorove stabla vai:
- postoji jedan poseban vor r, (eng. root), koji se zove
koren stabla T
- ostali vorovi grade konani niz (T1, T2, . . . ,Tk) od 0 ili
vie disjunktnih (manjih) stabala
O stablu
Koren stabla se na slikama obino stavlja
na vrh hijerarhijske strukture (roditelj svim
drugim vorovima)
Stablo je povezano ako polazei od nekog
vora preko grana i vorova moemo stii
do bilo kojeg vora
Stablo je acikliko ako se ne moe
zatvoriti putanja kroz stablo bez ponovog
prolaenja kroz element putanje
Ilustracija stabla T
Rekurzivna definicija stabla
Manja stabla T1, T2, . . .,Tk se zovu podstabla
korena r
Koreni r1, r2, . . ., rk od T1, T2, . . .,Tk su deca
od r, a r je njihov roditelj
Primetimo da koren nema roditelja, a svaki od
preostalih vorova ima tano jednog roditelja
Ureenost stabla se ogleda u tome to meu
podstablima postoji linearno ureenje (zna se
koje je prvo, koje drugo,. . .)
Sadraj knjige prikazan kao stablo
Primer stabla kod aritmetikih izraza
Struktura aritmetikog izraza (a + b)*(a + sqrt(c)) se moe prikazati
stablom
vorovi bez dece predstavljaju operande, a ostali vorovi raunske
operacije
Ureenost stabla je vana ako su operacije nekomutativne


Oznaeno stablo
Stablo iz poslednjeg primera je oznaeno stablo, tj.
svakom voru je pridruen dodatni podatak koji zovemo
oznaka
Razlikujemo ime vora od oznake vora
Ime vora slui za identifikaciju (u istom stablu ne mogu
postojati dva vora s istim imenom!)
Oznaka vora nosi dodatnu informaciju (dva vora mogu
imati istu oznaku!)
Uoimo da su pojmovi:
stablo, oznaka, vor (u kontekstu stabla) redom
analogni pojmovima:
lista, element, pozicija (u kontekstu listi)
Put, predak i potomak
Niz vorova i1, i2, . . . , i
m
takvih da je i
p
roditelj
od i
p+1
(p = 1, . . . ,m 1) zove se put od i1 do im.
Duina tog puta je m 1.
Za svaki vor razliit od korena postoji
jedinstveni put od korena stabla do tog vora
Ako postoji put od vora i do vora j tada je i
predak od j, a j je potomak od i
Znai, koren je predak za sve ostale vorove u
stablu, a oni su njegovi potomci
Nivo, visina, list, unutranji vor, braa
Nivo s je skup vorova stabla sa svojstvom da
jedinstveni put od korena do tog vora ima
duinu s
Nivo 0 ini sam koren (po dogovoru),
Nivo 1 ine deca korena, nivo 2 njihova deca, itd.
Visina stabla je maksimalni neprazni nivo
List je vor stabla bez dece
Unutranji vor je vor koji nije list
Deca istog vora zovu se braa
Apstraktni tip podataka TREE
Jedna od moguih definicija ATP TREE
node . . . bilo koji tip (imena vorova).
U skupu node uoavamo jedan poseban element LAMBDA (koji
slui kao ime nepostojeeg vora),
labeltype . . . bilo koji tip (oznake vorova),
TREE . . . podatak tipa TREE je (ureeno) stablo iji vorovi su
podaci tipa node (meusobno razliiti i razliiti od LAMBDA).
Svakom voru je kao oznaka pridruen podatak tipa labeltype,
MAKE ROOT(l,&T) . . . funkcija pretvara stablo T u stablo koje se
sastoji samo od korena s oznakom l, (labela). Vraa vor koji
slui kao koren (tj. njegovo ime).
INSERT CHILD(l,i,&T) . . . funkcija u stablo T ubacuje novi vor s
oznakom l, tako da on bude prvo po redu dete vora i.
Funkcija vraa novi vor. Nije definisana ako i ne pripada T
Dijagram za INSERT CHILD( )
Dijagram za INSERT SIBLING( )
INSERT SIBLING(l,i,&T) . . . funkcija u stablo T ubacuje novi vor s
oznakom l, tako da on bude idui po redu brat vora i.
Funkcija vraa novi vor. Nije definisana ako je i koren ili ako i ne
pripada T.

Ostale definicije ATP TREE
DELETE(i,&T) . . . funkcija izbacuje list i iz stabla T.
Nije definisana ako je i koren, ili ako i ne pripada T ili ako
i ima dece,
ROOT(T) . . . funkcija vraa koren od stabla T.
FIRST CHILD(i,T) . . . funkcija vraa prvo po redu dete
vora i u stablu T.
Ako je i list, vraa LAMBDA. Nije definisana ako i ne
pripada T.
NEXT SIBLING(i,T) . .funkcija vraa idueg po redu
brata vora i u stablu T.
Ako je i zadnji brat, tada vraa LAMBDA. Nije definisana
ako i ne pripada T.
Ostale definicije ATP TREE
PARENT(i,T) . . . funkcija vraa roditelja vora i u stablu
T.
Ako je i koren, tada vraa LAMBDA. Nije definisana ako i
ne pripada T.
LABEL(i,T) . . . funkcija vraa oznaku vora i u stablu T.
Nije definisana ako i ne pripada T.
CHANGE LABEL(l,i,&T) . . . funkcija menja oznaku vora
i u stablu T, tako da ta oznaka postane l.
Nije definirana ako i ne pripada T

Obilazak stabla
Obilazak stabla je vaan algoritam kojim
poseujemo vorove stabla, tako da svaki vor
posetimo tano jednom
To je potrebno ako elimo obaviti neku obradu
nad svim vorovima (npr. ispisati oznake)
Primetimo da svaki obilazak uspostavlja jedno
linearno ureenje izmeu vorova stabla
Najpoznatiji naini moguih obilazaka su:
PREORDER( ), INORDER( ), POSTORDER( )
Obilasci stabla
Ova tri algoritma zadajemo rekurzivno: Neka je
T stablo sastavljeno od korena r i podstabala T1,
T2, . . . ,Tk od korena,
PREORDER( ) . . . najpre poseuje r, zatim
obilazi T1, zatim obilazi T2, . . ., na kraju obilazi
Tk.
INORDER( ) . . . najpre obilazi T1, zatim
poseuje r, zatim obilazi T2, . . ., na kraju obilazi
Tk.
POSTORDER( ) . . . najpre obilazi T1, zatim
obilazi T2, . . ., zatim obilazi Tk, na kraju
poseuje r.
Primeri obilazaka
Primer obilazaka
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


Implementacija stabla na osnovu veze
vor ->roditelj
Zasniva se na tome da svakom voru eksplicitno
zapiemo njegovog roditelja
Mogue su razne varijante, s obzirom na razne
prikaze skupa vorova
Uzimamo (bez velikog gubitka optosti) da su
imena vorova celi brojevi 0, 1, 2, . . ., n 1, gde
je n broj vorova
Stablo prikazujemo poljima
i-te elije polja opisuju i-ti vor i u njima pie
oznaka tog vora, odnosno kursor na roditelja
Kursor root pokazuje gdje se nalazi koren stabla
Implementacija stabla na osnovu veze
vor -> roditelj
Implementacija stabla na osnovu veze
vor - > (prvo dete, idui brat)
Zasniva se na tome da svakom voru
eksplicitno zapiemo njegovo prvo dete, te
njegovog idueg brata
Veza od vora do deteta, odnosno brata,
moe se realizovati pomou pointera ili
pomou kursora
Prikazaemo varijantu s kursorima

Implementacija stabla na osnovu veze
vor - > (prvo dete, idui brat)
Imena vorova su celi brojevi
Slobodnu memoriju zauzmemo globalnim poljem
SPACE[]
Polje predstavlja zalihu elija od kojih e se
graditi stabla
i-ta elija opisuje i-ti vor
Stablo je prikazano kao povezana struktura
elija
Stablo se poistoveuje s kursorom na koren
Implementacija stabla na osnovu veze
vor - > (prvo dete, idui brat)
Razna stabla s kojima radimo troe elije
iz istog (jedinstvenog) polja SPACE[]
Sve slobodne elije (koje ne pripadaju ni
jednom stablu) povezane su u povezanu
listu, iji poredak pokazuje globalni kursor
avail.
Slobodne elije se veu kursorima
smetenim npr. u komponenti next sibling.

Dijagram implementacija stabla na osnovu
veze vor - > (prvo dete, idui brat)
Binarno stablo
Binarno stablo je jednostavnije i pravilnije
struktuiran objekt od opteg stabla, pa ga je
jednostavnije prikazati u raunaru
Binarno stablo T je konaan skup podataka istog
tipa koje zovemo vorovi
Za binarno stablo T vredi:
T je prazan skup (prazno stablo) , ili
postoji istaknuti vor r koji se zove koren od T , a
ostali vorovi grade ureeni par (TL, TR) disjunktnih
(manjih) binarnih stabala.
Ilustracija binarnog stabla

Binarno stablo
Ako T sadri koren r, tada se binarna stabla TL i
TR zovu levo i desno podstablo
Koren od TL (ako postoji) je levo dete od r,
koren od TR (ako postoji) je desno dete od r, a r
je njihov roditelj
Primenjuju se isti algoritmi obilaska stabla
Zapazimo da binarno stablo nije specijalni sluaj
ureenog stabla. Naime:
- binarno stablo moe biti prazno,
- ako vor u binarnom stablu ima samo jedno dete, tada
nije svejedno da li je to levo ili desno dete
Sluaj dva razliita binarna stabla
Primeri binarnih stabala
Struktura ranije prikazanog aritmetikog izraza, sastavljenog od
binarnih operacija, moe prikazati binarnim stablom
Ako su znakovi kodirani nizovima bita, onda se postupak
dekodiranja moe prikazati binarnim stablom:
Prevoenje ureenog stabla u
binarno stablo
Bilo koje ureeno stablo moe se interpretirati kao
binarno stablo, na osnovu veza vor -> prvo dete i vor -
>idui brat
Apstraktni tip podataka BTREE
node . . . bilo koji tip (imena vorova)
U skupu node uoavamo jedan poseban element
LAMBDA (koji slui kao ime nepostojeeg vora).
labeltype . . . bilo koji tip (oznake vorova).
BTREE . . . podatak tipa BTREE je binarno stablo iji
vorovi su podaci tipa node (meusobno razliiti i razliiti
od LAMBDA)
Svakom voru je kao oznaka pridruen podatak tipa
labeltype.
MAKE NULL(&T) . . . funkcija pretvara binarno stablo T u
prazno binarno stablo.<<<
EMPTY(T) . . . funkcija vraa istinu ako i samo ako je T
prazno binarno stablo.
Apstraktni tip podataka BTREE
CREATE(l,TL,TR,&T) . . . funkcija stvara novo binarno stablo T,
kojem je levo podstablo TL, a desno podstablo TR (TL i TR moraju
biti disjunktni)
Koren od T dobiva oznaku l.
LEFT SUBTREE(T,&TL), RIGHT SUBTREE(T,&TR) . . . funkcija
preko parametra TL odnosno TR vraa levo odnosno desno
podstablo binarnog stabla T
Nije definisana ako je T prazno.
INSERT LEFT CHILD(l,i,&T), INSERT RIGHT CHILD(l,i,&T) . . .
funkcija u binarno stablo T ubacuje novi vor s oznakom l, tako da
on bude levo odnosno desno dete vora i.
Funkcija vraa novi vor. Nije definisana ako i ne pripada T ili ako i
ve ima dotino dete.
DELETE(i,&T) . . . funkcija izbacuje list i iz binarnog stabla T.
Nije definisana ako i ne pripada T ili ako i ima dece.
Apstraktni tip podataka BTREE
ROOT(T) . . . funkcija vraa koren binarnog stabla T.
Ako je T prazno, vraa LAMBDA.
LEFT CHILD(i,T), RIGHT CHILD(i,T) . . . funkcija vraa levo
odnosno desno dete vora i u binarnom stablu T.
Ako i nema dotino dete, vraa LAMBDA. Nije definisana ako i ne
pripada T.
PARENT(i,T) . . . funkcija vraa roditelja vora i u binarnom stablu T.
Ako je i koren, tada vraa LAMBDA. Nije definisana ako i ne pripada
T.
LABEL(i,T) . . . funkcija vraa oznaku vora i u binarnom stablu T.
Nije definisana ako i ne pripada T.
CHANGE LABEL(l,i,&T) . . . funkcija menja oznaku vora i u stablu
T, tako da ta oznaka postane l.
Nije definirana ako i ne pripada T.
Implementacija binarnog stabla
pomou pointera
Svakom voru eksplicitno zapiemo njegovo levo i desno dete
Veza se moe zapisati pomou kursora ili pomou pointera
Prikazaemo varijanta pomou pointera


Implementacija binarnog stabla
pomou pointera
Svaki vor prikazujemo jednom elijom
vor je zato jednoznano odreen pointerom na
tu eliju.
Binarno stablo se gradi kao struktura elija
povezanih pointerima
Binarno stablo poistoveujemo s pointerom na
koren
Prazno stablo je prikazano pointerom NULL.
Ukoliko koristimo funkciju PARENT(), tada je
zgodno u eliju dodati jo jedan pointer
Implementacija binarnog stabla
pomou pointera
Implementacija potpunog
binarnog stabla pomou polja
Potpuno binarno stablo je graeno od n
vorova, s imenima 0, 1, 2, . . ., n 1.
Pritom vredi:
- levo dete vora i je vor 2i + 1 (ako je 2i
+ 1 > n 1 tada vor i nema levo dete);
- desno dete vora i je i vor 2i + 2 (ako je
2i+ 2 > n 1 tada i nema desno dete)
Implementacija potpunog
binarnog stabla pomou polja
potpuno binarno stablo s n = 12 vorova
Implementacija potpunog
binarnog stabla pomou polja
ALGORITMI I STRUKTURE
PODATAKA
- Stablo -
Prof. Duan Starevi

Vous aimerez peut-être aussi