Sunteți pe pagina 1din 35

Árvores Rubro-Negras

Murilo Ybanez
Definição
 Uma alternativa às árvore AVL são as
árvores rubro-negras (Bayer, 1972), que
garantem o balanceamento ao impor as
seguintes regras para todos os seus nós
1) Todo nó é vermelho ou preto
2) A raiz é preta
3) Toda folha (NULA) é preta
4) Se um nó é vermelho, ambos os filhos são pretos
5) Todos os caminhos de um nó para as folhas
descendentes contém o mesmo número de nós
pretos
2
Exemplo

18

10 22

3 13 20 27

1 5 12 16 19 21 24 40

14 17
3
Exercício
 Quais árvores são rubro-negras?
6 5

3 7
2 10

2 4 8

1 4 7 11
5 9
1

10 0 3 9 12
6

4 8 8
2 5 7 9

4
1 3 10
Altura de Preto
 A altura de preto altp de um nó nd é definida como a
quantidade de nós pretos nos caminhos que partem
do mesmo até as folhas 18 3

10 3 22 2

3 2 13 2 20 2 27 1

1 1 1 5 1 12 2 16 1 19 1 21 1 24 1 40

 Repare que 1 14 1 17

altp(nd)
) ≤ alt(nd) ≤ 2altp(nd)
5
Operações em Árvores Rubro-
Negras
 Vários testes envolvendo pai, tio e avô dos
nós precisam ser feitos para a realização das
operações, e normalmente se usa uma
representação de nó que inclui um ponteiro
para o pai

struct No {
char info;
int cor; //bastaria um bit...
No * pai;
No * esq, * dir;
}; 6
Operações em Árvores Rubro-
Negras
 A busca em uma árvore rubro-negra é
idêntica à busca em uma árvore não
balanceada
 Já as operações de inserção e remoção
podem desbalancear a árvore, o que pode
ser corrigido com até três rotações e
seqüências de operações de trocas de cores
 As rotações podem ser para esquerda ou
para direita e são as mesmas realizadas nas
operações em árvores AVL
7
Inserção
 O nó a ser inserido em uma árvore rubro-
negra sempre será o pai de uma folha nula
e inicialmente é vermelho, para não mudar
a altura de preto
 Portanto, somente duas propriedades
podem ser violadas
1) A raiz é preta
4) Se um nó é vermelho, ambos os filhos são pretos

8
Algoritmo de Inserção
 A violação da propriedade 1 pode ser
resolvida apenas com a mudança da cor da
raiz

1 40 1 40

9
Algoritmo de Inserção
 Três situações (e casos simétricos) têm de
ser consideradas quando a inserção do nó
viola a propriedade 4
 O pai e o tio do nó são vermelhos
 O pai é vermelho, o tio é preto e o nó é um filho
da direita
 O pai é vermelho, o tio é preto e o nó é um filho
da esquerda

10
Algoritmo de Inserção
 O pai e o tio do nó são vermelhos
Se o pai de a é vermelho
ou a é raiz, há uma nova
a 1 a 2 violação das propriedades
rubro-negras

t p 1 t p 1

1 1
x x

11
Algoritmo de Inserção
 O pai é vermelho, o tio é preto e o nó é um
filho da direita

a p

t Rotação Simples
p a x

x t

Caso simétrico? 12
Algoritmo de Inserção
 O pai é vermelho, o tio é preto e o nó é um
filho da esquerda

a x
t
Rotação Dupla p
p a

x t

Caso simétrico? 13
Exercício
 O que acontece com a inserção do valor 14
na árvore abaixo?

18

10 22

3 13 27

12 16

14

14
Algoritmo de Inserção
 O balanceamento é realizado a partir do nó
que foi inserido, o que torna desnecessário
guardar o caminho de volta para a raiz. Em
função disso, utiliza-se um algoritmo iterativo
para a inserção, seguido da operação de
balanceamento

inserir(raiz, x) {
/* Inserir usando algoritmo iterativo */
...
balancear_ins(nd_x);
}
15
Algoritmo de Inserção
 Algoritmo de balanceamento em C

void balancear_ins(No * no) {


No * pai = no->pai;
if (pai != NO_NULO) {
//Prop. 4 violada
} else {
no->cor = 'P'; //Prop. 1 violada
}
}
16
Algoritmo de Inserção
 Algoritmo de balanceamento em C
while (pai->cor == 'V') {//Prop 4. violada
No * avo = pai->pai;
if (pai == avo->dir) { 18
if (avo->esq->cor == 'V') {
if (avo->pai != NO_NULO) avo->cor = 'V'; 10 22
avo->esq->cor = 'P';
avo->dir->cor = 'P'; 3 13 27
no = avo;
} else { 12 16
if (no == pai->esq) rotacionar_dir(pai);
avo->cor = 'V';
avo->dir->cor = 'P'; 14
rotacionar_esq(ptraiz, avo);
}
} else { //casos simétricos }
pai = no->pai; 17
}
Exercício
 Forneça a árvore rubro-negra resultante da
inserção da seqüência 10, 6, 4, 5, 0, 3, 9, 2,
1, 8, 7

18
Remoção
 Se o nó removido for vermelho, nada precisa ser
feito pelas seguintes razões:
 Nenhuma altura de preto muda
 Nós vermelhos não se tornam adjacentes
 Por ser vermelho, o nó removido não pode ser a raiz, que
continua preta
 Se o nó removido for preto, as seguintes
propriedades podem ser violadas:
1) A raiz é preta
4) Se um nó é vermelho, ambos os filhos são pretos
5) Todos os caminhos de um nó para as folhas
descendentes contém o mesmo número de nós pretos 19
Algoritmo de Remoção
 A perda de um nó preto pode ser compensada ao
