Professional Documents
Culture Documents
ASP Stabla
ASP Stabla
Stabla
28.5.2007
Svojstva stabla
postoji poseban vor koji se naziva korijen (root) ostali vorovi su podijeljeni u n disjunktnih podskupova T1..Tn, od kojih je svaki stablo. T1..Tn se nazivaju i podstabla
Primjer:
a b d h i
28.5.2007
c e f j g k
2 / 26
Osnovni pojmovi - I
a je korijen stabla stupanj vora a je 2 (stupanj je broj podstabala nekog vora, npr. vor c
ima stupanj 3)
a b d h i e c f j g k
skup {h,i,e,f,j,k} je skup krajnjih vorova (listova) korijeni podstabala nekog vora su djeca tog vora (npr. vorovi e,f,g su djeca od c), a taj vor nazivamo roditeljem (npr. g je roditelj od j).
z
28.5.2007
3 / 26
Osnovni pojmovi - II
a stupanj stabla je maksimalni stupanj b c od svih vorova tog stabla, u ovom primjeru 3 d e f g razina (level) nekog vora odreuje h i j k se iz definicije da je korijen razine 1, a da su razine djece nekog vora razine n jednaki n+1 dubina (depth) stabla je jednaka maksimalnoj razini nekog vora u stablu
28.5.2007
4 / 26
Binarno stablo - I
binarno stablo je stablo koje se sastoji od nijednog, jednog ili vie vorova drugog stupnja
z z
kod binarnog stabla razlikujemo lijevo i desno podstablo svakog vora nazivlje uvedeno za stabla koristi se i kod binarnih stabala
Koso stablo
a b
Potpuno stablo
a c e f g
b d h
28.5.2007
c d
Algoritmi i strukture podataka
i
6 / 26
Binarno stablo - II
Razina 1 2 3 k k+1 2k-1
1 2 4 2k-1+1 2i i 2i+1
28.5.2007
3
i/2
6 i+1
... ...
7 2k 2k-1
2k
2k+1
7 / 26
iz definicije binarnog stabla slijede zakljuci da je: z maksimalni broj vorova na k-toj razini jednak je 2k-1 z maksimalni broj vorova binarnog stabla dubine k jednak je 2k -1 za k>0 z stablo koje je visine k i ima 2k -1 elemenata naziva se puno (full) binarno
stablo
z
binarno stablo s n vorova dubine k je potpuno (complete) ako i samo ako njegovi vorovi odgovaraju vorovima punog binarnog stabla dubine k koji su numerirani od 1 do n
-
kao posljedica, razlika razina krajnjih vorova potpunog stabla najvie je jedan.
28.5.2007
8 / 26
potpuno se binarno stablo jednostavno prikazuje jednodimenzionalnim poljem, bez podataka za povezivanje i koristi se pravilima za odreivanje odnosa u stablu
z
problem kod prikaza stabla statikom strukturom polje je i teko umetanje i brisanje vorova jer ti zahtjevi mogu traiti pomicanje puno elemenata
Koso stablo Potpuno stablo
a b
d j k
e l m n o p
a b c d e f g h i
28.5.2007
9 / 26
Koso stablo
a b
Potpuno stablo
a b c d e f g h i
l m n o p
28.5.2007
10 / 26
9 10 11 12 13 14 15 16
a b c d e f g h i
l m n o p
roditelj(i)= i/2 za i 1; kada je i=1, vor i je korijen pa nema roditelja lijevo_dijete(i)=2*i ako je 2*i n; kad je 2*i>n vor i nema lijevog djeteta desno_dijete(i)=2*i+1 ako je 2*i+1n; kad je 2*i+1>n vor i nema desnog djeteta
ovako se mogu prikazati sva binarna stabla, ali se tada memorija ne koristi uinkovito
z
najgori sluaj su kosa (skewed) stabla koja koriste smo k lokacija od 2k -1 lokacija predvienih za to stablo
28.5.2007 11 / 26
ovakva struktura se esto upotrebljava i zadovoljava veinu potreba ponekad se dodaje pokaziva na roditelja
struct cvor{ tip podatak; struct cvor *lijevo_dijete; struct cvor *desno_dijete; /* ako treba: */ struct cvor *roditelj; };
Algoritmi i strukture podataka 28.5.2007
12 / 26
a b c
28.5.2007
13 / 26
a b c e i
28.5.2007 14 / 26
d h
Algoritmi i strukture podataka
k-stabla
28.5.2007
15 / 26
Stablo za traenje
moe se oblikovati stablo za traenje (sortirano, ureeno stablo) po nekom od podataka (kljuu) koji se upisuju u pojedini vor. Upis novog vora poinje pretragom od korijena stabla. Usporeuje se ve upisani podatak u vorovima s novim podatkom:
z
ako je klju novog vora manji od kljua upisanog vora usporedbe, nastavlja se usporedba u lijevom podstablu ako je klju novog vora vei ili jednak od kljua upisanog vora usporedbe, nastavlja se usporedba u desnom podstablu ako upisani vor nema podstablo u traenom smjeru, novi vor postaje dijete upisanog vora
SortiranoStablo
Algoritmi i strukture podataka 28.5.2007 16 / 26
struct node* dodaj(struct cvor* cvor, tip elem) { if (cvor == NULL) { return(NoviCvor(elem)); inae, spusti se rekurzivno niz stablo, } lijevo ili desno else { if (elem <= cvor->podatak) cvor->lijevo = dodaj(cvor->lijevo, elem); else cvor->desno = dodaj(cvor->desno, elem); return(cvor); vrati nepromijenjeni pokaziva na } }
Algoritmi i strukture podataka 28.5.2007
vor
28.5.2007
18 / 26
Pretraivanje stabla
int trazi (struct cvor* cvor, int trazeno) { if (cvor == NULL) { vrati element ako je pronaen return 0; } else { if (trazeno == cvor->podatak) return 1; else { if (trazeno < cvor->podatak) return(trazi(cvor->lijevo, trazeno)); else return(trazi(cvor->desno, trazeno)); } } inae se spusti niz odgovarajue stablo }
Algoritmi i strukture podataka 28.5.2007 19 / 26
Obilazak stabla
postoje 3 standardna naina obilaska stabla kojima se osigurava da je svaki vor bio "posjeen"
z z z
lijevi vor korijen desni vor korijen lijevi vor desni vor lijevi vor desni vor korijen
radi se o rekurzivnim postupcima koji seu do listova stabla, a zatim povratci iz rekurzije predstavljaju kretanje prema korijenu stabla poseban sluaj inorder: ispis strukture stabla z desni vor korijen lijevi vor SortiranoStablo dohvat podataka iz stabla s izraunavanjem ProsjekUStablu
28.5.2007 20 / 26
Zadaci za vjebu
ispisati broj vorova u stablu ispisati dubinu stabla ispisati vrijednost najmanjeg i najveeg elementa stabla napraviti i ispisati zrcalnu kopiju zadanog stabla za dva zadana stabla, napisati jesu li identina ili ne
28.5.2007
21 / 26
Zadaci za vjebu
Na magnetskom disku u slijednoj formatiziranoj datoteci studenti nalaze se zapisi sljedeeg sadraja:
matini broj 8 znamenki 40+1 znakova prezime i ime 10*1 znamenka ocjene napisati program koji e formirati novu neformatiranu datoteku index u kojoj e podaci radi brzog dohvata po matinom broju biti organizirani kao ureeno binarno stablo napisati program koji za zadani matini broj, redni broj ocjene i ocjenu aurira zapise u datoteci index sve dok je matini broj vei od nule.
28.5.2007
22 / 26
Zadaci za vjebu
Napisati funkciju za ispis elementa memorijski rezidentnog ve oblikovanog sortiranog binarnog stabla u ije vorove su upisani
z z
Stablo je sortirano po cijeni artikala; lijevi jeftiniji, desni skuplji. Ulazni argument je korijen stabla. Ispis treba biti poredan po cijeni od najjeftinijeg do najskupljeg artikla.
28.5.2007
23 / 26
Zadaci za vjebu
treba nacrtati sortirano binarno stablo (lijevi manji, desni vei) ako je stablo popunjavano redom kako su dolazili podaci poredati ulazne podatke tako da nastupi neki od najgorih sluajeva nacrtati binarno stablo koje predstavlja najbolji sluaj koliko je apriorno vrijeme izvoenja za pronalaenje pojedinog vora za b) koliko je apriorno vrijeme izvoenja za pronalaenje pojedinog vora za c)
28.5.2007
24 / 26
Zadaci za vjebu
U neko memorijski rezidentno binarno stablo upisane su ifre duljine 10+1 znakova. Napisati funkciju koja e provjeriti postojanje neke zadane ifre. Ulazni argumenti su korijen stabla i zadana ifra, a izlaz je 0 ako podatak ne postoji, a 1 ako postoji. U pojedinom voru stabla upisana je ifra i pokazivai na lijevi i na desni vor. U neko memorijski rezidentno sortirano binarno stablo (lijevi vor manja vrijednost, desni vor vea vrijednost) upisani su matini brojevi (cijeli broj kao klju) i teine osoba. Napisati funkciju koja e izraunati ukupnu teinu osoba iji se podaci nalaze upisani u stablu. Prototip funkcije je:
float tezina (struct cvor* korijen);
28.5.2007
25 / 26
Zadaci za vjebu
U neko memorijski rezidentno binarno stablo upisani su matini brojevi (cijeli broj) i teine osoba (realni broj). Napisati funkciju koja e izraunati prosjenu teinu osoba iji se podaci nalaze upisani u stablu, naenu maksimalnu teinu i broj upisanih osoba. Prototip funkcije je:
float prosjek (struct cvor *korijen, float *tezina, int *broj, float *maxtez);
U memoriji je oblikovano binarno stablo koje sadri ifru (cijeli broj) i naziv predmeta (15+1 znakova). Treba ispisati nazive predmeta tako da bude vidljiv oblik stabla. Razina vora neka odgovara broju praznina od lijevog ruba. Prototip funkcije je:
void pisi (cvor *glava, int razina);
28.5.2007 26 / 26