Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor –...

31
Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor

Transcript of Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor –...

Page 1: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Árvore Rubro-Negra

Organização e Recuperação da Informação

Grupo: Osmir – Valmor – Victor

Page 2: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Tópicos Abordados

Introdução Propriedades principais Conceitos Definição básica da estrutura Inserção Remoção Comparação entre tipos de árvores

Page 3: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Introdução

Inventada em 1972, 10 anos depois da AVL por Rudolf Bayer, sob o nome B-árvores binárias simétricas

Adquirindo em 1978 seu atual nome, por Leo J. Guibas and Robert Sedgewick

Árvore rubro-negra (do inglês Red-Black trees)

Page 4: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Árvore Rubro-Negra

A árvore rubro-negra tem esse nome devido a “coloração” de seus nós

Uma árvore rubro negra (ARN) é uma árvore binária 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

Page 5: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Propriedades

1 - Cada nó tem uma cor que é rubro ou negro. Por convenção, uma árvore não vazia (ou subárvore) tem a cor de sua raiz e uma árvore vazia é negra

2 - A raiz é negra 3 - Qualquer caminho da raiz até uma subárvore

vazia tem um número igual de nós negros 4 - As subárvores de um nó rubro são sempre

negras

-> Propriedade óbvia resultando da quarta condição é que num caminho da raiz até uma subárvore vazia não pode haver dois nós rubros consecutivos

Page 6: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Conceitos

(Altura negra) A altura negra de uma árvore rubro-negra A, denotada an(A) é o número de nós negros que se encontram nos caminhos da raiz até uma folha.

Observe que, pela terceira condição da definição de árvore rubro-negra, esse número é bem definido. No caso da árvore acima, a altura negra é 3

47

32

5

15

40

68

60 88

54 61 75 90

50

Page 7: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Conceitos

A altura de qualquer árvore rubro-negra é logarítmica no número de chaves armazenadas

A busca nas árvores rubro-negra tem complexidade logarítmica.

Uma ARN impede que uma subárvore fique com o dobro da altura da outra subárvore de um nó.

Page 8: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Definição do nó

Estrutura interna de um nó

Chave Cor(Rubro ou Negra)

Ptr Esquerda Ptr Direita

Page 9: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Definição 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: // métodos...}

Page 10: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Inserção

Todo nó a ser inserido por convenção é rubro (pois se fosse negro não seguiria a propriedade 3)

Se após a inserção for quebrada qualquer propriedade da ARN devem ser feitas rotações e/ou inversão de cores dos nós para que sejam satisfeitas todas as propriedades

As regras de inserção levam em consideração a cor do “tio” (o outro filho do pai do nó que recebeu o novo nó) do nó inserido

Page 11: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Casos

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

w

v

q

t

“tio”

φ π

ω Ω Φ

Page 12: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

w

v

q

t

φ π

ω Ω Φ

w

v

q

t

φ π

ω Ω Φ

w

v

q

t

φ π

ω Ω Φ

raiz

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

Page 13: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Casos

Se t for negro: neste caso faz-se uma operação de rotação e, se necessário, uma inversão de cores. Há 4 subcasos a considerar:

w

v

q

t

φ π

ω Ω Φ

Page 14: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

1º Subcaso

Se q é filho esquerdo de v e v é filho esquerdo de w é realizada uma rotação simples a direita e as cores de v e w são invertidas.

w

v

ω

πφ

( Antes )

v

q

πφ

w

Ωω

( Depois )

Page 15: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

2º Subcaso

Se q é filho direito de v e v é filho esquerdo de w é realizada uma rotação dupla a direita e as cores de q e w são invertidas.

w

v

ω

πφ

( Antes )

q

v

φω

w

Ωπ

( Depois )

Page 16: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

3º e 4º Subcasos

Os outros dois subcasos são simétricos aos dois subcasos anteriores

Page 17: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Inserção

A complexidade da inserção, que é a da inserção em árvore binária de busca, é logarítmica

O pior caso da fase de balanceamento é se tiver que aplicar a inversão de cores até a raiz

Como o tamanho do caminho da raiz até qualquer folha é logarítmico, o número de operações também é logarítmico

Em conclusão, a complexidade da inserção em árvores rubro-negras é logarítmica

Page 18: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

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);}

Inserção

Page 19: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Animação de uma Árvore Rubro-Negra

Applet (ARN) - Inserção

Page 20: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção

A remoção em árvores rubro-negras pode ser realizada também com um número logarítmico de operações

O procedimento de remoção é composto de uma etapa de remoção em árvore binária de busca seguido de uma etapa de balanceamento, caso as propriedades rubro-negras teriam sido destruídas durante a operação

Page 21: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção

Se o nó removido for rubro, a árvore continua rubro-negra, pois todas as condições da definição ficam válidas:

– 1. Os nós resultantes tem cor rubro ou negro– 2. A raiz, que era negra, não foi removida– 3. Nenhum nó negro foi removido, portanto todos os

caminhos da raiz até uma folha tem um número igual de nós negros

– 4. Os filhos de todos os nós rubros não removidos não foram alterados e portanto ficam negros

Page 22: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção

