View
577
Download
2
Category
Preview:
DESCRIPTION
If969 - Árvores Red-Black
Citation preview
Árvores Red-‐Black Centro de Informá-ca Universidade Federal de Pernambuco Sistemas de Informação Vinicius Cardoso Garcia vcg@cin.ufpe.br
© 2011 – Vinicius Cardoso Garcia
Árvore Red-‐Black • Uma Árvore Red-‐Black é uma Árvore Binária de Busca com um bit extra de armazenamento por nodo que indica sua cor: preta ou vermelha
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
2
Árvore Red-‐Black • A idéia é restringir a forma como os nodos podem ser coloridos em qualquer caminho da raiz até as folhas de tal forma que nenhum caminho possa ser mais que duas vezes mais longo que outro caminho, deste modo a árvore fica aproximadamente balanceada
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
3
Nós na Árvore Red-‐Black • De forma geral um nó de uma árvore Red-‐Black tem os campos: – Cor – Dados – Pai – Esquerdo – Direito
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
4
Árvore Red-‐Black • Uma Árvore Binária de Busca é uma Árvore Red-‐Black se ela sa-sfaz as seguintes propriedades: 1. Todo nodo é Preto ou Vermelho
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
5
Árvore Red-‐Black • Uma Árvore Binária de Busca é uma Árvore Red-‐Black se ela sa-sfaz as seguintes propriedades: 1. Todo nodo é Preto ou Vermelho 2. A raiz é PRETA
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
6
Árvore Red-‐Black • Uma Árvore Binária de Busca é uma Árvore Red-‐Black se ela sa-sfaz as seguintes propriedades: 1. Todo nodo é Preto ou Vermelho 2. A raiz é PRETA 3. Todo filho de uma folha (Null) é PRETO
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
7
Árvore Red-‐Black • Uma Árvore Binária de Busca é uma Árvore Red-‐Black se ela sa-sfaz as seguintes propriedades: 1. Todo nodo é Preto ou Vermelho 2. A raiz é PRETA 3. Todo filho de uma folha (Null) é PRETO 4. Se um nó é Vermelho, então ambos os filhos dão
PRETOS
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
8
Árvore Red-‐Black • Uma Árvore Binária de Busca é uma Árvore Red-‐Black se ela sa-sfaz as seguintes propriedades: 1. Todo nodo é Preto ou Vermelho 2. A raiz é PRETA 3. Todo filho de uma folha (Null) é PRETO 4. Se um nó é Vermelho, então ambos os filhos dão
PRETOS 5. Para cada nó, todos os caminhos do nó para
folhas descendentes contém o mesmo número de nós PRETOS
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
9
Árvore Red-‐Black
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
10
Altura de Preto • Dada uma árvore red-‐black: – É possível definir a altura preto de um nó x, denotada por bh(x), como: • Número de nós pretos em qualquer caminho desde um nodo x, sem incluir esse nodo, até uma folha.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
11
Boas Árvores de Busca • Lema 13.1: – Uma árvore red-‐black com n nós internos tem altura máxima de 2lg(n+1).
• Prova?
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
12
Boas Árvores de Busca: Prova do Lema 13.1
• Prova: – Primeiro mostramos que a sub-‐árvore com raiz em qualquer nó x contém pelo menos 2bh(x)-‐1 nós internos. (Por indução em bh(x))
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
13
Boas Árvores de Busca: Prova do Lema 13.1
• Prova: – Primeiro mostramos que a sub-‐árvore com raiz em qualquer nó x contém pelo menos 2bh(x)-‐1 nós internos. (Por indução em bh(x))
– Caso Base (bh(x) = 0): 2bh(x)-‐1 = 20-‐1 = 0 nós internos, ou seja, bh(x) = 0 engloba o caso em que x é uma folha.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
14
Boas Árvores de Busca: Prova do Lema 13.1
• Prova: – Primeiro mostramos que a sub-‐árvore com raiz em qualquer nó x contém pelo menos 2bh(x)-‐1 nós internos. (Por indução em bh(x))
– Caso Base (bh(x) = 0): 2bh(x)-‐1 = 20-‐1 = 0 nós internos, ou seja, bh(x) = 0 engloba o caso em que x é uma folha.
– H.I.: A sub-‐árvore que tem como raiz o nó com altura-‐preta bh(x)-‐1 possui 2bh(x)−1-‐1 nós internos.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
15
Boas Árvores de Busca: Prova do Lema 13.1
• Prova: – Primeiro mostramos que a sub-‐árvore com raiz em qualquer nó x contém pelo menos 2bh(x)-‐1 nós internos. (Por indução em bh(x))
– Caso Base (bh(x) = 0): 2bh(x)-‐1 = 20-‐1 = 0 nós internos, ou seja, bh(x) = 0 engloba o caso em que x é uma folha.
– H.I.: A sub-‐árvore que tem como raiz o nó com altura-‐preta bh(x)-‐1 possui 2bh(x)−1-‐1 nós internos.
– P.I.: Os filhos de um nó x com altura-‐preta bh(x) possuem altura-‐preta bh(x) se for vermelho ou bh(x)-‐1 se for preto, logo, a sub-‐árvore que tem x como raiz possui pelo menos (2bh(x)−1-‐1) + (2bh(x)−1-‐1) + 1 = 2bh(x)-‐1 nós internos.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
16
Árvore Red-‐Black • As operações de Inserir e Remover são mais complicadas nas Árvores Red-‐Black porque elas podem ferir alguma propriedade deste -po de árvore
• Neste caso u-lizamos operações de rotação para corrigir a distribuição dos nós e suas cores, reestabelecendo as propriedades
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
17
Árvore Red-‐Black • As operações de Inserir e Remover são mais complicadas nas Árvores Red-‐Black porque elas podem ferir alguma propriedade deste -po de árvore
• Neste caso u-lizamos operações de rotação para corrigir a distribuição dos nós e suas cores, reestabelecendo as propriedades
• Essas operações podem ser implementadas de forma bastante parecida com as Árvores Binárias de Busca, bastando apenas modificar as cores dos nós para que as propriedades sejam sa-sfeitas
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
18
Rotação a Esquerda • Ao realizarmos uma rotação à esquerda, em torno do nó x, é suposto que y é não nulo.
• A rotação à esquerda “faz o pivô” na ligação entre x e y. – Y vira a nova raiz da árvore – X vira o filho esquerdo de Y – O filho esquerdo de Y vira filho direito de X
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
19
Inserção em uma Árvore Red-‐Black • Para inserir um elemento em uma árvore red-‐black: – Inicialmente, um nodo Z é inserido como se a árvore fosse uma árvore de busca binária comum.
– Colori-‐se Z de vermelho. – Invoca-‐se uma função RB-‐INSERT-‐FIXUP para recolorir e executar rotações na árvore.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
20
RB-‐INSERT(T, z)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
21
RB-‐INSERT-‐FIXUP(T, z)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
22
O Tio do elemento inserido é VERMELHO
• Um nó z depois da inserção
• Se z e seu pai são vermelhos, violamos a propriedade 4
• Como o -o y de z é vermelho, aplicamos o caso 1 no código e re-‐colorimos os nós
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
23
O Qo do elemento inserido é PRETO e o elemento inserido é um filho da direita • De novo, z e seu pai são vermelhos, ma so -o de z é preto
• Como z é filho da direita de p[z], aplicamos o caso 2.
• Uma rotação a esquerda é executada e remodelamos a árvore
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
24
O Qo do elemento inserido é PRETO e o elemento inserido é um filho da esquerda • Agora z é o filho da esquerda de seu pai, e o caso 3 pode ser aplicado.
• Uma rotação a direita produz uma nova árvore…
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
25
Árvore válida
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
26
• Árvore red-‐black válida
Como funciona o RB-‐INSERT-‐FIXUP • Passos: – Determinar as violações das regras da árvore red-‐black com a inserção e coloração do novo nó z
– Examinar a meta global do loop while, linhas 1 a 15
– Examinar os três casos que o loop while se divide • Quais das propriedades da árvore red-‐black podem ser violadas? – As propriedade 2 e 4!
• A raiz deve ser preta. • Um nó vermelho não pode ter filho vermelho.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
27
O Loop While • No início, o loop while tem três invariantes: – O nó z é vermelho – Se P[z] é a raiz, então P[z] é preto. – Se exis-r alguma violação das propriedades red-‐black, exis-rá apenas uma única violação: • Se z é a raiz e é vermelha (propriedade 2) • Se o pai de z é vermelho e z é vermelho (propriedade 4)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
28
Loop Invariante • Inicialização: – Começa-‐se com uma árvore red-‐black sem violações e começamos com a inserção de z. • Quando RB-‐INSERT-‐FIXUP é chamado z é o nó vermelho que foi adcionado • Se P[z] é a raiz, ete começou preto e não é modificado • Se houver violações, são da propriedade 2 ou da propriedade 4 (exclusivamente).
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
29
Loop Invariante • Término: – Quando o loop termina, P[z] é preto (propriedade 4)
– A propriedade 2 é garan-da na linha 16. • Manutenção: – Só entra-‐se no loop se P[z] for vermelho, caso contrário, P[z] é preto.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
30
Inserir e Remover • Dada uma árvore binária, é possível inserir e/ou remover nós da árvore. – Porém, as propriedades da árvore devem ser man-das!
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
31
Analisando: Caso 1 • Z e P[z] são vermelhos
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
32
Análise: Casos 2 e 3 • Caso 2: o -o y de z é preto e z é filho da direita • Caso 3: o -o y de z é preto e z é filho da esquerda
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
33
Remoção em Árvores Red-‐Black • Como em uma árvore binária, a remoção de um elemento de
uma árvore red-‐black tem custo em tempo de O(lg n) • Para Remover um elemento, o processo é bem semelhante a
de uma árvore binária:
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
34
Removendo • Observe que: – A função RB-‐DELETE-‐FIXUP só é invocada caso Z (o nó deletado) seja preto.
– Caso o nó deletado seja vermelho as propriedades red-‐black ficam inalteradas, visto que: • Nenhuma altura preta foi alterada • Nenhum nó vermelho ficou adjacente • Se Z é vermelho, então Z não é raiz: Assim a Raiz conQnua preta.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
35
Removendo um elemento • Se o nó y deletado é preto, podem ocorrer três problemas: – Se y era a raiz e um filho vermelho de y se torna a raiz (viola propriedade 2)
– Se x e P[y] (que agora tb é P[x]) eram vermelhos (viola propriedade 4)
– A remoção de y faz com que o caminho que con-nha y tenha agora um nó preto a menos (viola a propriedade 5)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
36
RB-‐DELETE-‐FIXUP(T, x)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
37
Caso de RB-‐DELETE-‐FIXUP(T,x)
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
38
Caso de RB-‐DELETE-‐FIXUP(T,x) • Caso1: – O irmão w de x é vermelho
• Caso2: – O irmão w de x é preto e ambos os filhos de w são pretos
• Caso3: – O irmão w de x é preto e o filho da esquerda de w é vermelho e o da direita é preto
• Caso4 – O irmão w de x é preto e o filho da direita de w é vermelho
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
39
Resumindo • Árvores Red-‐Black: – Árvores Binárias de Busca com bit adicional para representar a cor (PRETA ou VERMELHA)
– Cinco propriedades básicas: • Todo nó é colorido PRETO ou VERMELHO. • A raiz é PRETA. • As folhas (NULL) são PRETAS. • Se um nó é VERMELHO, seus filhos são PRETOS. • Para cada nó, todos os caminhos até as folhas descendentes contém o mesmo número de nós.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
40
Resumindo • Árvores Red-‐Black: – Lema: Uma Árvore Red-‐Black com n nós internos tem altura o máximo 2lg(n+1)
– Possui todas as operações que uma árvore binária balanceada comum possui
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
41
Resumindo • Árvores Red-‐Black: – Inserir: três casos a considerar
• O -o é VERMELHO: inverte cores do avô, pai e -o • O -o é PRETO e filho da direita: faz rotação para a esquerda • O -o é PRETO e filho esquerda: inverte cores do avô e do pai e faz rotação para a direita
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
42
Resumindo • Árvores Red-‐Black: – Remover: quatro casos a considerar
• W é VERMELHO: inverte cores do pai e de w. • w é PRETO e ambos os filhos de w saão pretos: “remove” um PRETO de x, faz w VERMELHO e “adiciona” PRETO ao pai. Faz pai novo x.
• w é PRETO, o filho da esquerda é́ VERMELHO e o da direita PRETO: inverte cores de w e do seu filho da esquerda e faz uma rotação para a direita.
• w é PRETO e o filho da direita é VERMELHO: atribui a cor do pai a w, faz pai PRETO, faz filho da direta de w PRETO e faz uma rotação para a esquerda.
– Complexidade das operações: O(lgn).
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
43
AQvidades Complementares • Leitura do capítulo 13 do Livro do Cormen • Exercício 1 – Implementar uma classe do nó red-‐black. Implementar também uma classe de uma árvore red-‐black com a função de inserção de um elemento.
• Exercício 2 – Implementar a funcionalidade de deletar um nó em uma árvore red-‐black.
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
44
Referências na Web • h�p://gauss.ececs.uc.edu/RedBlack/redblack.html • h�p://ww3.algorithmdesign.net/handouts/RedBlackTrees.pdf
• h�p://www.cs.buap.mx/~-tab/files/RedBlackTrees.pdf
• h�p://www.cs.dal.ca/~nzeh/Teaching/Fall%202003/3110/RedBlackTrees.pdf
• h�p://en.wikipedia.org/wiki/Red-‐black_tree
Algoritmos e Estrutura de Dados Árvores Red-‐Black © 2011 – Vinicius Cardoso Garcia
45
Recommended