Professional Documents
Culture Documents
Crveno-Crna Stabla
Crveno-Crna Stabla
BINARNO STABLO
crveno-crna stabla
2012/2013
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.
2 / 39
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
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 / 39
BALANSIRANOST
Balansiranju
SUBSa
moe
se
pristupiG
- nakon
to
su
svi
vorovi
uneseni
u
stablo
- pri
svakom
pojedinom
unosu/brisanju
5 / 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 / 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 / 39
BALANSIRANOST
8 / 39
BALANSIRANOST
9 / 39
BALANSIRANOST
10 / 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 / 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.
2.
na
svakoj
putanji
od
korijena
do
bilo
kojeg
vanjskog
vora,
mora
biG
jednak
broj
crnih
vorova
(crno
pravilo)
3.
12 / 39
CC STABLO
10
10
13 / 39
CC STABLO
10
14 / 39
CC STABLO
10
5
10
10
15 / 39
CC STABLO
10
16 / 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 / 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 / 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 / 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.
Laziness wins!!
20 / 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
10
10
21 / 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)
10
22 / 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 / 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 / 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 / 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
26 / 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
27 / 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 / 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
29 / 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
30 / 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
31 / 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.
Strukture
podataka
i
algoritmi
32 / 39
CC
STABLO
-
BRISANJE
1.
sluaj
- ako
je
roditelj
brisanog
ipak
bio
crven,
tada
jednostavno
zamijenimo
boju
roditelja
i
brata
brisanog
33 / 39
CC
STABLO
-
BRISANJE
2.
sluaj
- lijevi
neak
crven,
desni
neak
i
roditelj
svejedno
(jednostruka
rotacija)
34 / 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 / 39
CC
STABLO
-
BRISANJE
4.
sluaj
- brat
je
crven,
desni
neak
mu
je
crn,
a
sin
tog
desnog
neaka
crven
36 / 39
CC
STABLO
-
BRISANJE
4.
sluaj
- brat
je
crven,
desni
neak
mu
je
crn,
a
jedini
sin
(lijevi)
tog
desnog
neaka
crven
37 / 39
CC
STABLO
-
BRISANJE
4.
sluaj
- brat
je
crven,
desni
neak
mu
je
crn,
a
jedini
sin
(desni)
tog
desnog
neaka
crven
38 / 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 / 39