Você está na página 1de 31

rvore Rubro-Negra

Organizao e Recuperao da Informao

Grupo: Osmir Valmor Victor

Tpicos Abordados
Introduo
Propriedades

principais

Conceitos
Definio

bsica da estrutura

Insero
Remoo
Comparao

entre tipos de rvores

Introduo
Inventada

em 1972, 10 anos depois da AVL


por Rudolf Bayer, sob o nome B-rvores
binrias simtricas
Adquirindo em 1978 seu atual nome, por Leo
J. Guibas and Robert Sedgewick
rvore rubro-negra (do ingls Red-Black
trees)

rvore Rubro-Negra
A rvore

rubro-negra tem esse nome devido


a colorao de seus ns
Uma rvore rubro negra (ARN) uma rvore
binria de busca com um campo adicional
que armazena se o n rubro ou negro
O fato de um n ser rubro ou negro usado
como fator de balanceamento da ARN

Propriedades

1 - Cada n tem uma cor que rubro ou negro. Por


conveno, uma rvore no vazia (ou subrvore)
tem a cor de sua raiz e uma rvore vazia negra
2 - A raiz negra
3 - Qualquer caminho da raiz at uma subrvore
vazia tem um nmero igual de ns negros
4 - As subrvores de um n rubro so sempre
negras
-> Propriedade bvia resultando da quarta condio que num
caminho da raiz at uma subrvore vazia no pode haver dois
ns rubros consecutivos

Conceitos

(Altura negra) A altura negra de uma rvore rubro-negra A,


denotada an(A) o nmero de ns negros que se encontram
nos caminhos da raiz at uma folha.
47
68

32

54

15

88

60

40

61

75

90

50

Observe que, pela terceira condio da definio de rvore rubro-negra,


esse nmero bem definido. No caso da rvore acima, a altura negra 3

Conceitos
A altura

de qualquer rvore rubro-negra


logartmica no nmero de chaves
armazenadas
A busca nas rvores rubro-negra tem
complexidade logartmica.
Uma ARN impede que uma subrvore fique
com o dobro da altura da outra subrvore de
um n.

Definio do n
Estrutura

interna de um n

Chave

Cor(Rubro ou Negra)

Ptr Esquerda

Ptr Direita

Definio dos tipos


class ARN
{ Private:
typedef enum {RUBRO, NEGRO} cor;
typedef struct no *ptr;
struct no {
t chave;
ptr esq;
ptr dir;
cor tipo;
};
ptr raiz;
Public:
// mtodos...
}

Insero

Todo n a ser inserido por conveno rubro (pois


se fosse negro no seguiria a propriedade 3)
Se aps a insero for quebrada qualquer
propriedade da ARN devem ser feitas rotaes e/ou
inverso de cores dos ns para que sejam
satisfeitas todas as propriedades
As regras de insero levam em considerao a cor
do tio (o outro filho do pai do n que recebeu o
novo n) do n inserido

Casos
w

tio

v
q

Se t for rubro: o pai de t torna-se rubro e, os filhos


de w tornam-se negros. Caso w seja a raiz, basta
trocar sua cor para negro

Se t for rubro: o pai de t torna-se rubro e, os filhos


de w tornam-se negros. Caso w seja a raiz, basta
trocar sua cor para negro
raiz
w

w
v
q

w
v
q

Casos
w
v
q

Se t for negro: neste caso faz-se uma operao


de rotao e, se necessrio, uma inverso de
cores. H 4 subcasos a considerar:

1 Subcaso

Se q filho esquerdo de v e v filho esquerdo de w


realizada uma rotao simples a direita e as cores de v
e w so invertidas.
( Antes )

( Depois )

v
q

2 Subcaso

Se q filho direito de v e v filho esquerdo de w


realizada uma rotao dupla a direita e as cores de q e
w so invertidas.
( Antes )

( Depois )

q
v

3 e 4 Subcasos
Os

outros dois subcasos so simtricos aos


dois subcasos anteriores

Insero

A complexidade da insero, que a da insero em


rvore binria de busca, logartmica
O pior caso da fase de balanceamento se tiver que
aplicar a inverso de cores at a raiz
Como o tamanho do caminho da raiz at qualquer
folha logartmico, o nmero de operaes tambm
logartmico
Em concluso, a complexidade da insero em
rvores rubro-negras logartmica

Boolean Inserir (const int chave, ptr & filho, ptr & pai, ptr &avo)
{
if (filho == NULL)
{ filho = criar(chave);
return true;
}
else if (chave != filho->chave)
{ boolean e;
if (chave < filho->chave)
e = Inserir(chave, filho->esq, filho, pai);
else
e = Inserir(chave, filho->dir, filho, pai);
if (eh_rubro(filho))
if (e)
if (chave < filho->chave)
{ Remanejar(filho->esq, filho, pai) ;
return false;
}
else
{ Remanejar(filho->dir, filho, pai);
return false;
}
else
return true;
else
return false;
}
else
return eh_rubro(filho);
}

Insero

Animao de uma rvore Rubro-Negra

Applet

(ARN) - Insero

Remoo
A remoo

em rvores rubro-negras pode


ser realizada tambm com um nmero
logartmico de operaes
O procedimento de remoo composto de
uma etapa de remoo em rvore binria de
busca seguido de uma etapa de
balanceamento, caso as propriedades rubronegras teriam sido destrudas durante a
operao

Remoo

Se o n removido for rubro, a rvore continua rubronegra, pois todas as condies da definio ficam
vlidas:

1. Os ns resultantes tem cor rubro ou negro


2. A raiz, que era negra, no foi removida
3. Nenhum n negro foi removido, portanto todos os
caminhos da raiz at uma folha tem um nmero igual de
ns negros
4. Os filhos de todos os ns rubros no removidos no
foram alterados e portanto ficam negros

Remoo

Se o n removido for negro, o nmero de ns de pelo menos um


caminho foi decrementado e consequentemente a terceira
condio ficou invlida. Quando isto acontece, dois tipos de
soluo so possveis:

remoo preguiosa- A remoo preguiosa consiste em marcar o


n como removido, mas sem tira-lo da rvore. Nenhum
remanejamento necessrio. Em compensao, os algoritmos de
insero e busca devem ser modificados para levar em conta que
alguns ns da rvore devem ser considerados como ausentes. A
adoo desta soluo possvel quando as rvores rubro-negras
so usadas no contexto de uma aplicao com poucas operaes
de remoo
remoo efetiva - Atravs de um nmero logartmico de operaes,
a remoo efetiva restabelece as propriedades para que a rvore
seja rubro-negra. Essas operaes so detalhadas em seguida

Remoo Efetiva
Caso

o n y a ser removido for rubro, as


propriedades da ARN no so afetadas.
( Antes )

( Depois )

v
x

Remoo Efetiva

Quando o n a remover y negro, todos os caminhos da raiz


at uma folha passando por esse n tem um n negro a
menos. Seja x o n que passar a ocupar a posio de y na
rvore. O problema da remoo efetiva resolvido atribuindo
negro a cor de x. Assim permanece igual a altura negra de
todos os caminhos contendo x, antes e depois da insero.
( Antes )

( Depois )

x
q

Remoo Efetiva

Porm, se x j era negro, ele agora passa a ser duas


vezes negro, o que torna invlida a definio da ARN,
e preciso remanejar a rvore para eliminar essa
situao.
No caso de x ser a raiz, ento basta torn-lo
simplesmente negro: a altura negra de todos os
caminhos da rvore e decrementada, e a terceira
condio permanece verdadeira.
x no sendo a raiz, seja v seu pai, e w seu irmo. A
seguir considerado o caso de x ser o filho, o outro
caso simtrico omitido.

1 Subcaso Remoo Efetiva

O primeiro caso, ilustrado abaixo considera a situao onde w


rubro. Nesta situao, realizada uma rotao simples a
esquerda de v, e as cores de v e w so modificadas.
O resultado desta modificao que x permanece duplamente
negro. Porm, o seu irmo agora tambm negro, e o
tratamento de um dos casos apresentados a seguir deve ser
aplicado.
( Depois )

( Antes )

w
v

2 Subcaso Remoo Efetiva

O segundo caso configura a situao onde ambas sub-rvores


de w so negras e ilustrado abaixo.
Este remanejamento consiste em subir um ponto negro dos ns
x e w, que passam a ser negro e rubro respectivamente, no n
v. Se ele era anteriormente rubro, ele torna-se negro. Se ele
era anteriormente negro, ele torna-se duplamente negro, e um
novo remanejamento necessrio no nvel superior.
( Antes )

( Depois )

vc

vc

3 Subcaso Remoo Efetiva

No terceiro caso, ilustrado abaixo, a sub-rvore esquerda de w


rubra, e a direita negra. Seja z o filho esquerdo de w.
ento realizada uma rotao simples a direita de w, e uma
inverso das cores de w e z.
O n x permanece duplamente negro, mas configura-se agora
uma situao diferente, onde a sub-rvore direita w rubra,
cujo tratamento apresentado a seguir.
( Depois )

( Antes )

vc

vc
x

z
w

w
z

4 Subcaso Remoo Efetiva

O quarto e ltimo caso corresponde portanto situao onde a


sub-rvore direita de w rubra. Seja z o filho direito de w.
A soluo consiste em fazer uma rotao simples a esquerda
de v, atribuir aos ns v e z a cor negra, e a w a cor que era a
de v.
( Depois )

( Antes )

wc

vc
x

Comparao entre rvores


rvore

AVL

rvore B

Rubro Negra

Fator de
balanceamento

Cada n possui um campo


bal, que pode ser
0 (balanceada),
1 (desbalanceada a direita)
e -1 (desbalanceada a
esquerda).

Total de chaves de uma


pgina (ordem-1).

Cada n possui um campo


cor que pode ser rubro
ou negro.

Mtodo de
balanceamento

Se uma subrvore de um n
estiver 2 nveis maior que a
outra subrvore
(bal = 1 ou -1) ocorre
uma rotao.

O n que excede o nmero


de chaves dividido em dois
novos ns (split).

Caso haja dois ns rubros


consecutivos ou a quantidade
de ns negros at qualquer
folha no sejam iguais ocorre
uma rotao e, se preciso
troca de cores.

Tolerncia de
desbalanceamento

Uma subrvore pode estar 1


nvel maior que a outra
subrvore de um n

Zero. Ela sempre est


balanceada.

Uma subrvore no
pode estar 2 vezes maior que
a outra subrvore de um n.

Crescimento

De cima pra baixo


(raiz folhas)

De baixo pra cima


(folhas raiz)

De cima pra baixo


(raiz folhas)

Bibliografia
http://en.wikipedia.org/wiki/Red-black_tree
rvores

Balanceadas, David Dharbe,

Universidade Federal do Rio Grande do Norte