39
© Odjel za Informa/ku PMFST Strukture podataka i algoritmi 2012/2013 UREĐENO BINARNO STABLO crvenocrna stabla

Crveno-crna Stabla

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