Upload
ivan-ivanic
View
252
Download
4
Embed Size (px)
DESCRIPTION
Strukture podataka i algoritmi
Citation preview
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi 2012/2013
UREENO BINARNO STABLO
crveno-crna stabla
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Standardna ureena binarna stabla (SUBS) su jednostavne strukture podataka koje se mogu pohvaliG sloenou operacija pretrage, unosa i brisanja od
Ovo je najee i sluaj, no u odreenim sluajevima, SUBS degeneriraju u jednostavne vezane liste sorGrane bilo uzlazno bilo silazno.
Ovaj problem nastaje zbog toga to SUBS pohranjuju podatke na nain koji bi se mogao podrazumijevaG sorGranim, pa ako su podaci koji dolaze u stablo ve sorGrani, tada dolazi do problema.
2
O logN( )
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Operacije nad ovakvim stablom su jako skupe
Sloenost raste s na budui da je sada stablo de facto linearna lista.
Puno je zahvalnija situacija kada vorovi imaju oba djeteta.
3
10
9
8
7
6
O logN( ) O N( )
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Za onakva degenerirana stabla kaemo da su nebalansirana
Za stabla kojima je za svaki vor u stablu apsolutna razlika meu visinama lijeve i desne grane najvie 1, kaemo da su balansirana.
U praksi je ovaj zahtjev prilino teko posGi, stoga se esto pribjegne alternaGvnom i blaem uvjetu da visina stabla bude najvie log2N
4
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Balansiranju SUBSa moe se pristupiG
- nakon to su svi vorovi uneseni u stablo
- pri svakom pojedinom unosu/brisanju
Stabla koja se balansiraju nakon svakog unosa/brisanja zovu se samobalansirajua stabla
Dva najea primjera samobalansirajuih stabala jesu:
- AVL stabla
- crveno-crna (CC) stabla
5
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Prvi nain za samobalansiranje stabala je izbjei njegovu preestu potrebu.
Rezultat je struktura zvana B-stablo kod koje svaki vor ima proizvoljno mnogo djece, pri emu je red B-stabla broj djece koju vorovi mogu imaG.
B-stabla jesu uinkovita to se samobalansiranja Ge jer za razliku od SUBSa imaju bitno vie djece po voru, no s druge strane, ukoliko ta mogunost da imaju vie djece nije iskoritena tj. ako vor od potencijalno 10 djece ima samo jedno, bespotrebno se troi velika koliina memorije.
6
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Sljedei nain je simetrino binarno B-stablo koje je apstrakcija B-stabla reda 4.
Idejni tvorac je Rudolf Bayer
Budui da sve putanje od korijena do lista sadre isG broj vorova, svi listovi se nalaze na istom nivou u B-stablu.
Ovo je savreno balansirano stablo, ali nije ureeno binarno stablo.
Osnovna ideja SBBS je da vor moe imaG horizontalne ili verGkalne veze
- verGkalna veza razdvaja dva razliita vora
- horizontalna veza razdvaja vorove koji se u B-stablu smatraju isGm vorom
7
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
8
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
9
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
10
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
BALANSIRANOST
Budui da su SBBS prilino komplicirane strukture podataka, pojavila se potreba za neim prakGnijim.
1978. poznaG raunarci Robert Sedgewick i Leonidas Guibas su doli na ideju kako na jednostavan nain apstrahiraG SBBS i stvoriG strukturu kod koje je veoma jednostavno razlikovaG horizontalne od verGkalnih veza.
vorovima su dodali boju.
11
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO
Svaki vor u CC stablu odlikuje se jednim dodatnim bitom koji govori o boji vora
Tradicionalno se uzimaju crvena i crna, iako same boje nemaju nikakvu vanost
CC stablo je samobalansirajue ureeno binarno stablo koje karakteriziraju sljedea pravila:
1. listovi imaju nepostojeu djecu koja su po deniciji crna - zovemo ih vanjskim vorovima
2. na svakoj putanji od korijena do bilo kojeg vanjskog vora, mora biG jednak broj crnih vorova (crno pravilo)
3. crveni vor ne smije imaG crveno dijete (crveno pravilo)
Svi algoritmi koji osiguravaju balansiranost CC stabla ne smiju prekriG nijedno od ovih pravila. Ako to vrijedi, tada je stablo CC stablo pri emu mu visina ne moe biG nia od ali niG via od
Valja naglasiG kako korijen ne mora nuno biG crn, ali ako jest, to malo olakava operacije.
12
log N +1( ) 2 log N +1( )
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO
13
Stablo koje se sastoji od samo jednog vora
10 10
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO
14
Stablo koje se sastoji od dva vora
10
5
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO
15
Stablo koje se sastoji od dva vora
10
5
10
5
10
5
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO
16
10
5
2
Pokuajte obojiti ovo stablo tako da ono bude CC stablo
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Unos i brisanje iz stabla su prilino sloene operacije ba zbog uvjeta koje stablo ine crveno-crnim, no brzina pristupa vorovima CC stabla viestruko nadoknauje muku oko balansiranja
Ako uneseni/uklonjeni vor remeG crveno ili crno pravilo, na raspolaganju stoje dvije tehnike
- zamjena boja danog i/ili susjednih vorova
- rotacija susjednih vorova oko danog vora
17
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Unos u CC stablo odvija se u dvije faze
- standardni unos u ureeno binarno stablo novog vora kojeg po defaultu bojimo crveno
- promjena odnosa u stablu ovisno o bojama susjednih vorova
U klasi vor nuno je i dovoljno dodaG samo jednu varijablu koja predstavlja boju vora. Izvorno se korisG Gp char gdje 1 predstavlja crvenu a 0 crnu boju.
Mogue je korisGG i Gp bool koji je memorijski malo skuplji ali kasnije olakava provjeru boje danog vora.
Kod unosa je potrebno korisGG rotacije u eljenom smjeru i to
- jednostruke
- dvostruke
18
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Zgodno je imaG metodu koja e provjeriG je li UBS zaista CC stablo.
Ta metoda mora provjeriG
- je li stablo uope ureeno
- je li prekreno crveno pravilo
- je li prekreno crno pravilo
I tako za svako podstablo u stablu sve do listova. Ukoliko neto od gornjeg nije zadovoljeno, stablo nije CC.
19
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Pri unosu u CC stablo, odmah se postavlja pitanje
- bojamo li novi vor crveno ili crno?
Ukoliko je novi vor crn, tada se crno pravilo uvijek kri, a ostatak algoritma se fokusira na popravljanje tog prekaja bez krenja crvenog pravila.
Ukoliko je novi vor crven, tada se crveno pravilo moda kri a ostatak algoritma se fokusira na popravljanje tog prekraja bez krenja crnog pravila.
20
Laziness wins!!
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
1. sluaj - N(10) dodajemo kao korijen
- N obojamo crno
korijen ne mora bi/ crn, ali dogovorno se prvi vor unesen u stablo boji crno- sva pravila su zadovoljena
21
1010
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
2. sluaj - Tata od N(5) je crn
- crveni uvjet vrijedi
- crni uvjet nije ugroen budui da je N crven (po defaultu)
22
10
5
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Poto se unos u UBS odvija rekurzivno, to je uvijek potrebno spusGG se do razine lista.
Ovo je zapravo jako korisno budui da se pri rekurzivnom povratku moemo rijeiG prekrenih pravila, a ionako se moramo vraaG.
23
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Kako ispitaG je li se dogodio crveni prekraj?
Jednostavno: ako je bilo koji vor na putanji crven, tesGraj ima li crveno dijete.
Valja uoiG kako je mogue da je samo jedno od djece crveno. U proGvnom to znai da stablo nije bilo CC i prije unosa novog vora.
24
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Kako popraviG crveni prekraj?
Isto jednostavno: postoje samo 3 sluaja
- ako je brat danog vora crven tada njihov roditelj mora biG crn => jednostavno im zamijenimo boje.
- meuGm, kako je jedan crni vor postao crven, riskiramo prekraje na viim razinama
25
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Drugi sluaj:
- ako brat danog vora nije crven, trik sa zamjenom boja nee upaliG jer bismo tada u jednoj grani dobili jedan crni vor vika a to je krenje crnog pravila.
- potrebno je malo vie truda => rotacija
- dodatni bonus je da rotacija ne mijenja crnu visinu. kako sad to?
26
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - UNOS
Trei sluaj:
- do sada je uvijek lijevo dijete bilo crveno, no to ako je crveno desno a ne lijevo dijete?
- potrebno je jo malo vie truda => dvostruka rotacija
- je li srednji sluaj CC stablo?
- ako jest emu dodatna rotacija?
27
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Brisanje je bitno kompliciranije od unosa. Bitno!
Pri unosu smo dodavali novi crveni vor koji je moda izazivao krenje crvenog pravila koje smo kasnije razrjeavali kako bi se pojavilo.
Pri brisanju nemamo taj luksuz brisanja po bojama. Ako briemo crvenog super, ali ako briemo crnog - eto problema!
28
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Kod standardnog ureenog binarnog stabla, pri brisanju vora koji ima dva djeteta:
- pronaemo maksimalni element u lijevoj (minimalni element u desnoj) grani
- premjesGmo njegovu vrijednost u vor kojeg briemo
- potom jednostavno obriemo taj vor od kojeg smo kopirali vrijednost
Budui da kopiranje vrijednosG ne kri ni crveni ni crni uvjet, problem brisanja se svodi na problem brisanja vora s najvie jednom dijete-granom
- nita ne mijenja na stvari je li to vor kojeg smo originalno htjeli brisaG ili vor od kojeg smo kopirali vrijednost
29
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Kod standardnog ureenog binarnog stabla, pri brisanju vora koji ima dva djeteta:
- pronaemo maksimalni element u lijevoj (minimalni element u desnoj) grani
- premjesGmo njegovu vrijednost u vor kojeg briemo
- potom jednostavno obriemo taj vor od kojeg smo kopirali vrijednost
Budui da kopiranje vrijednosG ne kri ni crveni ni crni uvjet, problem brisanja se svodi na problem brisanja vora s najvie jednom dijete-granom
- nita ne mijenja na stvari je li to vor kojeg smo originalno htjeli brisaG ili vor od kojeg smo kopirali vrijednost
30
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Dakle, moemo pretpostaviG da briemo vor s najvie jednom dijete-granom
- ukoliko su jedina djeca vora listovi
neka neko od njih bude dijete- ukoliko briemo crveni vor
zamijenimo ga njegovim djetetom koje je zasigurno crno (zato?)- ukoliko briemo crni vor koji ima crveno dijete
zamijenimo ga s /m djetetom koje moramo oboja/ crno (zato?)
31
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Problemi se javljaju kada su i vor za brisanje i njegovo dijete oboje crni, jer je onda potrebno rebalansiranje.
Zvjezdica predstavlja mjesto na kojem smo brisali
1. sluaj
- i dalje postoji mogunost krenja crnog pravila budui da smo crnu visinu u lijevoj grani smanjili s 3 na 2.
32
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
1. sluaj
- ako je roditelj brisanog ipak bio crven, tada jednostavno zamijenimo boju roditelja i brata brisanog
- krimo li sada kakva pravila?
33
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
2. sluaj
- lijevi neak crven, desni neak i roditelj svejedno (jednostruka rotacija)
- lijevi neak crn, desni crven, a roditelj svejedno (dvostruka rotacija)
34
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
Ovo je tek bilo zagrijavanje. Pravi problemi nastaju ako je brat crven, a ne crn kao u prethodnim sluajevima
3. sluaj
- brat je crven, a neaci su mu crni (moraju biG. zato?)
35
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
4. sluaj
- brat je crven, desni neak mu je crn, a sin tog desnog neaka crven
- koliko rotacija smo napravili?
36
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
4. sluaj
- brat je crven, desni neak mu je crn, a jedini sin (lijevi) tog desnog neaka crven
- koliko rotacija smo napravili?
37
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - BRISANJE
4. sluaj
- brat je crven, desni neak mu je crn, a jedini sin (desni) tog desnog neaka crven
- koliko rotacija smo sveukupno napravili?
38
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 39
CC STABLO - ZAKLJUAK
CC stabla su zanimljive zvijeri
Smatraju se jednostavnijim od AVL stabala koji su im izravni konkurenG, i na prvi pogled unos je trivijalan.
Brisanje, pogotovo kada se razmotre ba svi sluajevi, i nije tako trivijalno.
Kada ih korisGG? Ovisi o vama, ali ako ulazni podaci imaju serije sorGranih vrijednosG, onda su CC stabla prilino dobar izbor.
39