se incluir um nó preto adicional nos caminhos para
as folhas que passavam pelo nó excluído. Isto
pode ser obtido com trocas de cores e rotações
 Todas as manipulações serão feitas a partir do nó x que
assume o lugar do nó preto excluído
18 2 altp_e = 1 18 altp_d = 2

10 1 22 1 x 13 1 22 1

13 1 20 1 27 1 20 1 27 1

20
Algoritmo de Remoção
 Quatro situações (e casos simétricos) têm de
ser consideradas no que diz respeito aos
parentes de x
 o irmão de x é vermelho
 o irmão e os sobrinhos de x são pretos
 o irmão de x é preto o sobrinho da direita é
vermelho
 o irmão de x é preto, o sobrinho da esquerda é
vermelho e o sobrinho da direita é preto
21
Algoritmo de Remoção
 Um nó preto adicional pode eventualmente
ser inserido se o irmão de x é preto. Se o
irmão for vermelho, a primeira providência é
torná-lo preto com uma rotação
altp_e = altp-1 p altp_d = altp
i

x i altp_e = altp-1 p altp_d = altp sd


Rotação Simples
se sd x se
a b
e f

c d e f Caso simétrico? a b c d
22
Algoritmo de Remoção
 Irmão e os sobrinhos de x são pretos
 Pai vermelho
Nó preto
adicional

altp_e = altp-1 p altp_d = altp altp_e = altp p altp_d = altp

x i x i

se sd se sd
a b a b

Caso simétrico?
c d e f c d e f

23
Algoritmo de Remoção
 Irmão e os sobrinhos de x são pretos
 Pai preto Nó preto
adicional acima
de p, que se
torna o novo x

altp_e = altp-1 p altp_d = altp altp_e = altp-1 p altp_d = altp-1

x i x i

se sd se sd
a b a b

Caso simétrico?
c d e f c d e f

24
Algoritmo de Remoção
 Irmão de x é preto e o sobrinho da direita é
vermelho
Assume a cor
que era de p

altp_e = altp-1 p altp_d = altp altp_e = altp i altp_d = altp


Nó preto
adicional p
x i sd

se sd Rotação Simples x se
a b e f

a
c d e f Caso simétrico? b c d

25
Algoritmo de Remoção
 O irmão de x é preto, o sobrinho da esquerda
é vermelho e o sobrinho da direita é preto
Assume a cor
que era de p

altp_e = altp-1 p altp_d = altp altp_e = altp se altp_d = altp


Nó preto
adicional p
x i i

se sd Rotação Dupla x sd
a b c d

a
c d e f Caso simétrico? b e f

26
Algoritmo de Remoção
 O balanceamento é realizado a partir do nó
x. Utiliza-se um algoritmo iterativo para a
remoção, seguido da operação de
balanceamento

remover(raiz, y) {
/* Remover y usando algoritmo iterativo,
sendo nd_x o nó substituto */
...
balancear_rem(nd_x);
}
27
Algoritmo de Remoção
 Algoritmo de balanceamento em C
while (no != raiz && no->cor == 'P') {
No * pai = no->pai;
if (no == pai->esq) {
No * irmao = pai->dir; 18
if (irmao->cor == 'V') {
pai->cor = 'V';
irmao->cor = 'P';
x 13 22

rotacionar_esq(pai);
20 27
} else {
//Irmão preto
}
} else { //Casos simétricos }
}
no->cor = 'P';
28
Algoritmo de Remoção
 Algoritmo de balanceamento em C
//Irmão preto
if (irmao->dir->cor == 'P') {
if (irmao->esq->cor == 'P') {
irmao->cor = 'V';
no = pai; 18
} else {
irmao->cor = 'V'; x 13 22
irmao->esq->cor = 'P';
rotacionar_dir(irmao); 20 27
}
} else {
irmao->cor = pai->cor;
irmao->dir->cor = 'P';
pai->cor = 'P';
rotacionar_esq(pai);
no = raiz; //para finalizar 29
}
Exercício
 Forneça a árvore resultante da exclusão dos
valores 2, 3, 4, 5 e 6

30
Eficiência da Árvore Rubro-
Negra
 Como a altura da árvore rubro-negra varia
com a quantidade de nós?
 Qual a pior árvore para uma determinada
altura de preto bh?
3 40
2 40
1 40 20 60
0
N0 = 1
20 60
N1 = 1 10 30 50 70
N2 = 3
N3 = 7 31
Eficiência da Árvore Rubro-
Negra
 Se Nbh representa a quantidade de nós de
uma árvore com altura de preto bh, o pior
caso ocorre quando h = bh e a seguinte
relação se torna válida
Nbh = 2bh-1
Por outro lado, como bh ≤ h ≤ 2bh, e portanto
bh ≥ h/2, então
Nbh ≥ 2h/2-1
32
Eficiência da Árvore Rubro-
Negra
 Resolvendo a inequação anterior para h,
chega-se finalmente a
h ≤ 2 log (Nbh+1),
e portanto, no pior caso, temos
h = 2 log (Nbh+1)
Na equação acima, h representa a maior
altura que uma árvore com altura de pretos
bh pode ter, e Nbh é a quantidade de nós da
pior árvore com altura de pretos bh. 33
Árvores Rubro-Negras vs
Árvores AVL
 Vantagens da AVL sobre a Rubro-Negra
 Conceito mais simples
 Altura da árvore no pior caso
 1,44 log(n) vs. 2 log(n)
 Eficiente para árvores que mudam pouco
 Vantagens da Rubro-Negra sobre a AVL
 Apenas 1 bit de informação de balanceamento
 Remoção requer no máximo 3 rotações
 Eficiente para árvores que mudam muito
34
Animação
 Animação

35

S-ar putea să vă placă și