Upload
ivan-ivanic
View
215
Download
2
Embed Size (px)
DESCRIPTION
Strukture podataka i algoritmi
Citation preview
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi 2012/2013
STRUKTURE PODATAKA I ALGORITMI
uređeno binarno stablo
obilasci
provjera
rotacije
balansiranost
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ OBILASCI
• Obilazak u bilo kojoj strukturi podataka podrazumijeva proces “posjećivanja” svakog čvora u strukturi točno jednom, a s ciljem utvrđivanja vrijednosD u tom čvoru.
• U vezanoj lisD ili nizu, obilazak je uvijek isD
-‐ kreni od prvog čvora
-‐ posjeD ga
-‐ pređi na idući čvor
-‐ i tako sve dok ne dođemo do kraja
• U stablu je, baš radi prirode same strukture, obići čvorove moguće na više načina.
2
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ OBILASCI
• Počevši s korijenom stabla, moguća su tri različita koraka
-‐ posjeDD čvor
-‐ oDći do lijevog djeteta
-‐ oDći do desnog djeteta
• Ovisno o tome razmatraju li se prvo potomci po dubini (sin/unuk/praunuk) ili potomci na istoj razini (braća) razlikujemo pretraživanje
-‐ po dubini
-‐ po širini
• Pretraživanje po dubini se još dodatno dijeli na
-‐ preorder -‐ korijen se razmotri prije lijevog djeteta
-‐ inorder -‐ korijen se razmotri nakon lijevog a prije desnog djeteta
-‐ postorder -‐ korijen se razmotri nakon lijevog i nakon desnog djeteta
3
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ OBILASCI
• Preorder
-‐ posjeD
-‐ idi lijevo
-‐ idi desno
• Inorder
-‐ idi lijevo
-‐ posjeD
-‐ idi desno
• Postorder
-‐ idi lijevo
-‐ idi desno
-‐ posjeD
4
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ OBILASCI
• Pretraživanje po širini podrazumijeva da se razmotre svi čvorovi na istoj razini prije prelaska na nižu razinu
• Također podrazumijeva upotrebu pomoćne strukture podataka, i to najčešće stoga, a zgodno je i prvo odrediD visinu/dubinu stabla
5
levelorderAux(tree, level) begin if tree is null, return;
if level is 1, then print(tree.root); else if level greater than 1, then levelorderAux(tree.left_subtree, level-1); levelorderAux(tree.right_subtree, level-1); endif end levelorder(tree) begin for d = 1 to height(tree) levelorderAux(tree, d); endfor end
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ PROVJERA
• Uređeno binarno stablo po svojoj definiciji
-‐ ne dozvoljava unos duplikata
-‐ u lijevoj grani podrazumijeva čvor “manji” od korijena
-‐ u desnoj grani podrazumijeva čvor “veći” od korijena
• Kako provjeriD za neko binarno stablo je li ono uređeno?
6
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ PROVJERA
• Uređeno binarno stablo po svojoj definiciji
-‐ ne dozvoljava unos duplikata
-‐ u lijevoj grani podrazumijeva čvor “manji” od korijena
-‐ u desnoj grani podrazumijeva čvor “veći” od korijena
• Kako provjeriD za neko binarno stablo je li ono uređeno?
-‐ ako je minimum lijeve grane veći od trenutnog korijena -‐ ne valja
-‐ ako je maksimum desne grane manji od trenutnog korijena -‐ ne valja
-‐ ako lijevo podstablo nije uređeno -‐ ne valja
-‐ ako desno podstablo nije uređeno -‐ ne valja
7
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ ROTACIJA
• Rotacija je operacija na binarnom stablu koja mijenja strukturu ali ne utječe na poredak čvorova.
• Rotacija jedan čvor pomiče na gornju razinu a drugog pomiče na donju.
• KorisD se za oblikovanje stabla, posebice za smanjenje njegove ukupne visine.
-‐ ovo za rezultat ima poboljšanje u performansama mnogih operacija nad binarnim stablom
• Razlikujemo lijevu i desnu rotaciju
8
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ DESNA ROTACIJA
9
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ LIJEVA ROTACIJA
10
© Odjel za Informa/ku -‐ PMFSTStrukture podataka i algoritmi / 11
UREĐENO BINARNO STABLO -‐ BALANSIRANOST
• Za stablo kažemo da je balansirano ako za svaki njegovo čvor, apsolutna razlika u visini njegovog lijevog i desnog podstabla nije veća od 1
• Stabla se mogu balansiraD
-‐ pri unosu (više o tome idući put)
-‐ naknadno (upotrebom rotacija)
• Kako provjeriD je li stablo balansirano?
11