You are on page 1of 39

UREENO

BINARNO STABLO

crveno-crna stabla

Strukture podataka i algoritmi

2012/2013

Odjel za Informa/ku - PMFST

BALANSIRANOST
Standardna ureena binarna stabla (SUBS) su jednostavne strukture podataka
koje se mogu pohvaliG sloenou operacija pretrage, unosa i brisanja od
O ( log N )
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.

Strukture podataka i algoritmi

2 / 39

Odjel za Informa/ku - PMFST

BALANSIRANOST
Operacije nad ovakvim stablom su jako skupe
10
9
8
7
6

Sloenost raste s O
( log
N
) na O
( N
) budui da je sada stablo de facto linearna
lista.
Puno je zahvalnija situacija kada vorovi imaju oba djeteta.
Strukture podataka i algoritmi

3 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

4 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

5 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

6 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

7 / 39

Odjel za Informa/ku - PMFST

BALANSIRANOST

Strukture podataka i algoritmi

8 / 39

Odjel za Informa/ku - PMFST

BALANSIRANOST

Strukture podataka i algoritmi

9 / 39

Odjel za Informa/ku - PMFST

BALANSIRANOST

Strukture podataka i algoritmi

10 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

11 / 39

Odjel za Informa/ku - PMFST

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 log
( N
+ 1 ) ali niG via od 2 log ( N + 1)
Valja naglasiG kako korijen ne mora nuno biG crn, ali ako jest, to malo olakava
operacije.
Strukture podataka i algoritmi

12 / 39

Odjel za Informa/ku - PMFST

CC STABLO

10

10

Stablo koje se sastoji od samo jednog vora

Strukture podataka i algoritmi

13 / 39

Odjel za Informa/ku - PMFST

CC STABLO

10

Stablo koje se sastoji od dva vora

Strukture podataka i algoritmi

14 / 39

Odjel za Informa/ku - PMFST

CC STABLO

10

5
10

10

Stablo koje se sastoji od dva vora

Strukture podataka i algoritmi

15 / 39

Odjel za Informa/ku - PMFST

CC STABLO

10

Pokuajte obojiti ovo stablo tako da


ono bude CC stablo

Strukture podataka i algoritmi

16 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

17 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

18 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

19 / 39

Odjel za Informa/ku - PMFST

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.

Laziness wins!!

Strukture podataka i algoritmi

20 / 39

Odjel za Informa/ku - PMFST

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

10

Strukture podataka i algoritmi

10

21 / 39

Odjel za Informa/ku - PMFST

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)

10

Strukture podataka i algoritmi

22 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

23 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

24 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

25 / 39

Odjel za Informa/ku - PMFST

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?


Strukture podataka i algoritmi

26 / 39

Odjel za Informa/ku - PMFST

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?

Strukture podataka i algoritmi

27 / 39

Odjel za Informa/ku - PMFST

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!

Strukture podataka i algoritmi

28 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

29 / 39

Odjel za Informa/ku - PMFST

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

Strukture podataka i algoritmi

30 / 39

Odjel za Informa/ku - PMFST

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?)

Strukture podataka i algoritmi

31 / 39

Odjel za Informa/ku - PMFST

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.
Strukture podataka i algoritmi

32 / 39

Odjel za Informa/ku - PMFST

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?

Strukture podataka i algoritmi

33 / 39

Odjel za Informa/ku - PMFST

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)

Strukture podataka i algoritmi

34 / 39

Odjel za Informa/ku - PMFST

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?)

Strukture podataka i algoritmi

35 / 39

Odjel za Informa/ku - PMFST

CC STABLO - BRISANJE
4. sluaj
- brat je crven, desni neak mu je crn, a sin tog desnog neaka crven

- koliko rotacija smo napravili?

Strukture podataka i algoritmi

36 / 39

Odjel za Informa/ku - PMFST

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?

Strukture podataka i algoritmi

37 / 39

Odjel za Informa/ku - PMFST

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?

Strukture podataka i algoritmi

38 / 39

Odjel za Informa/ku - PMFST

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.

Strukture podataka i algoritmi

39 / 39

Odjel za Informa/ku - PMFST

You might also like