Cijela radnja

Embed Size (px)

Citation preview

  • 8/6/2019 Cijela radnja

    1/24

    V. GIMNAZIJA

    ZAGREB, KLAIEVA 1

    Binarna stablaMaturalni rad

    Zagreb, 24. travnja 2009.

    Bruno Rahle, 4.D

  • 8/6/2019 Cijela radnja

    2/24

    Stranica 2 od 24

    V. GIMNAZIJA

    ZAGREB, KLAIEVA 1

    Binarna stablaMaturalni rad

    Mentor:

    Predrag Broanac, prof.

    Zagreb, 24. travnja 2009.

    Bruno Rahle, 4.D

  • 8/6/2019 Cijela radnja

    3/24

    Sadraj

    Stranica 3 od 24

    Uvod ............................................................................................................................ 4

    Stabla i binarna stabla .................................................................................................. 5

    Definicija stabla ................................................................................................................... 5

    Definicija binarnog stabla .................................................................................................... 5

    Pojmovnik .................................................................................................................... 6

    Dogovori ...................................................................................................................... 8

    vor .................................................................................................................................... 8

    Slike .................................................................................................................................... 8

    Sloenost ............................................................................................................................. 8

    Binarno stablo traenja ................................................................................................ 9

    Karakteristike BST-a ............................................................................................................. 9

    Traenje u BST-u .................................................................................................................. 9

    Ubacivanje u BST ............................................................................................................... 10

    Sortiranje u BST-u .............................................................................................................. 10

    Traenje K-tog u BST-u ....................................................................................................... 11

    Dokaz sloenosti ................................................................................................................ 11

    Samo-balansirajua binarna stabla ............................................................................. 14

    Rotacije ...................................................................................................................... 15

    AVL stablo .................................................................................................................. 17

    Svojstva AVL stabla ............................................................................................................ 17

    Podatak o balansiranosti.................................................................................................... 17

    Ubacivanje u AVL stablo..................................................................................................... 17

    Crveno-crno stablo ..................................................................................................... 19

    Karakteristike crveno-crnog stabla ..................................................................................... 19

    Ubacivanje u crveno-crno stablo ........................................................................................ 20

    Zakljuak .................................................................................................................... 23

    Bibliografija ............................................................................................................... 24

  • 8/6/2019 Cijela radnja

    4/24

    Uvod

    Stranica 4 od 24

    Danas se raunala koriste za apsolutno sve: poevi od vojnih simulacija, preko fizikalnih i

    astronomskih simulacija pa sve do komunikacije, medija i astrologije. Pred svega nekoliko

    desetaka godina, takva iroka upotreba raunala bila je nezamisliva. Osim to danas svi

    imamo raunala, bilo stolno bilo prijenosno, ona su nam poela preuzimati i depove

    moderni mobiteli u biti su umanjena raunala koja se svojom snagom mogu mjeriti sa

    raunalima iz prolog desetljea.

    Prema Mooreovom se zakonu svake dvije godine broj operacija koje raunalo moe

    izvriti u sekundi udvostrui. Zbog toga se programi koji ve postoje izvravaju sve bre i bre

    bez ikakve izmjene njihovog koda. Ipak, ta ubrzanja su samo konstantna i odnose se na sve

    programe. Pretpostavimo da se bavimo programiranjem. Ako elimo da upravo na programbude najbri, ne emo se oslanjati na sirovu raunalnu snagu nego emo koristiti bre

    algoritme i strukture podataka.

    Vanost dobrog odabira algoritma opisat emo na primjeru sortiranja. Ako nekim

    jednostavnim algoritmom (recimo bubble sortom ili selection sortom) pokuamo sortirati

    veliku koliinu podataka, recimo njih 10,000,000, program e se izvravati otprilike 4.5 sata.

    Nasuprot tome, koristimo li neto sloeniji, ali bri algoritam (kao, na primjer, quick sort ili

    merge sort), isti ulazni podaci bit e sortirani za svega nekoliko sekundi!

    Odabir odgovarajue strukture podataka takoer je vaan. Ako je bitno da moemo

    pristupiti bilo kojem elementu polja, ne emo koristiti listu, nego obino polje, jer emo, u

    suprotnom, pristup elementima na kraju liste jako skupo plaati. U bazama podataka

    strukture su takoer bitne. U manjim bazama podataka, za to se koriste binarna stabla. No, u

    najveim bazama podataka, ne moemo uitati sve podatke, pa onda koristimo posebno

    dizajnirane strukture, takozvana B stabla.

    Ipak, ponekad doista nije potrebno muiti se i kodirati najbolji mogui algoritam i najbolju

    strukturu podataka. Ono to je najbitnije u programiranju jest sposobnost ocjenjivanja

    potrebne efikasnosti. Ukoliko shvatimo da je dovoljna i jednostavna alternativa, emu se

    muiti i pisati neto to jest moda bre, ali i trai puno vie vremena za samo pisanje i

    dizajniranje te je jo k tome podlonije pogrekama?

    U ovom maturalnom radu govorit emo o strukturama podataka koje zovemo binarna

    stabla.

  • 8/6/2019 Cijela radnja

    5/24

    Stabla i binarna stabla

    Stranica 5 od 24

    Definicija stabla

    Stablo je u raunarstvu nain predstavljanja hijerarhije. To je struktura podataka koja vue

    analogije s rodoslovnim stablima. Prema definicijama teorije grafova, stablo je acikliki

    povezani graf u kojem svaki vor ima nula ili vie djece. vor je najmanja jedinica grae

    stabla. Na donjim slikama vorovi su kuice i ono to pie u njima. Crte koje povezuju dva

    vora zovu se veze. Djeca nekog vora su svi vorovi koji se nalaze ispod tog vora a izravno

    su povezani s njime. Roditelj nekog vora je vor kojemu je dani vor dijete. vor bez djece

    zove se list. vor bez roditelja nazivamo korijenom.

    Slika 1 Primjer stabla

    Definicija binarnog stabla

    Binarno stablo je struktura podataka koja se predstavlja kao stablo u kojem niti jedan vor

    nema vie od dvoje djece. Takoer, korijen stabla je samo jedan, tj. na vrhu smije biti samo

    jedan element. Slika 1 nije primjer binarnog stabla, dok Slika 2 to jest.

    Slika 2 Primjer binarnog stabla

    U binarnom stablu svaki vor ima tono jednog roditelja, s izuzeem korijena stabla, koji

    nema roditelja. Nadalje, svaki vor ima navie dvoje djece vorova kojima je on roditelj. Za

    ostale pojmove pogledajte pojmovnik.

    Dani u tjednu

    Radni dani

    Ponedjeljak Utorak Srijeda etvtak Petak

    Neradnidani

    Subota Nedjelja

    Enciklopedija

    Znanost Kultura

    Umjetnost Obrt

  • 8/6/2019 Cijela radnja

    6/24

    Pojmovnik

    Stranica 6 od 24

    2-3-4 stablo potpuno balansirano stablo u kojem svi vorovi u sebi pamte jedan, dva ili

    tri podatka te stoga imaju redom dvoje, troje, ili etvoro djece.

    AVL stablo samo-balansirajue binarno stablo u koje se balansira po dubini.

    Balansirano binarno stablo binarno stablo u kojem je dubina najdubljeg vora

    ograniena nekom funkcijom u ovisnosti o broju vorova u stablu, a manja je od O(n).

    Binarno stablo stablo u kojem svaki vor ima najvie dvoje djece.

    Braa vorovi u stablu koji su djeca istog roditelja. U binarnom stablu vor nema vie od

    jednog brata.

    Crveno-crno stablo samo-balansirajue binarno stablo koje je proizalo iz 2-3-4 stabla. U

    njemu su veze pobojane u crvenu ili crnu boju.

    vor osnovna jedinica grae svakog stabla. Povezana je vezama s ostalim vorovima.

    Dijete / sin su svi vorovi koji su povezani vezom s danim vorom, a nalaze se na niem

    stupnju hijerarhijske ljestvice, tj. podreeni su danom voru.

    Djed vor koji je otac oca trenutnog vora.

    Dubina (visina) vora broj vorova koje moramo proi od korijena stabla do danog

    vora.

    Korijen stabla vor koji nema roditelja.

    Lijevo naginjue crveno-crno stablo crveno-crno stablo u kojem su dodatno zabranjene

    crvene veze koje naginju na desnu stranu, osim u sluaju kad postoji i veza koja naginje na

    lijevu stranu.

    List vor koji nema djece.

    O (big O, veliko O) notacija nain zapisivanja sloenosti algoritma u kojoj su konstantni

    faktori zanemareni.

    Potpuno balansirano stablo stablo u kojem su svi listovi na istoj visini.

  • 8/6/2019 Cijela radnja

    7/24

    Pojmovnik Binarna stabla Bruno Rahle

    Stranica 7 od 24

    Roditelj / otac vor kojemu je dani vor dijete.

    Samo-balansirajue binarno stablo balansirano binarno stablo koje prilikom operacija

    ubacivanja i izbacivanja popravlja svoju strukturu da bi osiguralo balansiranost.

    Stablo struktura podataka koja je predstavljena u obliku hijerarhije. Prema definicijama

    iz teorije grafova, to je acikliki povezani graf u kojem svaki vor ima nula ili vie djece.

    Ujak svi vorovi koji su djeca djeda, a nisu otac danom voru.

    Unuk svi vorovi koji su djeca sve djece danog vora.

    Unutranji put suma dubina svih vorova.

    Vanjski vor izmiljeni vor bez djece u binarnom stablu koji se spaja na svaku vezu

    nekog postojeeg vora koja ne vodi u neki drugi postojei vor.

    Vanjski put suma dubina svih vanjskih vorova.

    Veza poveznica koja spaja dva vora na razliitim (uzastopnim) stupnjevima hijerarhijske

    ljestvice. U grafikom obliku zapisa to je crta koja povezuje dva vora.

  • 8/6/2019 Cijela radnja

    8/24

    Dogovor

    Stranica 8 od 24

    Kako bismo se lake snalazili u ovoj radnji, bit e potrebno napraviti neke dogovore kojih

    emo se pridravati cijelom radnjom.

    vorU svakom voru emo pamtiti sljedee informacije:

    Vrijednost (v) Lijevo dijete (l) Desno dijete (d) Roditelj (roditelj) Broj elemenata u podstablu (n) Broj istih elemenata (broja)

    Ako su jo neki podaci potrebni za neku od opisanih struktura, to e biti posebno

    naglaeno u tekstu koji opisuje tu strukturu.

    Slike

    vor emo predstavljati sivom bojom, osim ako u tekstu nije drugaije naznaeno. Veze

    predstavljamo crnim linijama, osim ako u tekstu nije drugaije naznaeno.

    SloenostSloenost svakog algoritma bit e napisana u veliko-O notaciji, osim ako u tekstu nije

    drugaije naznaeno. Veliko-O notacija (ili samo O notacija) jest nain zapisivanja neke

    funkcije u kojoj zanemarujemo sve osim najjae potencije. Na primjer, funkciju =8 +1231 bismo u O notaciji prikazali kao = . Funkciju, =12 ln bismo, pak, prikazali kao , = lg. Primijetite da bazalogaritma koji stoji u O notaciji nije bitna jer se ona lako moe zamijeniti bilo kojom drugom

    mnoei s konstantom.

  • 8/6/2019 Cijela radnja

    9/24

    Binarno stablo traenja

    Stranica 9 od 24

    nai(sad, x):*vor

    ako je sad == 0vrati0

    ako je sad->vrijednost == xvrati sad

    ako je sad->vrijednost < xvrati nai(sad->d, x)

    vrati nai(sad->l, x)

    Binarno stablo traenja (BST engl. binary search tree) je struktura podataka koja

    zadovoljava sljedea svojstva:

    1. Strukturirano je kao binarno stablo2. Nikoja dva vora ne sadre istu vrijednost3. Oba djeteta nekog vora takoer su binarna stabla traenja4. U lijevom podstablu nekog vora svi vorovi imaju manju vrijednost od tog vora5. U desnom podstablu nekog vora svi vorovi imaju veu vrijednost od tog vora

    Karakteristike BST-a

    Ova struktura u prosjeku omoguava brzo izvravanje svih bitnih operacija (umetanje,pronalaenje, brisanje, sortiranje...). Prosjene i najgore mogue brzine izvravanja nekih

    osnovnih operacija navedene su u Tablica 1 Karakteristike binarnog stabla .

    Tip analize Ubacivanje Traenje Brisanje Sortiranje Traenje k-tog

    Prosjean

    sluaj

    lg lg lg lgNajgori sluaj

    Tablica 1 Karakteristike binarnog stabla traenja

    Kao to se moe vidjeti iz Tablica 1 Karakteristike binarnog stabla , razlika izmeu

    prosjenog i najgoreg sluaja poprilino je velika. To je razlog zato se esto koriste strukture

    koje imaju bolju sloenost u najgorim sluajevima. Dokaze ovih tvrdnji moete pronai na

    kraju poglavlja.

    Traenje u BST-u

    U BST-u vor se trai na sljedei nain:

    1. Krenemo od korijena stabla2. Ako trenutni vor ne postoji, vratimo da

    vor ne postoji

    3. Ako je vrijednost trenutnog vora jednaka traenoj vrijednosti, vratimo trenutnivor

    4. Ako je vrijednost trenutnog vora manja od traene vrijednosti, traena vrijednostse nalazi u desnom podstablu pa tamo nastavimo traenje

  • 8/6/2019 Cijela radnja

    10/24

    Binarno stablo traenja Binarna stabla Bruno Rahle

    Stranica 10 od 24

    ubaci(sad,x)ako je sad == 0

    sad = novi vor(x)

    izai vanpoveaj sad->nako je sad->vrijednost == xpoveaj sad->brojaizai van

    ako je sad->vrijednost < x

    ubaci(sad->d,x)

    inaeubaci(sad->l,x)

    ispii(sad)ako je sad == 0izai van

    ispii(sad->l)

    za svaki i[1,sad->brojac]pii sad.vrijednostispii(sad->d)

    5. U suprotnom (dakle vrijednost trenutnog vora je vea od traene vrijednosti),traena vrijednost se nalazi u lijevom podstablu pa tamo nastavimo traenje

    Kako uvijek znamo na kojoj se strani nalazi vor koji traimo te nikad ne idemo na drugu,

    oito je da je sloenost algoritma , gdje je dubina vora u BST-u. Kako se to odnosiprema , opisano je u Dokaz sloenosti na kraju poglavlja. Algoritam je identian u svimbinarnim stablima.

    Ubacivanje u BST

    U BST vor se ubacuje na sljedei nain:

    1. Krenemo od korijena stabla2. Ako je trenutni vor prazan, postavimo

    ga na traenu vrijednost

    3. Ako je vrijednost trenutnog vorajednaka vrijednosti koju ubacujemo,

    poveamo broj istih vrijednosti u

    trenutnom voru i zavrimo algoritam

    4.

    Ako je vrijednost trenutnog vora manja od vrijednosti koju ubacujemo,ubacujemo vrijednost u podstablo desnog djeteta trenutnog vora

    5. U suprotnom (dakle vrijednost trenutnog vora je vea od vrijednosti kojuubacujemo), ubacujemo vrijednost u podstablo lijevog djeteta trenutnog vora

    Slino kao i kod traenja, sloenost ovog algoritma je .Sortiranje u BST-u

    Kako znamo da su svi vorovi u lijevom

    podstablu manji, a svi u desnom vei, da bismo

    sortirali BST prvo sortiramo lijevo podstablo,

    dodamo korijen, te onda sortiramo desno

    podstablo. To nas dovodi do jednostavne

    rekurzivne implementacije, koja je identina za sva daljnja stabla pretraivanja. Pseudokod

    predstavlja algoritam koji ispisuje stablo u sortiranom obliku. Sloenost tog algoritma je

    jer svaki vor obilazi tono jednom.

  • 8/6/2019 Cijela radnja

    11/24

    Binarno stablo traenja Binarna stabla Bruno Rahle

    Stranica 11 od 24

    nai_kti(sad,k):vorako je sad == 0vrati0

    broj = 0;ako je sad->l 0

    broj = sad->l->n

    ako je broj > kvrati nadji_kti(sad->l,k)

    ako je broj + sad->n < xvrati sad

    vrati nadji_kti(sad->d,k broj - sad->n)

    Traenje K-tog u BST-u

    Da bismo mogli pronai K-ti po

    redu lan u BST-u, moramo voditi

    rauna koliko se vorova nalazi usvakom podstablu, pa stoga svaki

    vor mora pamtiti i taj podatak.

    Rekurzivni algoritam kojim

    nalazimo K-ti lan je sljedei:

    1. Krenemo od korijena stabla2. Ako je broj vorova u lijevom podstablu vei od K, tada znamo da se traeni vor

    nalazi u tom podstablu te nastavimo traiti u njemu

    3. Ako je broj vorova u lijevom podstablu plus broj vorova koji imaju vrijednosttrenutnog vora vea ili jednaka K, vratimo trenutni vor

    4. U suprotnom, nastavimo traiti (K - broj vorova u lijevom podstablu - broj vorovaiste vrijednosti kao i trenutni) vor u desnom podstablu

    Za sloenost ovog algoritma takoer vrijedi da je jednaka

    . Identian algoritam

    koristit emo i u svim ostalim stablima pretraivanja.

    Dokaz sloenosti

    Najgori sluajevi

    Ovaj dokaz vrlo je jednostavan i intuitivan. Kad bismo u BST-u imali vorove koji su

    poredani tako da je najvei element korijen, drugi najvei njemu lijevi i tako dalje ih slaemo

    prema lijevo do posljednjeg, tada je dubina najudaljenijeg vora jednaka

    . Zbog toga, ako u

    BST tada ubacujemo ili traimo najmanji element, onda emo dobiti sloenost koja je

    jednaka .Prosjeni sluajevi

    Ovaj dokaz jest neto tei. Prvo moramo pretpostaviti da u prosjenom sluaju u stablo

    elemente ubacujemo na nasumian nain. Neka je duina prosjenog unutranjeg puta ustablu od

    vorova. Tada vrijedi da je

  • 8/6/2019 Cijela radnja

    12/24

    Binarno stablo traenja Binarna stabla Bruno Rahle

    Stranica 12 od 24

    = 1 + 1 +

    gdje je = 0 i = 1. Formula se sastoji od dva dijela: 1 (koji se nalazi u formuli jerkorijen dodaje jedan na duinu svih vorova u oba svoja podstabla, a tamo ih ima 1) tedrugog dijela, sume. Suma jednostavno opisuje da je jednaka vjerojatnost za svaki moguiraspored. Ako primijetimo da moemo sumu razbiti na dvije, dobit emo

    = 1 + 1

    +

    Kad primijetimo da su te dvije sume identine, dobijemo

    = 1 + 2

    Pomnoimo jednadbu s N, pa dobijemo

    = 1 + 2

    Da se rijeimo sume, oduzmemo jednadbu jedan stupanj manju

    1 = 1 1 2 + 2 = 2 1 + + 1Podijelimo sve sa + 1 te dobijemo

    + 1 = + 2 1 + 1Uvrstimo sad jednadbu

    = 1 + 2 2 1pa dobijemo

    + 1 = 1 + 2 2 1 + 2 1 + 1Na kraju, teleskopiranjem dobijemo

    + 1 = 3 + 2 1 + 1

    Tu jednadbu moemo aproksimirati kao

    + 1 2 1 + 1

    2 1 + 1

    = 4 ln + 1 2ln

  • 8/6/2019 Cijela radnja

    13/24

    Binarno stablo traenja Binarna stabla Bruno Rahle

    Stranica 13 od 24

    Te konanom aproksimacijom kao

    + 1 2 ln 1.39lg = lgTime smo uspjeli dokazati da je prosjeni unutranji put jednak

    lg, to znai da

    je prosjeni put u stablu dug lg. Kako sve funkcije osim sortiranja imaju sloenost, time smo dokazali i da je njihova sloenost lg za nasumino izgraeno stablo.To svojstvo pri nasuminim sluajevima daje veliku prednost binarnom stablu u odnosu na

    ostale relativno jednostavne strukture kao to su polje i lista.

  • 8/6/2019 Cijela radnja

    14/24

    Samo-balansirajua binarna stabla

    Stranica 14 od 24

    Samo-balansirajua binarna stabla su binarna stabla koja nam garantiraju sloenost u

    najgorim sluajevima. Kako smo ve vidjeli na primjeru binarnog stabla, mogue je da se

    dogodi da nam ono nudi linearnu sloenost koju smo na poetku i eljeli izbjei. Stoga, jo od

    samog poetka raunalne znanosti, razmatrali su se naini kako osigurati da se sve operacije

    izvedu u nekom vremenu koje je bolje od linearnog.

    Prvu takvu ideju imali su Gregorij Adelson-Velskij i Evgenij Landis. Oni su 1962. kreirali

    stablo koje se balansira po dubini podstabla te je to stablo po njima nazvano AVL stablom.

    Kako je to obiaj u svim znanostima, nije se stalo na tom otkriu, nego se dalje nastavilo sa

    radom te su ve nakon desetak godina razvijene razne sline strukture podataka. Danas,

    upravo zahvaljujui radu tih pionira raunalne znanosti, postoji cijeli niz samo-balansirajuihbinarnih stabala. Uz gore spomenuto AVL stablo, meu jednostavnija samo-balansirajua

    binarna stabla ubrajamo crveno-crna stabla i rairena stabla te razne njihove modifikacije.

    Ovo podruje se i danas razvija. Najbolji primjer za to su lijevo-naginjua crveno-crna

    stabla. Njih je konstruirao Robert Sedgewick prije manje od dvije godine (jo nije objavio

    rad!), a ona programeru daju crveno-crno stablo koje ne mora biti preslika 2-3-4 stabla, nego

    moe biti i preslika 2-3 stabla.

    U ovom radu, donosimo kratak pregled odreenih varijanti AVL i crveno-crnih stabala. Za

    sve njih je karakteristino da su operacije traenja i sortiranja identine onima u binarnom

    stablu. Stoga je vrlo korisno imati sline objektno-orijentirane implementacije za sva stabla

    jer je tada vrlo jednostavno promijeniti strukturu podatka koju koristimo te se time bolje

    prilagoditi potrebi.

  • 8/6/2019 Cijela radnja

    15/24

  • 8/6/2019 Cijela radnja

    16/24

    Rotacije Binarna stabla Bruno Rahle

    Stranica 16 od 24

    rotiraj_vezu_iznad(A)

    B = A->roditelj

    ako je B == korijen

    korijen = A

    inae

    ako je B->roditelj->l == B

    B->roditelj->l = A

    inae

    B->roditelj->d = A

    A->roditelj = B->roditelj

    B->roditelj = A

    ako je B->l == A

    B->l = A->d

    ako je B->l 0

    B->l->roditelj = B

    A->d = B

    inae

    B->d = A->l

    ako je B->d 0

    B->d->roditelj = B

    A->l = B

    Slika 4 Rotacija ulijevo

    o novi roditelj od A je roditelj od Bo novi roditelj od B je Ao ako je B korijen

    A postaje korijeno inae ako je B bio lijevo dijete svog biveg roditelja

    A postaje lijevo dijete svog novog roditeljao inae A postaje desno dijete svojeg novog roditeljao novo desno dijete od B je lijevo dijete od Ao ako postoji desno dijete od B, njegov novi roditelj postaje Bo novo lijevo dijete od A postaje B

  • 8/6/2019 Cijela radnja

    17/24

    AVL stablo

    Stranica 17 od 24

    AVL stablo konstruirali su Gregorij Adelson-Velskij i Evgenij Landis 1962. u radu Algoritam

    za organizaciju podataka. AVL stablo ima sljedea svojstva:

    1. Strukturirano je kao binarno stablo2. Svaki vor u sebi sadri i podatak o balansiranosti (tzv. balance factor)3. Svi podaci o balansiranosti moraju biti izmeu -1 i 1; ako nisu vre se modifikacije

    U sutini AVL stabla nalazi se podatak o balansiranosti. To je u biti razlika izmeu visina

    dva podstabla.

    Svojstva AVL stabla

    AVL stablo, kao i sva ostala samo-balansirajua binarna stabla nam osigurava brzo

    izvravanje jednostavnih operacija. Vrlo je rigidno balansirano, no o tome vie neto kasnije.

    Tip analize Ubacivanje Traenje Brisanje Sortiranje Traenje k-tog

    Prosjean

    sluaj

    lg lg lg lgNajgori sluaj lg lg lg

    Tablica 2 Karakteristike AVL stabla

    Podatak o balansiranosti

    Podatak o balansiranosti jednak je razlici dubina desnog i lijevog podstabla ( = ). Ideja stabla jest osigurati da ta razlika po apsolutnoj vrijednosti nijevea od 1. To onda osigurava da je stablo balansirano. Najvea dubina stabla jest

    1.44 lg. Kad se dobije razlika koja je po apsolutnoj vrijednosti vea od 1, vre serotacije.

    Ubacivanje u AVL stablo

    U AVL stablo ubacuje se jednako kao i u binarno stablo, samo to se na kraju rekurzije jo

    pozove funkcija popravi. Ta funkcija popravlja stablo tako da vrijedi 3. svojstvo AVL stabala.

    Kako bismo si olakali posao, napravit emo funkciju osvjei vor koja e za dani vor ponovo

    izraunati visinu podstabla i podatak o balansiranosti. Nju moramo pozvati i na kraju svake

    rotacije. Funkcija popravi prima vor te prvo osvjei podatke u njemu. Nakon toga, ako je

    podatak o balansiranosti vei od 1 po apsolutnoj vrijednosti, stablo nije balansirano pa ga

    treba popraviti. Imamo stoga 2 (u biti 4) sluaja:

  • 8/6/2019 Cijela radnja

    18/24

    AVL stablo Binarna stabla Bruno Rahle

    Stranica 18 od 24

    ubaci(sad,x)

    ako je sad == 0sad = novi vor(x)izai van

    poveaj sad->n

    ako je sad->vrijednost == x

    poveaj sad->broja

    izai van

    ako je sad->vrijednost < xubaci(sad->d,x)

    inae

    ubaci(sad->l,x)

    popravi(sad)

    popravi(sad)

    sad->osvjei()

    ako jesad->bf == -2ako je sad->l->bf == -1

    rotiraj(sad->l)

    inae

    rotiraj(sad->l->d)

    rotiraj(sad->l)

    ako je sad->bf == 2

    ako je sad->d->bf == 1

    rotiraj(sad->d)

    inae

    rotiraj(sad->d->l)

    rotiraj(sad->d)

    1. Podatak je jednak -2. To znai da je lijevo podstablo vie od desnog. Tu opetimamo dva sluaja:

    a. Podatak u lijevom podstablu je jednak -1. To znai da je lijevo podstablolijevog djeteta vee od desnog podstabla lijevog djeteta. Ovakvu situacijuemo rijeiti desnom rotacijom veze izmeu trenutnog vora i njegovog

    lijevog djeteta.

    b. U suprotnom, znamo da je desno podstablo lijevog djeteta vee od lijevog.Ovakvu situaciju rjeavamo prvo rotacijom veze izmeu lijevog djeteta i

    njegovog desnog te trenutnog vora i njegovog (novog) lijevog djeteta.

    2. Podatak je jednak 2. To znai da je desno podstablo vie od lijevog. Sluaj jepotpuno simetrian prvome, pa tako imamo dva simetrina sluaja:

    a. Podatak u desnom podstablu je jednak -1. To znai da je desno podstablodesnog djeteta vee od desnog podstabla lijevog djeteta. Ovakvu situaciju

    emo rijeiti lijevom rotacijom veze izmeu trenutnog vora i njegovog

    desnog djeteta.

    b. U suprotnom, situaciju rjeavamo rotacijom veze izmeu desnog djeteta injegovog lijevog te trenutnog vora i njegovog (novog) lijevog djeteta.

  • 8/6/2019 Cijela radnja

    19/24

    Crveno crna stabla

    Stranica 19 od 24

    Crveno-crno stablo je samo balansirajue binarno stablo traenja. Kreirao ga je Rudolf

    Bayer 1972. i nazvao ga simetrinim binarnim B stablom. Dananje ime nadjenuli su mu

    Guibas i Sedgewick. U svojoj osnovi to je 2-3-4 stablo prikazano u obliku binarnog stabla. Od

    tuda vue svoja svojstva:

    1. Crveno-crno stablo je binarno stablo2. Svaka veza ima boju, crvenu ili crnu, a boja veze pridruena je djetetu3. Korijen je crn4. Vanjski vorovi su prazni i crni5. Oba djeteta crvenog vora su crna6. Broj crnih vorova na svakom putu od svakog vora u stablu do svih listova u

    njegovom podstabluje jednak

    Svojstva od 1. do 4. su jednostavna i o njima ne treba posebno raspravljati. 5. i 6. svojstvo

    osigurava performanse u najgorim sluajevima te proizlaze iz svojstva 2-3-4 stabala. Crvene

    veze su one unutar vora u 2-3-4 stablu. 5. svojstvo osigurava da se ne pojavljuju dva crvena

    vora za redom. Treba primijetiti da 5. i 6. svojstvo zajedno osiguravaju da je najdui put u

    najgorem sluaju najvie 2 puta vei od bilo kojeg drugog puta u stablu.

    Karakteristike crveno-crnog stabla

    Tip analize Ubacivanje Traenje Brisanje Sortiranje Traenje k-tog

    Prosjean

    sluaj

    lg lg lg lgNajgori sluaj lg lg lg

    Tablica 3 Karakteristike crveno-crnog stabla

    Kako bismo dokazali tvrdnje iz Tablice 3, potrebno je dokazati da je dubina stabla s vorova . Uzmimo da je dubina podstabla vora te da je broj crnihvorova od vora (iskljuivo) na putu do bilo kojeg lista u podstablu. Vrijedi da je2 jer je broj crnih vorova najmanje jednak polovici ukupnog broja vorova naputu.

    Lema

    Broj vorova u podstablu vora najmanje jednak 2 1.

  • 8/6/2019 Cijela radnja

    20/24

    Crveno crno stablo Binarna stabla Bruno Rahle

    Stranica 20 od 24

    Dokaz:

    Baza indukcije

    Uzmimo vor takav da je = 0. Tada oito vrijedi jednakost jer je 2 1 = 2 1 = 0, a vor je list (jer je na dnu stabla) pa nema djece.Korak indukcije

    Uzmimo vor takav da je = + 1. vor moe imati najvie dvoje djece, asvako njegovo dijete moe imati = , ako je dijete crveno, ili +1 =, ako je dijete crno. Svako dijete ima najmanje 2 1 djece, pa iz toga slijedi22 1 1 = 2 1, to dokazuje traenu tvrdnju.

    Kako je

    , moemo pisati da je

    2

    1. Manipulacijama dobijamo

    sljedee: + 1 2 lg + 1 2 l g + 1 , ime smo dokazali da jedubina stabla .

    Ubacivanje u crveno-crno stablo

    U crveno-crno stablo element se ubacuje na sljedei nain:

    1. Nae se mjesto na koje bi se ubacio element u binarnom stablu traenja te muse dodjeli crvena boja

    2. Dokle god nisu zadovoljena sva svojstava, popravljamo stabloa. ako je vor koji promatramo korijen stabla, pobojamo ga u crno

    Slika 5 Roditelj i ujak su crvene boje

    b. ako su i roditelj i ujak vora crvene bojea) pobojamo ih u crnob)njihovog roditelja pobojamo u crveno

    c. ako je roditelj vora crven, a ujak crn

  • 8/6/2019 Cijela radnja

    21/24

    Crveno crno stablo Binarna stabla Bruno Rahle

    Stranica 21 od 24

    a) ako je vor desno dijete roditelja, a roditelj je lijevo dijete djeda(Slika 6 Sluaj alfa) ili je vor lijevo dijete roditelja, a roditelj

    desno dijete djeda (Slika 7 Sluaj beta)

    1.

    rotiramo vezu izmeu njih2. vor koji promatramo postane vor koji je upravo postao

    dijete

    Slika 6 Sluaj alfa

    Slika 7 Sluaj beta

    b)rotiramo vezu izmeu roditelja i djeda

    Slika 8 I otac i djed naginju na lijevu stranu

  • 8/6/2019 Cijela radnja

    22/24

    Crveno crno stablo Binarna stabla Bruno Rahle

    Stranica 22 od 24

    ubaci(sad,x)ako je sad == 0

    sad = novi vor(x)

    izai van

    poveaj sad->nako je sad->vrijednost == x

    poveaj sad->broja

    izai van

    ako je sad->vrijednost < x

    ubaci(sad->d,x)

    inae

    ubaci(sad->l,x)

    popravi(sad)

    popravi(sad)

    sad->osvjei()

    ako su sad->l i sad->d crveni

    sad->l->boja = crna

    sad->d->boja = crnaako su sad->l i sad->l->d crveni

    rotiraj(sad->l->d)

    ako su sad->d i sad->d->l crveni

    rotiraj(sad->d->l)

    ako su sad->l i sad->l->l crveni

    rotiraj(sad->l)

    ako su sad->d i sad->d->d crveni

    rotiraj(sad->d)

    Slika 9 I otac i djed naginju na desnu stranu

  • 8/6/2019 Cijela radnja

    23/24

    Zakljuak

    Stranica 23 od 24

    S obzirom da je raunalna znanost novo podruje, moemo rei da ono jo ne preuzima

    sve uloge za koje je sposobno. To se odnosi na sve njene grane, pa tako i na podruje

    struktura podataka u obliku binarnih stabala. Ipak, njihovu primjenu moemo nai u bazama

    podataka kad je podatke mogue uitati u radnu memoriju.

    Crveno crna stabla slue kao podloga strukturama koje nalazimo u standardima modernih

    programskih jezika tako su recimo u C++ spremnici map i set izgraeni su upravo na toj

    strukturi. Upravo su oni jako pridonijeli popularizaciji tog programskog jezika na

    natjecanjima. Problemi koje ve gotove strukture rjeavaju su u biti dosta teki, a ako i nisu

    teki onda su barem naporni. Primjer za to jest izbacivanje duplih elemenata iz nekog skupa.

    To se moe rijeiti i sortiranjem, ali je puno prirodnije imati neku strukturu u koju emoubacivati elemente, a ona ne e prihvaati duplie (a to je upravo ono to set i jest).

    S obzirom da je ovo podruje intenzivnog istraivanja, moemo oekivati da e se kroz

    nekoliko desetljea binarna stabla korjenito promijeniti. Ovaj rad smatram premalim da

    sadrajno u potpunosti obradi sve to se i danas zna o binarnim stablima jer su o njima

    napisane cijele knjige, pa je stoga nerealno za oekivati da je mogue saeti sve informacije

    na dvadesetak stranica. Ipak, mislim da stvari koje su odabrane su solidno obraene te da

    svatko tko se njima bavi ili ga one zanimaju moe shvatiti to je to AVL stablo, kako se ono

    izgrauje i ostale bitne informacije iz ovog maturalnog rada.

  • 8/6/2019 Cijela radnja

    24/24

    Bibliografija

    St i 24 d 24

    Brad Appleton,AVL Trees: Tutorial and C++ Implementation, [www.oopweb.com], uitano24. 4. 2009.

    o [www.oopweb.com/Algorithms/Documents/AvlTrees/Volume/AvlTrees.htm] Robert Sedgewick,Algorithms in C++, Third Edition, Part 1-4, Addison Weasly Publishing

    Companay, Inc., 1998.

    Robert Sedgewick, Left Leaning Red-Black Trees, 2008, [http://www.cs.princeton.edu], uitano24. 4. 2009.

    o [http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Cliford Stein, Introduction to

    Algorithms, Second Edition, The MIT Presss, 2003.

    Wikipedia, The Free Encyclopedia [http://en.wikipedia.org], uitano 24. 4. 2009.o AVL Tree [http://en.wikipedia.org/wiki/AVL_tree]o Binary Tree [http://en.wikipedia.org/wiki/Binary_tree]o Binary Search Tree [http://en.wikipedia.org/wiki/Binary_search_tree]o Data Structure [http://en.wikipedia.org/wiki/Data_structure]o List of Data Structures [http://en.wikipedia.org/wiki/List_of_data_structures]o Red-black Tree [http://en.wikipedia.org/wiki/Red-black_tree]o Self-balancing Binary Search Tree [http://en.wikipedia.org/wiki/Self-

    balancing_binary_search_tree]