Se o nó removido for negro, o número de nós de pelo menos um caminho foi decrementado e consequentemente a terceira condição ficou inválida. Quando isto acontece, dois tipos de solução são possíveis:

– remoção preguiçosa- A remoção preguiçosa consiste em marcar o nó como removido, mas sem tira-lo da árvore. Nenhum remanejamento é necessário. Em compensação, os algoritmos de inserção e busca devem ser modificados para levar em conta que alguns nós da árvore devem ser considerados como ausentes. A adoção desta solução é possível quando as árvores rubro-negras são usadas no contexto de uma aplicação com poucas operações de remoção

– remoção efetiva - Através de um número logarítmico de operações, a remoção efetiva restabelece as propriedades para que a árvore seja rubro-negra. Essas operações são detalhadas em seguida

Page 23: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção Efetiva

Caso o nó y a ser removido for rubro, as propriedades da ARN não são afetadas.

v

y

ω

( Antes )

v

x

ω

φ

( Depois )

Page 24: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção 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 posição de y na árvore. O problema da remoção efetiva é resolvido atribuindo negro a cor de x. Assim permanece igual a altura negra de todos os caminhos contendo x, antes e depois da inserção.

v

y

ω

( Antes )

v

x

ω

φ

( Depois )

Page 25: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Remoção Efetiva

Porém, se x já era negro, ele agora passa a ser duas vezes negro, o que torna inválida a definição da ARN, e é preciso remanejar a árvore para eliminar essa situação.

No caso de x ser a raiz, então basta torná-lo simplesmente negro: a altura negra de todos os caminhos da árvore e decrementada, e a terceira condição permanece verdadeira.

x não sendo a raiz, seja v seu pai, e w seu irmão. A seguir é considerado o caso de x ser o filho, o outro caso simétrico é omitido.

Page 26: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

1º Subcaso – Remoção Efetiva

O primeiro caso, ilustrado abaixo considera a situação onde w é rubro. Nesta situação, é realizada uma rotação simples a esquerda de v, e as cores de v e w são modificadas.

O resultado desta modificação é que x permanece duplamente negro. Porém, o seu irmão agora também é negro, e o tratamento de um dos casos apresentados a seguir deve ser aplicado.

w

v

φω

π

( Depois )

x

£€

v

w

φ

ω

π

( Antes )

x

£€

Page 27: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

2º Subcaso – Remoção Efetiva

O segundo caso configura a situação onde ambas sub-árvores de w são negras e é ilustrado abaixo.

Este remanejamento consiste em subir um ponto negro dos nós 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 é necessário no nível superior.

w

φ

ω

π

( Antes )

x

£€

vc

w

φ

ω

π

( Depois )

x

£€

vc

Page 28: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

3º Subcaso – Remoção Efetiva

No terceiro caso, ilustrado abaixo, a sub-árvore esquerda de w é rubra, e a direita é negra. Seja z o filho esquerdo de w. É então realizada uma rotação simples a direita de w, e uma inversão das cores de w e z.

O nó x permanece duplamente negro, mas configura-se agora uma situação diferente, onde a sub-árvore direita w é rubra, cujo tratamento é apresentado a seguir.

w

ω

Ω

( Antes )

x

£€

vc

z

φ π

z

ωφ

( Depois )

x

£€

vc

w

π Ω

Page 29: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

4º Subcaso – Remoção Efetiva

O quarto e último caso corresponde portanto à situação onde a sub-árvore direita de w é rubra. Seja z o filho direito de w.

A solução consiste em fazer uma rotação simples a esquerda de v, atribuir aos nós v e z a cor negra, e a w a cor que era a de v.

w

ωφ

( Antes )

x

£€

vc

z

π Ω

z

φ

( Depois )

x

£€

wc

v

π Ω

Page 30: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Comparação entre árvores

ÁrvoreÁrvore AVLAVL Árvore BÁrvore B Rubro NegraRubro Negra

Fator debalanceamento

Cada nó possui um campo bal, que pode ser

0 (balanceada), 1 (desbalanceada a direita)

e -1 (desbalanceada a esquerda).

Total de chaves de umapágina (ordem-1).

Cada nó possui um campocor que pode ser rubro

ou negro.

Método debalanceamento

Se uma subárvore de um nóestiver 2 níveis maior que a

outra subárvore (bal = 1 ou -1) ocorre

uma rotação.

O nó que excede o númerode chaves é dividido em dois

novos nós (split).

Caso haja dois nós rubrosconsecutivos ou a quantidade

de nós negros até qualquerfolha não sejam iguais ocorre

uma rotação e, se precisotroca de cores.

Tolerância dedesbalanceamento

Uma subárvore pode estar 1nível maior que a outra

subárvore de um nó

Zero. Ela sempre estábalanceada.

Uma subárvore não pode estar 2 vezes maior quea outra subárvore de um nó.

CrescimentoDe cima pra baixo

(raiz folhas)De baixo pra cima

(folhas raiz)De cima pra baixo

(raiz folhas)

Page 31: Árvore Rubro-Negra Organização e Recuperação da Informação Grupo: Osmir – Valmor – Victor.

Bibliografia

http://en.wikipedia.org/wiki/Red-black_tree Árvores Balanceadas, David Déharbe,

Universidade Federal do Rio Grande do Norte